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ı