excel den tabloya aktarımda çözemediğim bir durum?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

excel den tabloya aktarımda çözemediğim bir durum?

Mesaj gönderen y.kulac »

s.a.

aşağıdaki kod ile excelden tabloya kayıt aktarıyorum.

Kod: Tümünü seç

ibquery1.Close;
ibquery1.SQL.Clear;
ibquery1.SQL.Add('Delete from TAMPON');
ibquery1.ExecSQL;

ibquery1.open;
datamodule1.IBTransaction1.CommitRetaining;
ibquery1.Close;
    try
    excel := createOleObject('Excel.application');
    OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
    if opendialog1.Execute then
    begin
    label5.Visible:=True;
        book:= Excel.WorkBooks.Open(OpenDialog1.FileName);
        try
            Screen.Cursor := crHourGlass;
            ProgressBar1.Visible := True;
            label3.Visible := True;
            sheet := book.worksheets[1];
            for satir:=2 to 300 do
            begin
                str := sheet.cells[satir, 1];
                iF (str <> '') then
                if (str <> '') And (str <> '') then
                begin
                    Update;
                    Label4.Caption := str;
                    ProgressBar1.Position  := satir;
                    ibtable2.Append;
                    for sutun:=1 to 7 do
                    ibtable2.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
                    ibtable2.Post;
                 end;
            end;
            Excel.quit;
            excel:=Unassigned;
        finally
            Screen.Cursor := crDefault;
            ProgressBar1.Position := 0;
            ProgressBar1.Visible := False;
            LAbel3.Caption:= 'Liste tampon tablodan kursiyer tablosuna aktarılıyor ';
            ibtable2.Close;

            ibtable2.Open;
            ibtable2.FetchAll;
            ibtable2.first;

            ibtable1.Open;
            ProgressBar1.Visible:=True;
            progressBar1.Max:= ibtable2.RecordCount;

 while not ibtable2.Eof do
 BEGIN
 Screen.Cursor := crHourGlass;
 if (ibtable2ADI.Value <> '') and (ibtable2SOYADI.Value <> '') then
 begin
 ibtable1.Append;
 ibtable1.Edit;
 ibtable1KURSNO.Value:= label19.Caption;
 ibtable1KURSADI.Value:= label20.Caption;
 ibtable1BASLAYIS.Value:= strtodate(frm_Ana.label21.Caption);
 ibtable1BITIS.Value:= strtodate(frm_Ana.label22.Caption);
 ibtable1KURS_GUN.Value:= strtointdef(frm_Ana.label23.Caption,0);
 ibtable1SIRANO.Value:= strtoint(ibtable2SIRANO.Value);
 ibtable1ADISOYADI.Value:= ibtable2ADI.Value+' '+ibtable2SOYADI.Value;
 ibtable1UNVAN.Value:= ibtable2UNVANI.Value;
 ibtable1GOREV_YERI.Value:= ibtable2GOREVYERI.Value;
 ibtable1ISLEMYILI.Value:= strtoint(frm_Ana.Label27.Caption);
 ibtable1ILI.Value:= ibtable2ILI.Value;
 ibtable1ILCESI.Value:= ibtable2ILCESI.Value;
 ibtable1ZAR_ODENSINMI.Value:= 'ÖDENMESİN';
 ibtable1GEC_BASLADI.Value:= 'HAYIR';
 ibtable1RAYIC_ODENSINMI.Value:= 'ÖDENSİN';
 ibtable1.Post;
 datamodule1.IBTransaction1.CommitRetaining;
 ibtable2.Next;
 ProgressBar1.Position := ibtable2.RecNo;
 end;
burada önce excelden tampon bir tabloya aktarım oluyor.
daha sonra tampon tablodan asıl tabloya aktarma oluyor.
buraya kadar her şey normal.
ama daha sonra listeye baktığımda iki tane boş kayıt görülüyor. ve bu kayıtlar excel listesi ile karşılaştırıldığında fazla kayıt oluyor.
daha sonra ibexpert ile dahi bu boş kayıtları silemiyorum.
delphiden aşağıdaki kod ile silmeyi denediğimde kayıtların silinmesi mümkün olmuyor

Kod: Tümünü seç

            ibquery2.Close;
            ibquery2.SQL.Clear;
            ibquery2.SQL.Add('Delete From KURSIYER');
            ibquery2.SQL.Add('Where ADISOYADI = ''''');
            ibquery2.ExecSQL;
            datamodule1.IBTransaction1.CommitRetaining;
tıkandım kaldım. ne yapabilirim. bu boş kayıtların akatarılmasını nasıl önleyebilirim.
bu arada firebird 1.5 ve ibx bileşenlerini kullanıyorum.
iyi çalışmalar.
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Demekki o hücreler null değil. Bu yüzden de str <> '' ifadesini es geçiyor. Length(str) değeri son satırlarda nedir? Bunu kontrol ettin mi?
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

excel listesinde 67 adet satır dolu. ilk satırı boş bırakıyorum. en son satırdan sonra hiçbir dolu satır yok listede.
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Length(str) değeri son satırlarda ne değer dönderiyor?
Cevapla