Вниз
Скачать: CL | DM;

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

 
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.032 c
3-1081928196
ККВ
2004-04-14 11:36
2004.04.11
Отключение пользователей от IB5


4-1079535051
Случайно забежавший
2004-03-17 17:50
2004.04.11
Загрузка и показ иконки


1-1082616656
god
2004-04-22 10:50
2004.04.11
Подскажите команды для подсчета кол-ва элементов в мессиве (D7)


1-1082446133
Talle
2004-04-20 11:28
2004.04.11
Компонента как параметр процедуры.


1-1082964495
Серж
2004-04-26 11:28
2004.04.11
CASE для Дельфи




   Наверх