Прямой SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

если Вы к ней хотите обратиться в запросе dsql, то ее нужно объявить как временную таблицу dsql (sqlCreateTmpTable)
Уточняю:
1. Должна ли эта таблица объявляться в проекте?
2. Если в проекте она создана и заполнена, то как перелить содержимое в созданную через dsql таблицу? Насколько я понимаю, физически это разные таблицы.
Или
Создаем dsql таблицу, вываливаем в нее первым запросом данные и работаем потом с ней вторым запросом?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

В проекте Вы можете объявить временную атлантическую структуру table struct

Я не очень может представляю вашу задачу. Но схема примерно такая.
1. Создаем в коде ard dsql временную таблицу
2. набиваем ее какими там данными по смыслу (см пример из хэлпа sqlCreateTmpTable)
3. далее эту таблицу ,созданную в п.2 можно использовать для разных целей запросах dsql последующих

"Если в проекте она создана и заполнена, то как перелить содержимое в созданную через dsql таблицу"
сразу набиваете нужными данными dsql таблицу. Вариант о котором Вы пишете не очень хороший будет, хотя реализуем
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Суть в том, что мне легче было обрабатывать данные в этой таблице как обычными средствами випа, так и dsql.
Т.е. алгоритм был такой:
1. Запросами dsql забиваем 4 таблицы Т1, Т2, Т3, Т4.
2. Обрабатываем эти данные обычным випом, в результате получаем только T1 и T2 с нужными данными.
3. Пытаюсь провести группировку в таблице Т1 по ряду полей dsql-ем ( аналогично в Т2). Ибо группировка обычными средствами очень муторная и долговременная.Вот тут и затык. поэтому и спрашиваю о возможности перелива данных. Собственно, можно ли одну и туже таблицу с данными обработать прямым скулем и средствами випа?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

"Собственно, можно ли одну и туже таблицу с данными обработать прямым скулем и средствами випа?"
Нельзя.
Точнее можно, но перелив эти T1 и T2 в таблицы(у) dsql

А вообще, если Вы к конечном счете склоняетесь к группировке данных через dsql, то и сразу нужно пытаться организовать все алгоритмы без випа.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Так перелить то можно?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

ну что то вроде :

Код: Выделить всё

 _loop t1
 {
     sqlAddStr(query, 'INSERT INTO dsqlt1');
     sqlAddStr(query, '(');
     sqlAddStr(query, '  field1,field2,field3');
     sqlAddStr(query, ')');
     sqlAddStr(query, 'VALUES');
     sqlAddStr(query, '(');
     sqlAddStr(query, ''''+ t1.field1 + ''',');
     sqlAddStr(query, ''''+ t1.field2 + ''',');
     sqlAddStr(query, ''''+ t1.field3 + ''',');
     sqlAddStr(query, ')');
     sqlExecDirect(vliSQLCommand);
 }
т.е. построчно ) и получите набитую иденичными данными t1dsl таблицу .
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Ну и не так все страшно! Спасибо, Den!
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

насчет страшно или нет спорно. Если будет в t1 несколько десятков(или сотен даже) тыщ записей, то это будет ресурсоемкий алгоритм.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Ресурсоемкий по памяти? А средствами випа те же тысячи группировать или обрабатывать - меньше ? Если группировать -так вообще несколько раз по табле пройти.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

ресурсоемкий в том смысле что table struct - это данные на локале, а dsql таблица - она на серваке
Т.е. будет хренова туча команд на сервак с клиента о вставке (sqlExecDirect) данных во временную таблицу на sql-сервере
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Прямой SQL

Сообщение edward_K »

Я сочетаю.
Сервер должен выдать по максимуму сгруппированный запрос - как раз для сокращения трафика и выдать весь набор данных, требуемый для отчета - для сокращения кол-ва запросов,
А дальнейшую обработку можно уже на Vip перекрутить как нужно в зависимости от потребностей - например для дополнения сложно вычисляемых полей.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Vik писал(а): ...
SQLAddStr(strHandle, ' SaldoMc.cMc IN (SELECT Pick.cRec FROM Pick WHERE Pick.wList = 1)')
...
Хм... И вот так работает? Пытаюсь использовать пометки в прямом SQL, но у меня в pick совсем не то, что я пометил. Кто как выходит из положения?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Был когда то баг и ПИР по ситуациям что pick не работали в dsql корректно.
Вроде только в 9,1 он был решен
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Прямой SQL

Сообщение RAJAH »

Den писал(а):Вроде только в 9,1 он был решен
У меня 9.1, не решён - pick в прямом SQL содержит совсем не то, что помечено. Cоздаю sqlCreateTmpTable, кидаю туда пометку из pick "галактическим" sql, и уже эту временную таблицу включаю в запрос, но данные вставки занимают слишком много времени. Может, какой-то параметр в cfg есть, чтобы pick в vip'е и в DSQL были одинаковы?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

и с :

[DataBase]
TempTableInMem = off
UserTableInMem = off
ExternalInMem = off

тоже не работает ?
Ответить