EOF veya BOF hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
itsmylife38
Üye
Mesajlar: 28
Kayıt: 07 Haz 2005 04:11
Konum: İzmir
İletişim:

EOF veya BOF hatası

Mesaj gönderen itsmylife38 »

Arkadaslar merhaba aşagıdaki kod ile internet üzerindeki tableden localdaki tableye 30 dakikada bir veri aktarıyorum 2000 advanced serverde sorunsuz çalışıyor fakat 2003 veya xp de kurdugum zaman Her sorgu aktarımda "EOF veya BOF sonlandırılmamıs veya geçerli kayıt silinmiş" gibi bir hata alıyorum OK tusuna basıp tekrar programı çalıştırmak zorunda kalıyorum.

Bu hatayı try except hata yakalama sistemi ile almaya çalıştım ama yakalayamadım bir sürü yardımcı olurmusunuz lütfen :(

kodun neresine try except koymalıyım ki hata vermeden tüm verileri indirsin ?


procedure TForm1.Timer1Timer(Sender: TObject);
var
OpStruc: TSHFileOpStruct;
frombuf, tobuf: Array [0..128] of Char;
begin
DecodeTime(Time,saat,dakika,saniye,milisaniye);
if saat=0 then begin
if dakika=0 then begin
{uses kısmına ShellApi unitini ekleyin }
fillChar( OpStruc, Sizeof(OpStruc), 0 );
FillChar( frombuf, Sizeof(frombuf), 0 );
FillChar( tobuf, Sizeof(tobuf), 0 );
StrPCopy( frombuf, 'd:\trc\data\*.*' );
StrPCopy( tobuf, 'd:\yedektrc\data' );
With OpStruc DO Begin
Wnd:= Handle;
wFunc:= FO_COPY;
pFrom:= @frombuf;
pTo:=@tobuf;
fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
end;
ShFileOperation( OpStruc );
end;
end;
if dakika=0 then dk:=0;
if dakika=dk+30 then
begin
dk:=dakika;
Label1.caption:='Veriler Aktarılıyor......';
Label2.caption:=TimeToStr(time);
ADOQUERY2.CLOSE;
ADOQUERY2.SQL.Clear;
ADOQUERY2.SQL.ADD('SELECT * FROM TDEPO,HAREKET');
ADOQUERY2.SQL.ADD('WHERE HAREKET.MUSTERI_ID="19" AND TDEPO.DEPO_ID=HAREKET.DEPO_ID AND HAREKET.DURUM="OK" ');
ADOQUERY2.SQL.ADD('ORDER BY ODR');
IF ADOQUERY2.Prepared THEN ADOQUERY2.PREPARED;
ADOQUERY2.OPEN;

ADOQUERY2.First;
REPEAT
with Table2 do
if Locate('PARTI',ADOQUERY2.FIELDBYNAME('ODR').ASSTRING,[])=FALSE AND (ADOQUERY2.FIELDBYNAME('PO').ASSTRING<>'') then
BEGIN

ADOQUERY1.CLOSE;
ADOQUERY1.SQL.Clear;
ADOQUERY1.SQL.ADD('SELECT * FROM TDEPO,HAREKET');
ADOQUERY1.SQL.ADD('WHERE HAREKET.MUSTERI_ID="19" AND TDEPO.DEPO_ID=HAREKET.DEPO_ID AND HAREKET.ODR='''+ADOQUERY2.FIELDBYNAME('ODR').ASSTRING+''' AND HAREKET.DURUM="OK" ');
ADOQUERY1.SQL.ADD('ORDER BY PO');
IF ADOQUERY1.Prepared THEN ADOQUERY1.PREPARED;
ADOQUERY1.OPEN;

ADOQUERY1.First;
REPEAT
IF (ADOQUERY1.FIELDBYNAME('PO').ASSTRING<>'') THEN
BEGIN
TABLE1.INSERT;
TABLE1.FIELDBYNAME('REF').ASSTRING:=ADOQUERY1.FIELDBYNAME('ODR').ASSTRING;
TABLE1.FIELDBYNAME('PO').ASSTRING:=ADOQUERY1.FIELDBYNAME('PO').ASSTRING;
TABLE1.FIELDBYNAME('RMA').ASSTRING:=ADOQUERY1.FIELDBYNAME('RMA').ASSTRING;
TABLE1.FIELDBYNAME('NCRNO').ASSTRING:=ADOQUERY1.FIELDBYNAME('PARTNO').ASSTRING;
TABLE1.FIELDBYNAME('MODEL').ASSTRING:=ADOQUERY1.FIELDBYNAME('ADI').ASSTRING;
TABLE1.FIELDBYNAME('GIRIS').ASSTRING:=ADOQUERY1.FIELDBYNAME('TARIH').ASSTRING;
TABLE1.FIELDBYNAME('ADET').ASSTRING:='1';
TABLE1.POST;
END;
ADOQUERY1.NEXT;
UNTIL ADOQUERY1.EOF;

TABLE2.INSERT;
TABLE2.FIELDBYNAME('PARTI').ASSTRING:=ADOQUERY2.FIELDBYNAME('ODR').ASSTRING;
TABLE2.POST;


END;

ADOQUERY2.NEXT;
UNTIL ADOQUERY2.EOF;
Label1.caption:='Son Güncelleme '+TimeToStr(time);
end;

end;
Ismail ULUSOY

it is my life
( Hayat bizim peki Kontrolu kimde? )
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

REPEAT
IF (ADOQUERY1.FIELDBYNAME('PO').ASSTRING<>'') THEN
...
...
ADOQUERY1.NEXT;
UNTIL ADOQUERY1.EOF;
burada repeat until kullanmak yerine while dögösü kullanmayı dene. until'in işleyebilmesi için döngünün bir defa daha dönemesi gerekir bu nedenle hata alıyorsun sanırım.

Kod: Tümünü seç

WHILE ADOQUERY1.EOF=false DO
Begin
IF (ADOQUERY1.FIELDBYNAME('PO').ASSTRING<>'') THEN 
...
...
ADOQUERY1.NEXT; 
end;
Kullanıcı avatarı
itsmylife38
Üye
Mesajlar: 28
Kayıt: 07 Haz 2005 04:11
Konum: İzmir
İletişim:

Mesaj gönderen itsmylife38 »

Teşekkür ederim o While döngüsünde de aynı hatayı veriyor sanırım adoquerylere bir şekilde mudahele etmem lazım ama çözemedim bir türlü, ya da o hatayı programın görmezden gelip devam etmesi gerekiyor onu kodlarla yapma imkanımız var sanırım ama ben hata kontrolllerini pek kullanmadım!
Ismail ULUSOY

it is my life
( Hayat bizim peki Kontrolu kimde? )
Cevapla