Форум: "Базы";
Текущий архив: 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.06 c