Страница 1 из 1

DSQL времянки в запросах, не переносится string

Добавлено: 29 июн 2017, 12:38
Masygreen
Задача пусть будет такая: выбираем интерфейсом группы ТМЦ (и сохраняем их в tmGrMC), потом строим выборку из ТМЦ входящих в эту группу (задача другая но для ситуацию описывает)
в итоге сделать это мы можем типа

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

select katmc.name
from katmc 
where katmc.cgroupmc in (select nrec from tmGrMC)
1) вопрос простой, tmGrMC мне нужно не только nrec, но и name. чего делаю
создал времянку

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

          sqlFreeStr(hStr);
          sqlAddStr(hStr, ' table tmGMC ');
          sqlAddStr(hStr, ' (                         ');
          sqlAddStr(hStr, '   cGroupMC : comp,        ');
          sqlAddStr(hStr, '   kGroupMC : string,  ');
          sqlAddStr(hStr, '   sGroupMC : string  ');
          sqlAddStr(hStr, ' )                         ');
          sqlAddStr(hStr, ' with index                ');
          sqlAddStr(hStr, ' (                         ');
          sqlAddStr(hStr, '   idx1 = cGroupMC         ');
          sqlAddStr(hStr, ' );                        ');

          sqlDropTmpTable('tmGMC');
          sql_result := sqlCreateTmpTable(hStr, ctmNormal);
          sqlFreeStr(hStr);
запихиваю туда группы

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

   _loop groupmc
            sqlExecDirect('INSERT INTO tmGMC (cGroupMC,sGroupMC) VALUES (' + ' #comp(' + string(groupmc.nrec) + '),'+string(groupmc.name)+')');
   
запрос ни чего не вставить если пытаться вставить groupmc.name, если допустим вместо него вставлять groupmc.kod - все норм... какая-то проблема с длинными строками чтоле?
пробовал sustr, тоже не помогает
пробовал явно указывать размер sqlAddStr(hStr, ' sGroupMC : string[240] ');

Re: DSQL времянки в запросах, не переносится string

Добавлено: 29 июн 2017, 14:37
Irina_
Здравствуйте. С DSQL работала очень мало. Возможно я не права, но может проблема в том, что Вы определили таблицу на 3 поля, а вставку делаете только 2 полей, причем только 1-го и 3-го, пропустив 2-ое.

Re: DSQL времянки в запросах, не переносится string

Добавлено: 30 июн 2017, 10:11
edward_K
'+string(groupmc.name)+' - неправильно.
у вас в итоговой строке должно получиться наименование в кавычках - можете хоть по Ctr+f4 баловаться.
'+chr(39)+groupmc.name+chr(39)+'
либо ...'''+groupmc.name+'''... - по 3 кавычки. chr(39) мне наглядней. Про остальное я молчу - немножко синтаксису атлантиса не соответствует. Да и времянку можно было набить одним запросом, и если она вам не нужна на SQL , то не зачем ее там создавать - sqlFetchInto есть.

Re: DSQL времянки в запросах, не переносится string

Добавлено: 30 июн 2017, 14:21
Masygreen
edward_K писал(а):'+string(groupmc.name)+' - неправильно.
у вас в итоговой строке должно получиться наименование в кавычках - можете хоть по Ctr+f4 баловаться.
'+chr(39)+groupmc.name+chr(39)+'
либо ...'''+groupmc.name+'''... - по 3 кавычки. chr(39) мне наглядней. Про остальное я молчу - немножко синтаксису атлантиса не соответствует. Да и времянку можно было набить одним запросом, и если она вам не нужна на SQL , то не зачем ее там создавать - sqlFetchInto есть.
точно .. .кавычижеж... О_о
вообще по хорошему мне нужна времянка которую я бы мог и в прямом SQL в запросе использовать и снаружи _loop по ней делать .. не понял совершенно есть такая возможность или нет ...

Re: DSQL времянки в запросах, не переносится string

Добавлено: 30 июн 2017, 14:55
Den
Masygreen писал(а):вообще по хорошему мне нужна времянка которую я бы мог и в прямом SQL в запросе использовать и снаружи _loop по ней делать .. не понял совершенно есть такая возможность или нет ...
Одну временную структуру и в VIP и в DSQL нет. Объект Атлантиса - это объект Атланстиса(т.е. _loop только по table struct можно делать) и сервер БД об нем ничего не знает, кнч.
Поэтому и приходиться объявлять нужные временны таблицы в DSQl на стороне сервака, когда оно того требует.

Re: DSQL времянки в запросах, не переносится string

Добавлено: 30 июн 2017, 15:39
edward_K
обратное тоже справедливо - времянку с сервака нельзя использовать внутри кода - только в запросах на DSQL. Поэтому на стороне сервака таблы создаем когда это ну очень нужно - например для отборов по множественному выбору, а так SQLFetch - смотрите в VipProgr.Chm функции по работе с DSQL , а то у вас полная каша получается. Смысла набивать построчно времянку на DSQL совершенно нет - быстродействия эт вам не добавит - insert into ... Set и все .

Re: DSQL времянки в запросах, не переносится string

Добавлено: 30 июн 2017, 16:27
Masygreen
edward_K писал(а):обратное тоже справедливо - времянку с сервака нельзя использовать внутри кода - только в запросах на DSQL. Поэтому на стороне сервака таблы создаем когда это ну очень нужно - например для отборов по множественному выбору, а так SQLFetch - смотрите в VipProgr.Chm функции по работе с DSQL , а то у вас полная каша получается. Смысла набивать построчно времянку на DSQL совершенно нет - быстродействия эт вам не добавит - insert into ... Set и все .
да я из-за кавычек пробовал такой путь, с nrec там и sqlFetchInto проходило ) спасибо. просто думал не работает функционал ..