Главная страница
    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.041 c
3-1081800911
Mirror
2004-04-13 00:15
2004.04.11
EHLib


3-1079116473
Skif
2004-03-12 21:34
2004.04.11
Show tables;


1-1079973332
TUser
2004-03-22 19:35
2004.04.11
I/O error 998


6-1075556382
Александр
2004-01-31 16:39
2004.04.11
Помогите отправить SMS с помощь программы


3-1081860223
gosha
2004-04-13 16:43
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский