Mega Code Archive

 
Categories / Delphi / Forum
 

Neoturk - re excelden dbgride import hakkında yardım

" ARKADAŞLAR BU KODU ÇALIŞTIRAMADIM ... BU KOD HAKKINDA YARDIMCI OLABİLİRSENİZ SEVİNİRİM. FORM ÜZERİNDE HANGİ NESNELER OLACAK VE HANGİ OLAYLARA KOD YAZILACAK .. YARDIMLARINIZ İÇİN TEŞEKKÜRLER. procedure TForm1.Import1Click(Sender: TObject); Var ExcelApplication1 : TExcelApplication; ExcelWorkBook1 : TExcelWorkBook; ExcelWorkSheet1 : TExcelWorkSheet; lcid : Integer; aExcelFile : OleVariant; aFile: String; aCurrLine : integer; aCurrColumn : integer; begin od.Title:= 'Shipmentinfo '; if od.Execute then begin aFile:= od.FileName; //Dosya Ismı buraya ExcelApplication1:=TExcelApplication.Create( self ); ExcelWorkBook1:=TExcelWorkBook.Create( self ); ExcelWorkSheet1:=TExcelWorkSheet.Create( self ); ExcelApplication1.Connect; lcid := 1033;//Sisteminizde yuklu msoffice'in default LCID ülke kodu. ExcelApplication1.Visible[ lcid ] := False; aExcelFile:=aFile; ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Add(aExcelFile, lcid)); ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet); if DataModule1.Shipmentinfo.Active then DataModule1.Shipmentinfo.Close; DataModule1.Shipmentinfo.Open; aCurrLine:= 2; while VarToStr(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value) <> '' do begin DataModule1.Shipmentinfo.insert; DataModule1.shipmentinfo.FieldByName('Week').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value; //Excel sheet 'deki alanların dbgrid karşılığı DataModule1.shipmentinfo.FieldByName('Trailer').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 2 ].Value; DataModule1.shipmentinfo.FieldByName('Shipment').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 3 ].Value; DataModule1.shipmentinfo.FieldByName('Customer').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 4 ].Value; DataModule1.shipmentinfo.FieldByName('Name').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 5 ].Value; DataModule1.shipmentinfo.FieldByName('Zipcode').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 6 ].Value; DataModule1.shipmentinfo.FieldByName('City').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 7 ].Value; DataModule1.shipmentinfo.FieldByName('Colli').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 9 ].Value; DataModule1.shipmentinfo.FieldByName('Country').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 8 ].Value; DataModule1.shipmentinfo.FieldByName('Weight').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 10 ].Value; DataModule1.shipmentinfo.FieldByName('Unit').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 11 ].Value; DataModule1.Shipmentinfo.Post; Self.Refresh; inc( aCurrLine ); end; ExcelWorkSheet1.Columns.Autofit; ExcelApplication1.Visible[lcid]:=true; ExcelWorksheet1.disconnect; ExcelWorkbook1.disconnect; ExcelApplication1.disconnect; End; End; " merhaba, arkadaşım, kodu nereye yazıcaz filan diyorsun, iyi güzel de, birazcık kodu yorumlamaya çalışsan ?... izah etmeye çalışayım, form1 1 adet button koy ( captionu import olsun. ( dışardan al demiş arkadaş ) , 1 adet adotable, 1 adet grid, 1 adet ado connection,1 adet datasource koy, access de veri tabanı dosyasını oluştur dışardan, week, trailer, shipment. vs vs vs... bak hepsi de metinselmiş zaten. datamodule koymana gerek yok. gerekli bağlantıları yap sına vs! import butonuna tıkladığında excel dosyasındaki bilgileri hücre hücre senin kendi DB ne aktarıldığını görürsün. kod gayet açık ve net. bu kodda önemli olan konu, EXCELden bilgilerin nasıl çekilip alındığı. bak kodu yazan arkadaşımız exceldeki verileri çekip "insert" ile kendi DBsine ne güzel ekletiyormuş bilgileri. ya da daha da kısaltayım istersen: 1 button 3 tane memo yerleştir forma, procedure TForm1.Button1Click(Sender: TObject); Var ExcelApplication1 : TExcelApplication; ExcelWorkBook1 : TExcelWorkBook; ExcelWorkSheet1 : TExcelWorkSheet; lcid : Integer; aExcelFile : OleVariant; aFile: String; aCurrLine : integer; aCurrColumn : integer; begin od.Title:= 'Shipmentinfo '; if od.Execute then begin aFile:= od.FileName; //Dosya Ismı buraya ExcelApplication1:=TExcelApplication.Create( self ); ExcelWorkBook1:=TExcelWorkBook.Create( self ); ExcelWorkSheet1:=TExcelWorkSheet.Create( self ); ExcelApplication1.Connect; lcid := 1033;//Sisteminizde yuklu msoffice'in default LCID ülke kodu. ExcelApplication1.Visible[ lcid ] := False; aExcelFile:=aFile; ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Add(aExcelFile, lcid)); ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet); aCurrLine:= 2; while VarToStr(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value) <> '' do begin memo1.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value); memo2.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 2 ].Value); memo3.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 3 ].Value); inc( aCurrLine ); end; ExcelWorkSheet1.Columns.Autofit; ExcelApplication1.Visible[lcid]:=true; ExcelWorksheet1.disconnect; ExcelWorkbook1.disconnect; ExcelApplication1.disconnect; End; End; excel kalıbı sabit, zaten yazılması gereken satırlar yazılmış. eksiği fazlası yok. öğretici bir kod ayrıca. yukardaki kod parçası da, excel dosyasındaki verileri ( od.filename olan ) satır sütunlardan okuyarak memo1-2-3 nesnelerinin içine aktaracak. olay bu kadar basit. tavsiye olarak, stringgridden excele, dbgridden excele, excelden stringgride, excelden dbgride, aktarma işlemlerini yapan dinamik procedure kodlarının elinizde olması artı bir avantajdır görüşündeyim. bu konular zevklidir hem :) "excelden dbgride import" adlı kodu yayınlayan cüneyt arkadaşıma buradan teşekkür ediyorum, hepinize iyi çalışmalar, iyi günler, kolay gelsin. "Türk Coderler her zaman zeki ve güçlüdür " saygılarımla_ neoturk [ xxnt03@lycos.co.uk ]