![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с выполнением запросов в цикле [D6, MySQL]
TEXHAPb © (2004-03-15 16:14:00)Используется компонент TQuery
В цикле обращаются к функции UpdateRec, которая делает следующее:
1. Устанавливает значение параметров запроса (несколько ParamByName)
2. Исполняет запрос (Open)
Проблема: Оказалось, что перед выполнением Open, из внешнего цикла заново выбывается функция UpdateRec, и занова вызывается установка параметров так, что перед исполнением Open запрос уже содержит неправильные данные.
Как можно этого избежать?
ek (2004-03-15 18:16:00) [1]может перед PrepareData(SelectQuery,Rec);
вставить SelectQuery.Close;?
alex_bredin (2004-03-15 17:41:00) [2]ну хватит пока коду))
TEXHAPb (2004-03-15 16:57:00) [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:00) [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:00) [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:54:00) [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 16:19:00) [7]
> Плохиш (15.03.04 16:17) [1]
> Ошибка в 17й строке
перевожу: покажите код
Плохиш (2004-03-15 16:17:00) [8]Ошибка в 17й строке