Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

TADODataSet.CreateParameter в ран-тайме   Найти похожие ветки 

 
Ega23 ©   (2005-11-25 13:13) [0]

В чём может быть проблема?
Есть запрос, крутящийся в отдельном потоке. Берёт данные из БД по параметру (больше, чем некая дата) и кладёт их в потоко-защищённую очередь. Время исполнения запроса надо максимально уменьшить.

Если динамически генерить запрос - всё прекрасно работает:

procedure TEventDataThread.Execute;
begin
 while not Terminated do
  begin
   FADOQuery.Close;
   FADOQuery.CommandText:="exec S_EventProtoProc @ActNam="Sel", @DatIn="+ValX(LastDatIn);
   try
    FADOQuery.Open;
    FADOQuery.First;
    LastDatIn:=FADOQuery.FieldByName("DatIn").AsDateTime;
    FQueue.Push(FADOQuery);
   finally
    //Suspend;
    Sleep(100);
   end;

  end;
end;


ValX - перевод даты в SQL-формат.

Воспользовался рекомендацией sniknic, сделал ему Prepare и попытался перевести на параметры:

constructor TEventDataThread. Create(aConnectionString:String; Queue:TEventDataQueue);
begin
...........
 FADOQuery:=TADOdataSet.Create(nil);
 FADOQuery.Connection:=ADOConnection;
 FADOQuery.CommandText:="exec S_EventProtoProc @ActNam="Sel", @DatIn=:DatIn";
 FADOQuery.Parameters.CreateParameter("DatIn",ftDateTime, pdInput,8,Null);
 FADOQuery.Prepared      := true;
....

В execute:

 while not Terminated do
  begin
   FADOQuery.Close;
   //FADOQuery.CommandText:="exec S_EventProtoProc @ActNam="Sel", @DatIn="+ValX(LastDatIn);
   FADOQuery.Parameters.ParamByName("DatIn").Value:=LastDatIn;
   try
    FADOQuery.Open;



На Open ругается -
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

Что делаю не так?


 
sniknik ©   (2005-11-25 13:22) [1]

строка конекта похоже неправильная. говорят проверь каждое значение.

и для уверености
FADOQuery:=TADOdataSet.Create(nil);
FADOQuery.ParamCheck:= false;
FADOQuery.CommandText:="exec S_EventProtoProc @ActNam="Sel", @DatIn=?";
...
либо не создавай параметр сам (т.е. вместо этого убери строку с CreateParameter).


 
Ega23 ©   (2005-11-25 13:28) [2]


> строка конекта похоже неправильная. говорят проверь каждое
> значение.
>


Строка правильная. Я тоже сначала на это подумал. Изголялся всячески. Но первый вариант-то - работает!


>FADOQuery.CommandText:="exec S_EventProtoProc @ActNam="Sel", @DatIn=?";


Это уже я не понял. Что ты имел ввиду?


 
sniknik ©   (2005-11-25 13:29) [3]

и еще, если надо ускорить циклы, обычно избавляюсь от всяких "по имени" (в основном для полей, но тут...) т.е.
вместо
> FADOQuery.Parameters.ParamByName("DatIn").Value:=LastDatIn;
в циклах, ставлю перед
DatInPar:= FADOQuery.Parameters.ParamByName("DatIn");
в цикле уже
DatInPar.Value:= LastDatIn;
DatInPar тут естественно типа параметр. и + добавляю with, хотя и нелюблю его ;). (в смысле использовать... а вы что подумали?)


 
Плохиш ©   (2005-11-25 13:31) [4]


>  FADOQuery.Prepared      := true;

Эта строка пересоздаёт список параметров заново.
Попробуй после неё установить тип параметру.


 
Ega23 ©   (2005-11-25 13:31) [5]


> в циклах, ставлю перед
> DatInPar:= FADOQuery.Parameters.ParamByName("DatIn");
> в цикле уже
> DatInPar.Value:= LastDatIn;
> DatInPar тут естественно типа параметр. и + добавляю with,
>  хотя и нелюблю его ;).


Это я, безусловно, позже сделаю. Сейчас общей функциональности добиться надо. А она пока хромает...  :о)


 
sniknik ©   (2005-11-25 13:32) [6]

> Это уже я не понял. Что ты имел ввиду?
ты же сам пытаешся создать параметр, так? ну значит надо отключить автосоздание и пользоваться "канонической" формой запроса.


 
sniknik ©   (2005-11-25 13:34) [7]

Плохиш ©   (25.11.05 13:31) [4]
да еще и это. или убрать строку с препаред.


 
Ega23 ©   (2005-11-25 13:39) [8]

Так, с ParamCheck:=False уже лучше. Уже всего лишь Инсоррект синтакс   :о)
Про Paramcheck я как-то и забыл...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 1.537 c
9-1123591873
Monsteria
2005-08-09 16:51
2006.01.22
Индекатор загрузки


2-1136494842
n85sergey
2006-01-06 00:00
2006.01.22
ком порт


14-1135767143
Pete
2005-12-28 13:52
2006.01.22
нужна помощь в оценке проекта...


14-1135765580
Gero
2005-12-28 13:26
2006.01.22
Debugger detected


14-1135176699
syte_ser78
2005-12-21 17:51
2006.01.22
счетчик пробега мыши





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский