Страница 16 из 19

Re: Прямой SQL

Добавлено: 30 июл 2015, 11:17
savov
если Вы к ней хотите обратиться в запросе dsql, то ее нужно объявить как временную таблицу dsql (sqlCreateTmpTable)
Уточняю:
1. Должна ли эта таблица объявляться в проекте?
2. Если в проекте она создана и заполнена, то как перелить содержимое в созданную через dsql таблицу? Насколько я понимаю, физически это разные таблицы.
Или
Создаем dsql таблицу, вываливаем в нее первым запросом данные и работаем потом с ней вторым запросом?

Re: Прямой SQL

Добавлено: 30 июл 2015, 11:27
Den
В проекте Вы можете объявить временную атлантическую структуру table struct

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

"Если в проекте она создана и заполнена, то как перелить содержимое в созданную через dsql таблицу"
сразу набиваете нужными данными dsql таблицу. Вариант о котором Вы пишете не очень хороший будет, хотя реализуем

Re: Прямой SQL

Добавлено: 30 июл 2015, 11:40
savov
Суть в том, что мне легче было обрабатывать данные в этой таблице как обычными средствами випа, так и dsql.
Т.е. алгоритм был такой:
1. Запросами dsql забиваем 4 таблицы Т1, Т2, Т3, Т4.
2. Обрабатываем эти данные обычным випом, в результате получаем только T1 и T2 с нужными данными.
3. Пытаюсь провести группировку в таблице Т1 по ряду полей dsql-ем ( аналогично в Т2). Ибо группировка обычными средствами очень муторная и долговременная.Вот тут и затык. поэтому и спрашиваю о возможности перелива данных. Собственно, можно ли одну и туже таблицу с данными обработать прямым скулем и средствами випа?

Re: Прямой SQL

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

А вообще, если Вы к конечном счете склоняетесь к группировке данных через dsql, то и сразу нужно пытаться организовать все алгоритмы без випа.

Re: Прямой SQL

Добавлено: 30 июл 2015, 12:02
savov
Так перелить то можно?

Re: Прямой SQL

Добавлено: 30 июл 2015, 12:14
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 таблицу .

Re: Прямой SQL

Добавлено: 30 июл 2015, 13:28
savov
Ну и не так все страшно! Спасибо, Den!

Re: Прямой SQL

Добавлено: 30 июл 2015, 13:34
Den
насчет страшно или нет спорно. Если будет в t1 несколько десятков(или сотен даже) тыщ записей, то это будет ресурсоемкий алгоритм.

Re: Прямой SQL

Добавлено: 30 июл 2015, 13:44
savov
Ресурсоемкий по памяти? А средствами випа те же тысячи группировать или обрабатывать - меньше ? Если группировать -так вообще несколько раз по табле пройти.

Re: Прямой SQL

Добавлено: 30 июл 2015, 13:48
Den
ресурсоемкий в том смысле что table struct - это данные на локале, а dsql таблица - она на серваке
Т.е. будет хренова туча команд на сервак с клиента о вставке (sqlExecDirect) данных во временную таблицу на sql-сервере

Re: Прямой SQL

Добавлено: 30 июл 2015, 14:24
edward_K
Я сочетаю.
Сервер должен выдать по максимуму сгруппированный запрос - как раз для сокращения трафика и выдать весь набор данных, требуемый для отчета - для сокращения кол-ва запросов,
А дальнейшую обработку можно уже на Vip перекрутить как нужно в зависимости от потребностей - например для дополнения сложно вычисляемых полей.

Re: Прямой SQL

Добавлено: 13 окт 2015, 14:38
RAJAH
Vik писал(а): ...
SQLAddStr(strHandle, ' SaldoMc.cMc IN (SELECT Pick.cRec FROM Pick WHERE Pick.wList = 1)')
...
Хм... И вот так работает? Пытаюсь использовать пометки в прямом SQL, но у меня в pick совсем не то, что я пометил. Кто как выходит из положения?

Re: Прямой SQL

Добавлено: 13 окт 2015, 15:39
Den
Был когда то баг и ПИР по ситуациям что pick не работали в dsql корректно.
Вроде только в 9,1 он был решен

Re: Прямой SQL

Добавлено: 13 окт 2015, 15:45
RAJAH
Den писал(а):Вроде только в 9,1 он был решен
У меня 9.1, не решён - pick в прямом SQL содержит совсем не то, что помечено. Cоздаю sqlCreateTmpTable, кидаю туда пометку из pick "галактическим" sql, и уже эту временную таблицу включаю в запрос, но данные вставки занимают слишком много времени. Может, какой-то параметр в cfg есть, чтобы pick в vip'е и в DSQL были одинаковы?

Re: Прямой SQL

Добавлено: 13 окт 2015, 16:16
Den
и с :

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

тоже не работает ?