Текущий архив: 2002.11.28;
Скачать: CL | DM;
Вниз
Параметризованные подзапросы в ADOquery Найти похожие ветки
← →
Picco (2002-11-11 10:48) [0]Извините за беспокойство вопрос ADOQuery и параметризованным подзапросам .
Select distinct Towar_code from FACT_TABLE where towar_code in (select towar_code from SPR_TOW where company_code=:company_code) and dat>:dat
В дизайн -тайм работают, а в реал-тайм выскакивает что не установлены свойства параметров для параметризованных подзапросов.Программая установка свойств (типов) параметров не помогает.Установка свойств Prepared и paramcheck также не помогает.
Поможите пожалуйста
← →
stone (2002-11-11 10:54) [1]Попробуй избавиться от подзапроса:
Select distinct Towar_code from FACT_TABLE f
inner join SPR_TOW s on f.towar_code = s.towar_code
where s.company_code=:company_code and f.dat>:dat
← →
KSergey (2002-11-11 10:56) [2]А значения-то параметрам присваиваете в run-time?
Ну и еще при разработке попробуйте явно прописать типы параметров.
А запрос в таком виде уст. на этапе разработки или присваивается при выполнении программы?
← →
ЮЮ (2002-11-11 11:01) [3]Или, если работаешь под Win2000 перейти на ODBC provider. У меня так сказать, native provider под Win95 обрабатывал мудрёные запросы, а под 2000 ругался
← →
sniknik (2002-11-11 11:16) [4]ЮЮ © (11.11.02 11:01)
у меня все с точностью до наоборот. под 95 вообще не пробовал, 98,2000,NT нормально в XP были проблемы (уже не помню какие, может и не базой связанные)
Picco (11.11.02 10:48)
покажите как вызываете (код что до .Execute/Open)
← →
Picco (2002-11-11 12:12) [5]with SQLwork do
begin
ParamCheck:=true;
if active then active:=false;
SQL.Clear;
SQL.add("Select distinct Towar_code from FACT_TABLE where towar_code in (select towar_code from SPR_TOW where company_code=:company_code) and dat>:dat
");
Parameters.ParseSQL(SQL[0],True);
Parameters[0].value:=vendor_id;
Parameters[1].value:=now-90;
Prepared:=true;
ConnectionString:=CString;
active:=true;
First;
end;
← →
sniknik (2002-11-11 13:29) [6]ParamCheck:=true; //он у тебя меняется? установи в десигн тайм раз и навсегда
ConnectionString:=CString; //по моему лутше пользоватся свойством Connection вместо этого
ADOConnection.ConnectionString:=CString; //тоже один раз гденибудь при инициализации
и
SQLwork.Connection:= ADOConnection;
все конекты лутше заранее, можно и после но не после присвоения запроса а до.
попробуй так может и заработает
ADOConnection.Close;
ADOConnection.ConnectionString:=CString;
with SQLwork do begin
//if active then active:=false; в этом случае лишнее закрытие коннекта закроет все привязанные обьекты
Connection:= ADOConnection; //убери если не меняется
ParamCheck:=true; //убери если не меняется
SQL.Clear;
SQL.add("Select distinct Towar_code from FACT_TABLE where towar_code in (select towar_code from SPR_TOW where company_code=:company_code) and dat>:dat
");
Parameters[0].DataType:= ftInteger; //в общем тоже лишнее но по мне лутше явно указывать
Parameters[0].value:=vendor_id;
Parameters[1].DataType:= ftDateTime; //up
Parameters[1].value:=now-90;
active:=true;
end;
← →
KSergey (2002-11-12 10:28) [7]В дополнение к > sniknik © (11.11.02 13:29)
Напрасно убрана строка Paramters.Parse(). Раз запрос динамический и с параметрами - пренепременнейше нужна.
Хотя я бы записал ее так (а то фиг его знает как оно там по строкам разнесено).
...
SQL.add(..);
Parameters.ParseSQL( SQL.Text,True);
...
А про парядок занадия ConnectionString да и про само отсутствие необходимости этого - это, пожалуй, верно замечено.
← →
Picco (2002-11-12 11:17) [8]Верно в том случае если работаешь с приложением а если
нужно запустить несколько потоков в данном конкретном случае для расчета заказов поставщикам (их запускают несколько по разным компаниям сразу) лучше не работать через общее соединение
← →
sniknik (2002-11-12 11:19) [9]для каждого потока свое, иначе глюки.
Страницы: 1 вся ветка
Текущий архив: 2002.11.28;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c