Excell ‘den ole ile veri çekme
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;
Başarılı bir kod olmuş fakat keşke sütun sayısını da hesaplayabileceğimiz bir fonk. daha olsaydı