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

Вниз

Проблема с выполнением запросов в цикле   Найти похожие ветки 

 
TEXHAPb   (2004-03-15 16:14) [0]

Используется компонент TQuery
В цикле обращаются к функции UpdateRec, которая делает следующее:
1. Устанавливает значение параметров запроса (несколько ParamByName)
2. Исполняет запрос (Open)

Проблема: Оказалось, что перед выполнением Open, из внешнего цикла заново выбывается функция UpdateRec, и занова вызывается установка параметров так, что перед исполнением Open запрос уже содержит неправильные данные.

Как можно этого избежать?


 
Плохиш   (2004-03-15 16:17) [1]

Ошибка в 17й строке


 
alex_bredin ©   (2004-03-15 16:19) [2]


> Плохиш   (15.03.04 16:17) [1]
> Ошибка в 17й строке

перевожу: покажите код


 
TEXHAPb   (2004-03-15 16:54) [3]

Вот фрагмент кода. Забыл добавить, что class TLogManager - наследник класса TServerSocket, может это существенно.

procedure TLogManager.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var S:TLogString;
   EndRec:Integer;
begin
  ReadBuf:=ReadBuf+Socket.ReceiveText;
  EndRec:=Pos("-",ReadBuf);
  S:=TLogString.Create;
  while EndRec>0 do
   begin
    ...
         UpdateRec(S);  // <- Вызо функции
    ...
     Delete(ReadBuf,1,EndRec);
    EndRec:=Pos("-",ReadBuf);
   end;
  S.Free;
end;

procedure TLogManager.UpdateRec(Rec: TLogString);
begin
 PrepareData(SelectQuery,Rec);
 SelectQuery.Open;
 if SelectQuery.Fields[0].AsInteger=0 then
  ...
end;

procedure TLogManager.PrepareData(Q: TQuery; S:TLogString);
begin
 Q.ParamByName("ext").AsString:=S.Ext;
 Q.ParamByName("code").AsString:=S.AccCode;
....
end;


 
TEXHAPb   (2004-03-15 16:56) [4]

Вот фрагмент кода. Забыл добавить, что class TLogManager - наследник класса TServerSocket, может это существенно.

procedure TLogManager.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var S:TLogString;
   EndRec:Integer;
begin
  ReadBuf:=ReadBuf+Socket.ReceiveText;
  EndRec:=Pos("-",ReadBuf);
  S:=TLogString.Create;
  while EndRec>0 do
   begin
    ...
         UpdateRec(S);  // <- Вызо функции
    ...
     Delete(ReadBuf,1,EndRec);
    EndRec:=Pos("-",ReadBuf);
   end;
  S.Free;
end;

procedure TLogManager.UpdateRec(Rec: TLogString);
begin
 PrepareData(SelectQuery,Rec);
 SelectQuery.Open;
 if SelectQuery.Fields[0].AsInteger=0 then
  ...
end;

procedure TLogManager.PrepareData(Q: TQuery; S:TLogString);
begin
 Q.ParamByName("ext").AsString:=S.Ext;
 Q.ParamByName("code").AsString:=S.AccCode;
....
end;


 
TEXHAPb   (2004-03-15 16:56) [5]

Вот фрагмент кода. Забыл добавить, что class TLogManager - наследник класса TServerSocket, может это существенно.

procedure TLogManager.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var S:TLogString;
   EndRec:Integer;
begin
  ReadBuf:=ReadBuf+Socket.ReceiveText;
  EndRec:=Pos("-",ReadBuf);
  S:=TLogString.Create;
  while EndRec>0 do
   begin
    ...
         UpdateRec(S);  // <- Вызо функции
    ...
     Delete(ReadBuf,1,EndRec);
    EndRec:=Pos("-",ReadBuf);
   end;
  S.Free;
end;

procedure TLogManager.UpdateRec(Rec: TLogString);
begin
 PrepareData(SelectQuery,Rec);
 SelectQuery.Open;
 if SelectQuery.Fields[0].AsInteger=0 then
  ...
end;

procedure TLogManager.PrepareData(Q: TQuery; S:TLogString);
begin
 Q.ParamByName("ext").AsString:=S.Ext;
 Q.ParamByName("code").AsString:=S.AccCode;
....
end;


 
TEXHAPb   (2004-03-15 16:57) [6]

Вот фрагмент кода. Забыл добавить, что class TLogManager - наследник класса TServerSocket, может это существенно.

procedure TLogManager.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var S:TLogString;
   EndRec:Integer;
begin
  ReadBuf:=ReadBuf+Socket.ReceiveText;
  EndRec:=Pos("-",ReadBuf);
  S:=TLogString.Create;
  while EndRec>0 do
   begin
    ...
         UpdateRec(S);  // <- Вызо функции
    ...
     Delete(ReadBuf,1,EndRec);
    EndRec:=Pos("-",ReadBuf);
   end;
  S.Free;
end;

procedure TLogManager.UpdateRec(Rec: TLogString);
begin
 PrepareData(SelectQuery,Rec);
 SelectQuery.Open;
 if SelectQuery.Fields[0].AsInteger=0 then
  ...
end;

procedure TLogManager.PrepareData(Q: TQuery; S:TLogString);
begin
 Q.ParamByName("ext").AsString:=S.Ext;
 Q.ParamByName("code").AsString:=S.AccCode;
....
end;


 
alex_bredin ©   (2004-03-15 17:41) [7]

ну хватит пока коду))


 
ek   (2004-03-15 18:16) [8]

может перед PrepareData(SelectQuery,Rec);
вставить SelectQuery.Close;?



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
14-1079519751
Lony
2004-03-17 13:35
2004.04.11
Приводы DVD


14-1082528376
VID
2004-04-21 10:19
2004.04.11
Как создать загрузочный диск, который будет видеть NTFS ?


1-1080218270
Android
2004-03-25 15:37
2004.04.11
THtmListBox


6-1076061241
Behemoth
2004-02-06 12:54
2004.04.11
IdTCPClient - не могу понять...


14-1082365331
АлексейК
2004-04-19 13:02
2004.04.11
Вот и верь теперь своим глазам.





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