Попробовал. Всё равно 30007.Den писал(а):Попробовать может сделать, например ..TOP 1000
Прямой SQL
Модераторы: m0p3e, edward_K, Модераторы
Re: Прямой SQL
Re: Прямой SQL
народ а как написать чтобы галактика поняла такой запрос
При таком написании - випер компилирует без ошибок, а в галактике вываливается "Ошибка компиляции прямого SQL. Таблица L_SOPRDOC::TMPVOZVRATMC".
Если оставить 1 вложенный запрос то все работает. Неужели галактика не понимает такой простой запрос?
Код: Выделить всё
sql select
SET1.KATSOPRNSOPR,
SET1.KATSOPRDSOPR,
SET1.KATMCNAME,
SET1.SPSOPRPRICE,
SET1.katorg2name,
SET1.KATPARTYNAME,
SET1.SKLORDERNORDER,
SET1.KATPODRNAME,
SET1.KATORG2ADDR,
SET1.SPORDERKOL,
SET2.SPORDERKOL2,
(SET1.SPORDERKOL - SET2.SPORDERKOL2),
SET1.KATORG1NAME,
SET1.SPSOPRKOLFACT,
SET1.SPORDERNREC,
SET1.KATSOPRCGRUZFROM
from
(select
SPORDER.NREC as SPORDERNREC
,KATSOPR.NSOPR as KATSOPRNSOPR
,KATSOPR.DSOPR as KATSOPRDSOPR
,KATMC.NAME as KATMCNAME
,SPSOPR.PRICE as SPSOPRPRICE
,katorg2.name as katorg2name
,KATPARTY.NAME as KATPARTYNAME
,SKLORDER.NORDER as SKLORDERNORDER
,KATPODR.NAME as KATPODRNAME
,KATORG2.ADDR as KATORG2ADDR
,SPORDER.KOL as SPORDERKOL
,KATORG1.NAME as KATORG1NAME
,SPSOPR.CSPORDER as SPSOPRCSPORDER
,SPSOPR.KOLFACT as SPSOPRKOLFACT
,SPORDER.NREC as SPORDERNREC
,KATSOPR.CGRUZFROM as KATSOPRCGRUZFROM
from
KATSOPR
INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC
INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR
INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC
LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC
LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC
LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC
LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC
LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC
where
201 = KATSOPR.VIDSOPR and
(katsopr.corgbase = :_corg ) and
(spsopr.cmcusl = :_cmc )
) as SET1
LEFT OUTER JOIN
(select
SPSOPR.CSPORDER
,SUM (SPORDER.KOL) as SPORDERKOL2
from
KATSOPR
INNER JOIN SPSOPR on KATSOPR.NREC = SPSOPR.CSOPR and 1 = SPSOPR.PRMC
INNER JOIN SKLORDER on KATSOPR.NREC = SKLORDER.CSOPR
INNER JOIN SPORDER on SPORDER.CSPSOPR = SPSOPR.NREC
LEFT OUTER JOIN KATORG as KATORG1 on KATSOPR.CORGBASE = KATORG1.NREC
LEFT OUTER JOIN KATORG as KATORG2 on KATSOPR.CGRUZTO = katorg2.NREC
LEFT OUTER JOIN KATMC on SPORDER.CMC = KATMC.NREC
LEFT OUTER JOIN KATPARTY on SPORDER.CPARTY = KATPARTY.NREC
LEFT OUTER JOIN KATPODR on SPORDER.CCPODR = KATPODR.NREC
where
106 = KATSOPR.VIDSOPR
group by KATMC.NAME, KATORG1.NAME, katorg2.name, SPSOPR.CSPORDER, SPORDER.CSPORDV) as SET2
ON SET1.NREC = SET2.CSPORDER
into tmpVozvratMC
sqlFreeStmt(Stmt);
Если оставить 1 вложенный запрос то все работает. Неужели галактика не понимает такой простой запрос?
Re: Прямой SQL
Это откуда такая таблица?denisag писал(а):tmpVozvratMC
Re: Прямой SQL
Это моя временная таблица))
В общем разобрался что не нравилось ему, було 1 избыточное условие которое квери обрабатывал без проблем а вот галактика считала что я хочу еще одно поле
В общем разобрался что не нравилось ему, було 1 избыточное условие которое квери обрабатывал без проблем а вот галактика считала что я хочу еще одно поле
Re: Прямой SQL
Если кому интересно:
30007 - ошибка несоответствия полей; возникала из-за того, что SQLSelectInto - метод логической таблицы, поэтому необходимо писать <<имя view>>.SQLSelectInto(...)
30007 - ошибка несоответствия полей; возникала из-за того, что SQLSelectInto - метод логической таблицы, поэтому необходимо писать <<имя view>>.SQLSelectInto(...)
Re: Прямой SQL
Помогите, пожалуйста, разобраться с запуском хранимых процедур.
Создал с помощью CREATE PROCEDURE хранимку в базе. Её вызов в Query Analyzer (EXEC S$VEDOMMATER 0x80010000000002E5, 0x8000000000000000) срабатывает: процедура успешно выполняется. Пытаюсь на основе примера из vipprogr запустить её из "Галактики" ("Суппорта"):
Получаю сообщение с кодом ошибки 311 (вроде как, "внутренняя ошибка в драйвере БД"), а сообщения из раздела навигации нет. В ms70drv.log появляется запись "HY010: [Microsoft][Диспетчер драйверов ODBC] Ошибка последовательности функций".
Как правильно вызвать процедуру?
Создал с помощью CREATE PROCEDURE хранимку в базе. Её вызов в Query Analyzer (EXEC S$VEDOMMATER 0x80010000000002E5, 0x8000000000000000) срабатывает: процедура успешно выполняется. Пытаюсь на основе примера из vipprogr запустить её из "Галактики" ("Суппорта"):
Код: Выделить всё
BeginTransaction(0);
henzap:=SQLAllocStmt;
SqlBindParam(henzap, 1, '0x80010000000002E5');
SqlBindParam(henzap, 1, '0x8001000000000000');
SQLExecStmt(henzap, 's$VedomMater(?, ?)');
message(sqlfetchintomt(henzap, mt));
if (sqlNavigateMT(mt, ffGetFirst, rec) = tsOk) do
{
message(string(rec[4]));
}
while (sqlNavigateMT(mt, ffGetNext, rec) = tsOk);
SqlFreeStmt(henzap);
EndTransaction;
Как правильно вызвать процедуру?
Re: Прямой SQL
SqlBindParam(henzap, 1, '0x80010000000002E5');
SqlBindParam(henzap, 1, '0x8001000000000000');
SqlBindParam(henzap, 1, '0x8001000000000000');
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
+ Если создавали посредством dsql процедуру, то префикс s$ при вызове вроде не нужно указыватьRAJAH писал(а):SQLExecStmt(henzap, 's$VedomMater(?, ?)');
Re: Прямой SQL
n0where
Упс... Опечатка... Но и с SqlBindParam(henzap, 2, '0x8000000000000000') то же.
Упс... Опечатка... Но и с SqlBindParam(henzap, 2, '0x8000000000000000') то же.
Неа.Den писал(а):Если создавали посредством dsql процедуру
RAJAH писал(а):Создал с помощью CREATE PROCEDURE хранимку в базе.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
Хм...вроде навскидку ок все. Может comp в SqlBindParam без кавычек передать все же ? (и через переменные-comp еще попробуйте...).
Re: Прямой SQL
Без кавычек уже на стадии компиляции ругается.
Пробовал даже переписать процедуру: не binary(8)-параметры сделал, а varchar(20), чтобы строки передавать - бесполезно.
Пробовал даже переписать процедуру: не binary(8)-параметры сделал, а varchar(20), чтобы строки передавать - бесполезно.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Прямой SQL
В ms70drv на строчку выше иногда еще и написано в какой строке, того запроса что вызвал ошибку.
А переменные не пробовали передать? Для обычного запроса вместо параметров теперь юзаю #comp(284554544445454) - именно в десятичном виде - драйвер их тогда сам преобразовывает. Ну и всегда можно передать параметры через временнную таблу.
А вот не подскажете как мне отладить свою процедуру? Хотелось бы вывести в файл нужные мне переменные. Куда выводит Print не нашел.
Функций по работе с файлоами в DSQL тоже как то не увидел сходу.
А переменные не пробовали передать? Для обычного запроса вместо параметров теперь юзаю #comp(284554544445454) - именно в десятичном виде - драйвер их тогда сам преобразовывает. Ну и всегда можно передать параметры через временнную таблу.
А вот не подскажете как мне отладить свою процедуру? Хотелось бы вывести в файл нужные мне переменные. Куда выводит Print не нашел.
Функций по работе с файлоами в DSQL тоже как то не увидел сходу.
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
RAJAH писал(а):Без кавычек уже на стадии компиляции ругается.
Пробовал даже переписать процедуру: не binary(8)-параметры сделал, а varchar(20), чтобы строки передавать - бесполезно.
попробуйте все же через переменную....
var param1,param2 : comp
....
param1:=0x80010000000002E5;
SqlBindParam(henzap, 1, param1);
...
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
Я напрямую всегда отлаживаю через MS Managment Studio (QA) - экономит массу времениedward_K писал(а): А вот не подскажете как мне отладить свою процедуру?
Re: Прямой SQL
Полный текст:edward_K писал(а):В ms70drv на строчку выше иногда еще и написано в какой строке, того запроса что вызвал ошибку.
Код: Выделить всё
12.05.2012 14:00:47 [RUSSIA81#USER]:
HY010: [Microsoft][Диспетчер драйверов ODBC] Ошибка последовательности функций
Писал и так:Den писал(а):попробуйте все же через переменную
Код: Выделить всё
henzap:=SQLAllocStmt;
SqlBindParam(henzap, 1, hdrpsnrec);
SqlBindParam(henzap, 2, canvalnrec);
SQLExecStmt(henzap, 'VedomMater(?, ?)');
И так пробовал:edward_K писал(а):теперь юзаю #comp(284554544445454)
Код: Выделить всё
SqlBindParam(henzap, 1, #comp(string(hdrpsnrec)));
SqlBindParam(henzap, 2, #comp(string(canvalnrec)));