// Excel

Excell ‘den ole ile veri çekme

Güncellendi: 07 Mayıs 2020

Delphi 2010 ‘da odbc kullanmadan ole ile veri çekme komutu..

butonumuz’un içeriği

procedure TAnaForm.cxButton1Click(Sender: TObject);
var
    book:variant;
    excel,sheet:variant;
    satir, sutun,i,RehID,d:integer;
    DbS,ExcelS:string;

    function excelsonsatir(AColumn: Integer): Integer;
    const
    xlUp = 3;
    begin
     Result := excel.Range[Char(96 + AColumn) + IntToStr(65536)].end[xlUp].Rows.Row;
    end;
begin

  excel := CreateOleObject('Excel.Application');
  OpenDialog1.Title := 'Excel Dosyasını Aç';
  OpenDialog1.Filter := 'Excel Dosyaları *.xls';

//  if OpenDialog1.Execute then begin
    book := Excel.WorkBooks.Open(cxTextEdit1.text);

    try
    Screen.Cursor := crHourGlass;
    sheet := book.worksheets[1];
    cxLabel1.Caption := 'Excelden veriler aktarılıyor.Bekleyiniz...';
    cxProgressBar1.Properties.Max := excelsonsatir(1)+1;

      for satir := 2 to excelsonsatir(1)+1 do begin

        cxProgressBar1.Position := satir;
        cxProgressBar1.Refresh;

          if VarToStr(sheet.cells[satir,2]) <> '' then
          begin
            tablo.ADOQuery1.Close;
            tablo.ADOQuery1.SQL.Text:='select * from ILSEMT where SEMTADI='''+trim( VarToStr(sheet.cells[satir,2]) )+'''';
            tablo.ADOQuery1.Open;

                  DbS:=trim(Tablo.ADOQuery1.FieldByName('SEMTADI').AsString);
                  ExcelS:=trim(VarToStr(sheet.cells[satir,2]));

                  if DbS=ExcelS then
                  begin
                     //showmessage(Tablo.ADOQuery1.FieldByName('SEMTADI').AsString+'-'+VarToStr(sheet.cells[satir,2])+' AYNI eklenmeyecek');
                  end else
                  begin
//                    showmessage('insert into ILSEMT(ILNO,SEMTADI,UZAKLIK)  values('''+trim( VarToStr(sheet.cells[satir,1]) ) +''','''+trim( VarToStr(sheet.cells[satir,2]) )+''','''+trim( VarToStr(sheet.cells[satir,3]) )+''')  ');
                      cxMemo1.Lines.Add(VarToStr(sheet.cells[satir,2]));
                      tablo.ADOQuery1.Close;
                      tablo.ADOQuery1.SQL.Text:='insert into ILSEMT(ILNO,SEMTADI,UZAKLIK)  values('+trim( VarToStr(sheet.cells[satir,1]) ) +','''+trim( VarToStr(sheet.cells[satir,2]) )+''','''+StringReplace(trim( VarToStr(sheet.cells[satir,3]) ),',','.',[rfReplaceAll])+'''); select scope_identity() as deger;  ';
                      tablo.ADOQuery1.open;
                  end;

//            showmessage('diğer kayda geçiyor');
          end;

         if tablo.ADOQuery1.fields[0].asinteger>0 then  d:=tablo.ADOQuery1.fields[0].AsInteger;

       //nakliye ye giriş
//         tablo.ADOQuery1.Close;
//         tablo.ADOQuery1.SQL.Text:='insert into NAKLIYE(SEMTNO,TUTAR,ALT,UST)  values('+trim( inttostr(d) ) +','+trim( VarToStr(sheet.cells[satir,6]) ) +','''+trim( VarToStr(sheet.cells[satir,4]) ) +''','''+trim( VarToStr(sheet.cells[satir,5]) ) +''')  ';
//         tablo.ADOQuery1.execsql;
        //nakliyeye giriş

      end;
      excel.DisplayAlerts := False;
      excel.quit;
      excel := Unassigned;
      Application.Messagebox(PChar('Veriler kaydedilmiştir.'),Pchar('uyarı'),MB_OK);
    finally
      Screen.Cursor:=crDefault;
    end;
//  end;
end;

 

// GERİ BİLDİRİM

Bu çözüm işine yaradı mı?

Değerlendirmen, bu notun diğer okuyuculara ne kadar yardımcı olduğunu gösterir.

Bu çözüm işine yaradı mı?

Değerlendirmek için yıldızlara tıklayın.

Ortalama puan 0 / 5. Toplam oy: 0

İlk değerlendiren sen ol.

Bu yazıyı faydalı bulmadığınız için çok üzüldük.

Görüşleriniz bizim için çok değerli.

Nasıl daha faydalı bir yazı hazırlayabiliriz?

// SOHBETE KATIL

Deneyimini paylaş

Bir sorunun, farklı bir çözümün veya eklemek istediğin bir notun var mı?

Xeeer

Başarılı bir kod olmuş fakat keşke sütun sayısını da hesaplayabileceğimiz bir fonk. daha olsaydı

// OKUMAYA DEVAM

Bir not daha.

Tüm yazılar ↗︎