Главная страница
    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
Время: 0.048 c
14-1135531495
Витёк
2005-12-25 20:24
2006.01.22
Как отправить письмо!?


6-1128616981
Gall
2005-10-06 20:43
2006.01.22
WinSock2


1-1134506057
Mongoose
2005-12-13 23:34
2006.01.22
помогите пожалуйста разобраться: последовательный симплекс метод


2-1136206489
Rubey
2006-01-02 15:54
2006.01.22
Строка в StringGrid


6-1128951451
pr0t0n
2005-10-10 17:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский