|
21.01.2002, 10:27 | #1 |
Moderator
|
Еще раз о Query
Чем больше разбираюсь с запросами, тем все непонятнее становится. (
Если с созданием запросов в АОТ еще все более-менее понятно то при создании из кода уже не все так гладко. 1. Куда возвращается результат выражений типа: select * from CustTable; В документации сказано: The result will always be returned in the table variable. Тогда почему следующий код вызывает ошибку: <pre> CustTable ct; ct = select * from CustTable; Eсли я делаю так: CustTable ct; select * from ct where .....; </pre> как я понимаю, результат сохраняется в ct. А что происходит в случае выборки из двух таблиц ? То есть, если я пишу: CustTable ct; VendTable vt; select * from ct,vt where ..... Где в данном случае сохранится результат ? 2. В Аксапте есть классы: Query, QueryBuildDataSource, QueryBuildRange, QueryBuildLink, QueryBuildDynalink, QueryRun. Почему я не вижу их в АОТ ? 3.<pre> QueryRun qr; Query NewQuery; QueryBuildDataSource bb; QueryBuildRange br; NewQuery = new Query ("MyQuery"); bb = NewQuery.AddDataSource (TableNum(CustTable)); br = bb.AddRange (fieldNum(CustTable, AccountNum)); br.value ("1500..2000"); qr = new QueryRun (NewQuery); </pre> Как я понимаю, выполнив этот код я должен получить в qr искомый набор данных. Почему же если я пытаюсь затем сделать следующее: <pre>if (qr.prompt()) { while (qr.next()) { print qr.AccountNum; // !!! Ошибка !!! } } </pre> компилятор сообщает об ошибке. Как обратиться к определенному полю в выборке? А как узнать количество записей возвращенных запросом ? Еще больше удивляет то, что запросы реализованны именно так и не иначе. (( Насколько я помню в рекламных проспектах Аксапты сообщалось о возможности использования SQL напрямую в коде программы. Вышеприведенный код, который, кстати, взят из справочной системы, свидетельсвует об обратном. Извините за столь обширный вопрос, но на службу поддержки особой надежды нет ((( <hr> <i>Отредактировал Роман Кошелев, используя тег <pre> см. http://www.axforum.info/forums/showt...=&threadid=177 |
|