Ole nesnesi kullanmadan excel dosyası oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

Ole nesnesi kullanmadan excel dosyası oluşturma

Mesaj gönderen AliRiza »

Arkadaşlar veritabanındaki verileri ole nesnesi kullanarak excel'e aktarıyorum.Ancak eğer programı verdiğim kişide excel kurulu değilse bu probleme neden olacağını düşündüm.Yaptığım olay şu kullanıcı veritabanından almak istediği ürünü seçiyor ve bunu sipariş adlı table'a attırıyorum.Bu siparişlerin listesini 2.formda görebiliyor ve ordan mail gönder butonuna tıkladığında otomatik olarak şirkete excel dosyası ekli mail geliyor.Müşterim mailin excel formatında olmasını istiyor.
Arkadaşlar kişide excel yoksa bu problem çıkartacak.Ole nesnesi excel'i bulamayacak.Text dosyasına yazdırıp excel formatında kaydettirsem olurmu..
Yardımlarınızı ve fikirlerinizi bekliyorum..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bu konular forumda çok geçti :ara yalım.

verdiğim link size fikir verebilir. Özellikle Musatafa Hocam ın yanıtı viewtopic.php?p=4605#4605


Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

excel'veri atma ile ilgili

Mesaj gönderen AliRiza »

Hüseyin hocam benim anlatmak istediğim database'den excel'a aktarmaktı.Zaten bunu ole ile yaptım.Ama kişide excel yoksa nasıl createobject oluşturacağız.Sizin verdiğiniz linkte excelden veritabanına aktarma konusu var.

Ayrıca ben dediğim işlemi hallettim.
Belki bir arkadaşıma lazım olur.Çünkü ole excel varsa çalışıyor.
Yoksa excel formatında kayıt için

Internet bileşeninde bulunan datasettableproducer componentini kullandım.
Ondan memoya aktarıp memoyu gizleyerak tabi.Formun showunda memoda excel formatında kayıt yaptırıyorum..

Kod: Tümünü seç

form1.ADOTable1.First;
memo1.Text:=datasettableproducer1.Content;
memo1.Lines.SaveToFile(form1.way2+'order_spare.xls');
Yardımlarınız için çok teşekkür ederim..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Aslında benim demek istediğim olay CSV formatında çıktı alman dı. Yani bir Text dosyasına kayıt gönderiyormuş gibi sadece sutunlar ;(Noktalı Virgül) koyarak yapılandırma yapman yeterli olabileceğini belirtmek istemiştim. Verdiğim linkte direk Mustafa Hocam ın açıklamasına odaklanıyordu. Gerçi Probleminizi aşmışsınız sevindim ayrıca bizimle paylaştığınız için Teşekkür Ederiz.

Örnek Csv formatı
"13.0110";"12 V 53 6W AMPUL";"";"AD";940;
"13.0117";"12 V 53 2 W AMPUL";"";"AD";3010;
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Re: excel'veri atma ile ilgili

Mesaj gönderen Salih »

AliRiza yazdı: Ayrıca ben dediğim işlemi hallettim.
Belki bir arkadaşıma lazım olur.Çünkü ole excel varsa çalışıyor.
Yoksa excel formatında kayıt için

Internet bileşeninde bulunan datasettableproducer componentini kullandım.
Ondan memoya aktarıp memoyu gizleyerak tabi.Formun showunda memoda excel formatında kayıt yaptırıyorum..

Kod: Tümünü seç

form1.ADOTable1.First;
memo1.Text:=datasettableproducer1.Content;
memo1.Lines.SaveToFile(form1.way2+'order_spare.xls');
Yardımlarınız için çok teşekkür ederim..
Bu kodları Excel kurulu olmayan bilgisayarlar için kullanmıştım, OLE Object kullanarak yapılana göre çok da hızlı çalışıyor. Ancak kayıt sayısı az iken gayet güzel çalışan bu kod, kayıt sayısı bir kaç yüzü geçince çalışmamaya başladı. Benden başka kullanan ve bu sorunu aşan oldu mu acaba ?
Sevgi, Saygı.....
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

Kod: Tümünü seç

procedure TSipExcelForm.BtnCSVClick(Sender: TObject);
var
  dosya: TextFile ;
  yaz : string;
  k1 : integer;
begin
  AssignFile(dosya,'C:\' + edit1.text + '.CSV');
  Rewrite (dosya);
  if IOResult = 0 then
  begin
    For k1:=0 to IBQGar.FieldCount - 1 do
    begin
      yaz := IBQGar.Fields[k1].FieldName;
      write (dosya,yaz + ',');
    end;
    writeln (dosya);
    IBQGar.First;
    While not(IBQGAR.Eof) do
    begin
      For k1:=0 to IBQGar.FieldCount -1 do
      begin
        yaz := IBQGar.Fields[k1].Text;
        write (dosya,yaz,',');
      end;
      writeln (dosya);
      IBQGar.Next;
    end;
    closeFile(dosya);
  end
  else
  begin
    MessageDlg('Yazdığınız dosya kullanılıyor....', mtWarning, [mbOk], 0);
  end;
end;
Bu şekilde yapıp CSV dosyası oluşturdum, yeni başlayan arkadaşların işine yarar belki düşüncesiyle buraya da yazayım dedim.
Sevgi, Saygı.....
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

bazı Componentler (mesela Quantum Grid) orjinal Excel formatında kaydedebiliyor. Ama bunun için XLS formatını incelemeniz lazım. Daha önce bir siteden bu tarz uzantılarla ilgili format bilgilerini gördüğümü hatırlıyorum ama adresi şu an aklımda değil.

Biraz vakit alacak alt düzey bir işlem yani.

Kolay gelsin.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
Delphiturk sitesinden indirdiğim kodbank isimli programda OLE ye ihtiyaç duymadan belirtilen TDBGrid in içeriğini Orijinal Excel dosyasına aktarabilen bir procedure gözüme çarptı. procedure içerisinde çağrılan diğer funtion ve procedureleri içeren uniti ekliyorum. Umarım işinizi çözer,

Kod: Tümünü seç

unit DBGridExportToExcel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ComCtrls, DB, IniFiles, Buttons, dbgrids, ADOX_TLB, ADODB;


type TScrollEvents = class
       BeforeScroll_Event: TDataSetNotifyEvent;
       AfterScroll_Event: TDataSetNotifyEvent;
       AutoCalcFields_Property: Boolean;
end;

procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
implementation

procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
begin
     with DataSet do
          begin
               DisableControls;
               ScrollEvents := TScrollEvents.Create();
               with ScrollEvents do
                    begin
                         BeforeScroll_Event := BeforeScroll;
                         AfterScroll_Event := AfterScroll;
                         AutoCalcFields_Property := AutoCalcFields;
                         BeforeScroll := nil;
                         AfterScroll := nil;
                         AutoCalcFields := False;
                    end;
          end;
end;

procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
begin
     with DataSet do
          begin
               EnableControls;
               with ScrollEvents do
                    begin
                         BeforeScroll := BeforeScroll_Event;
                         AfterScroll := AfterScroll_Event;
                         AutoCalcFields := AutoCalcFields_Property;
                    end;
          end;
end;

procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
var
  cat: _Catalog;
  tbl: _Table;
  col: _Column;
  i: integer;
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
  ScrollEvents: TScrollEvents;
  SavePlace: TBookmark;
begin
  cat := CoCatalog.Create;
  cat._Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0');
  tbl := CoTable.Create;
  tbl.Set_Name(SheetName);
  DBGrid.DataSource.DataSet.First;
  with DBGrid.Columns do
    begin
      for i := 0 to Count - 1 do
        if Items[i].Visible then
        begin
          col := nil;
          col := CoColumn.Create;
          with col do
            begin
              Set_Name(Items[i].Title.Caption);
              Set_Type_(adVarWChar);
            end;
          tbl.Columns.Append(col, adVarWChar, 20);
        end;
    end;
  cat.Tables.Append(tbl);
  col := nil;
  tbl := nil;
  cat := nil;
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.LoginPrompt := False;
  ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0';
  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection;
  ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]';
  ADOQuery.Open;
  DisableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);
  SavePlace := DBGrid.DataSource.DataSet.GetBookmark;
  try
  with DBGrid.DataSource.DataSet do
    begin
      First;
      while not Eof do
        begin
          ADOQuery.Append;
          with DBGrid.Columns do
            begin
              ADOQuery.Edit;
              for i := 0 to Count - 1 do
                if Items[i].Visible then
                  begin
                    ADOQuery.FieldByName(Items[i].Title.Caption).AsString := FieldByName(Items[i].FieldName).AsString;
                  end;
              ADOQuery.Post;
            end;
          Next;
        end;
    end;
  finally
  DBGrid.DataSource.DataSet.GotoBookmark(SavePlace);
  DBGrid.DataSource.DataSet.FreeBookmark(SavePlace);
  EnableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);
  ADOQuery.Close;
  ADOConnection.Close;
  ADOQuery.Free;
  ADOConnection.Free;
  end;
end;
end.
Volkan KAMADAN
www.polisoft.com.tr
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Mesaj gönderen Salih »

mussimsek yazdı:bazı Componentler (mesela Quantum Grid) orjinal Excel formatında kaydedebiliyor. Ama bunun için XLS formatını incelemeniz lazım. Daha önce bir siteden bu tarz uzantılarla ilgili format bilgilerini gördüğümü hatırlıyorum ama adresi şu an aklımda değil.
Admin'im;

Mesajınız üzerine biraz araştırma yaptım, :ara kullandım yani :) Güzel bir kaynak buldum, ama inceleyecek vakit kalmadı.
http://www.wotsit.org/ olabilir mi bahsettiğiniz adres ?
http://web.archive.org/web/200105012116 ... e/archive/
bu adres te güzele benziyor.
Sevgi, Saygı.....
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

datasettableproducer hatası

Mesaj gönderen AliRiza »

Evet arkadaşlar bende yeni farkına vardım.Önceden size datasettableproducer ile hallettiğimi söylemiştim.Ama bir müşterimden gelen mesajda müşterilerinin ürün ekleyip bunu maille gönderdikleri zaman datasettableproducer'ın 20'den fazla ürünü göstermediğini belirtti.
Bende onun uyarısıyla yeni farkına vardım.Yani datasettableproducer 20 kaydı html veya xls dosyalarında gösteriyor.20'den fazla ürün dbgridde ekli olsada html veya xls dosyarına eklemiyor..
Bunun nedeni nedir.Forumda gördüğüm kadarıyla aynı problemle karşılan bir arkadaş daha varmış.
Yardımlarınızı bekliyorum..

Kod: Tümünü seç

form1.ADOTable1.First;
memo1.Text:=datasettableproducer1.Content;
memo1.Lines.SaveToFile(form1.way2+'order_spare.htm');
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

volkan kamadan'a

Mesaj gönderen AliRiza »

volkan arkadaş bu unitin kullanımı ile ilgili bilgi verirseniz çok memmun olurum.Bunu delphide açıp unit olarak kaydedip formdak dbgrid'imle veya butonumla nasıl ilişkilendiririm.
Uses kısmına uniti ekledim..Formdan çağırmayı denemedim. file not found ADOX_TLB.dcu hatasını alıyorum.

Sizden bu konuda yardım bekliyorum..
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

mehaba,
bu uniti daha önce denememiştim,
mesajın üzerine denedim delphi5 ve 7 de ADOX_TBL unitini bulamadım.
zannedersem ekstra bir bileşenin uniti.
Sonuç olaark uniti çalıştıramadım. :?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: volkan kamadan'a

Mesaj gönderen mussimsek »

AliRiza yazdı:file not found ADOX_TLB.dcu hatasını alıyorum.
Project menüsünden Import Type Library komutunu verin.

Microsoft ADO Extensions .... diye devam eden seçeneği seçin ve Create Unit deyin.

Kolay gelsin.
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

unitin kullanımı

Mesaj gönderen AliRiza »

Kod: Tümünü seç


  Exporting a DBGrid to excel without OLE

  I develop software and about 95% of my work deals with databases.
  I enjoied the advantages of using Microsoft Excel in my projects
  in order to make reports but recently I decided to convert myself
  to the free OpenOffice suite.
  I faced with the problem of exporting data to Excel without having
  Office installed on my computer.
  The first solution was to create directly an Excel format compatible file:
  this solution is about 50 times faster than the OLE solution but there
  is a problem: the output file is not compatible with OpenOffice.
  I wanted a solution which was compatible with each "DataSet";
  at the same time I wanted to export only the dataset data present in
  a DBGrid and not all the "DataSet".
  Finally I obtained this solution which satisfied my requirements.
  I hope that it will be usefull for you too.

  First of all you must import the ADOX type library
  which will be used to create the Excel file and its
  internal structure: in the Delphi IDE:

  1)Project->Import Type Library:
  2)Select "Microsoft ADO Ext. for DDL and Security"
  3)Uncheck "Generate component wrapper" at the bottom
  4)Rename the class names (TTable, TColumn, TIndex, TKey, TGroup, TUser, TCatalog) in
    (TXTable, TXColumn, TXIndex, TXKey, TXGroup, TXUser, TXCatalog)
    in order to avoid conflicts with the already present TTable component.
  5)Select the Unit dir name and press "Create Unit".
    It will be created a file named AOX_TLB.
    Include ADOX_TLB in the "uses" directive inside the file in which you want
    to use ADOX functionality.

  That is all. Let's go now with the implementation:
}

unit DBGridExportToExcel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ComCtrls, DB, IniFiles, Buttons, dbgrids, ADOX_TLB, ADODB;


type TScrollEvents = class
       BeforeScroll_Event: TDataSetNotifyEvent;
       AfterScroll_Event: TDataSetNotifyEvent;
       AutoCalcFields_Property: Boolean;
  end;

procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);


implementation

//Support procedures: I made that in order to increase speed in
//the process of scanning large amounts
//of records in a dataset

//we make a call to the "DisableControls" procedure and then disable the "BeforeScroll" and
//"AfterScroll" events and the "AutoCalcFields" property.
procedure DisableDependencies(DataSet: TDataSet; var ScrollEvents: TScrollEvents);
begin
     with DataSet do
          begin
               DisableControls;
               ScrollEvents := TScrollEvents.Create();
               with ScrollEvents do
                    begin
                         BeforeScroll_Event := BeforeScroll;
                         AfterScroll_Event := AfterScroll;
                         AutoCalcFields_Property := AutoCalcFields;
                         BeforeScroll := nil;
                         AfterScroll := nil;
                         AutoCalcFields := False;
                    end;
          end;
end;

//we make a call to the "EnableControls" procedure and then restore
// the "BeforeScroll" and "AfterScroll" events and the "AutoCalcFields" property.
procedure EnableDependencies(DataSet: TDataSet; ScrollEvents: TScrollEvents);
begin
     with DataSet do
          begin
               EnableControls;
               with ScrollEvents do
                    begin
                         BeforeScroll := BeforeScroll_Event;
                         AfterScroll := AfterScroll_Event;
                         AutoCalcFields := AutoCalcFields_Property;
                    end;
          end;
end;

//This is the procedure which make the work:

procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);
var
  cat: _Catalog;
  tbl: _Table;
  col: _Column;
  i: integer;
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
  ScrollEvents: TScrollEvents;
  SavePlace: TBookmark;
begin
  //
  //WorkBook creation (database)
  cat := CoCatalog.Create;
  cat._Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0');
  //WorkSheet creation (table)
  tbl := CoTable.Create;
  tbl.Set_Name(SheetName);
  //Columns creation (fields)
  DBGrid.DataSource.DataSet.First;
  with DBGrid.Columns do
    begin
      for i := 0 to Count - 1 do
        if Items[i].Visible then
        begin
          col := nil;
          col := CoColumn.Create;
          with col do
            begin
              Set_Name(Items[i].Title.Caption);
              Set_Type_(adVarWChar);
            end;
          //add column to table
          tbl.Columns.Append(col, adVarWChar, 20);
        end;
    end;
  //add table to database
  cat.Tables.Append(tbl);

  col := nil;
  tbl := nil;
  cat := nil;

  //exporting
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.LoginPrompt := False;
  ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0';
  ADOQuery := TADOQuery.Create(nil);
  ADOQuery.Connection := ADOConnection;
  ADOQuery.SQL.Text := 'Select * from [' + SheetName + '$]';
  ADOQuery.Open;


  DisableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);
  SavePlace := DBGrid.DataSource.DataSet.GetBookmark;
  try
  with DBGrid.DataSource.DataSet do
    begin
      First;
      while not Eof do
        begin
          ADOQuery.Append;
          with DBGrid.Columns do
            begin
              ADOQuery.Edit;
              for i := 0 to Count - 1 do
                if Items[i].Visible then
                  begin
                    ADOQuery.FieldByName(Items[i].Title.Caption).AsString := FieldByName(Items[i].FieldName).AsString;
                  end;
              ADOQuery.Post;
            end;
          Next;
        end;
    end;

  finally
  DBGrid.DataSource.DataSet.GotoBookmark(SavePlace);
  DBGrid.DataSource.DataSet.FreeBookmark(SavePlace);
  EnableDependencies(DBGrid.DataSource.DataSet, ScrollEvents);

  ADOQuery.Close;
  ADOConnection.Close;

  ADOQuery.Free;
  ADOConnection.Free;

  end;

end;

end.
Volkan arkadaşın delphiturk.com'dan bulduğu unit'i ben torry.nette açıklamalı olarak buldum.Adox_TLB'nin eklenmesi ile ilgili açıklamayı okudum.Buna göre delphinin kütüphanesinden eklememiz gerekiyor.Bu şekilde unitle işlem yapmak mümkün.
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
AliRiza
Üye
Mesajlar: 172
Kayıt: 24 Kas 2004 10:57
Konum: İstanbul/Avcılar
İletişim:

Projeye uniti ekleme

Mesaj gönderen AliRiza »

Project menüsünden add to project deyip uniti ekledim.
Ancak derlemek istediğimde
unitte bağlantı satırında şu tip uyumsuzluğu hatasını alıyorum.
Hata

Kod: Tümünü seç

[Error] DBGridExportToExcel.pas(116): Incompatible types: 'String' and 'IDispatch'
Hata veren satır

Kod: Tümünü seç

cat._Set_ActiveConnection('Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileName + ';Extended Properties=Excel 8.0'); 
Ayrıca bu hatayı giderdikten sonra form1'de uses kısmına uniti ekleyip
Bir butonun clik veya herhangi bir olayında formde yer alan griddeki verileri aktarmak için unitteki procedure'i aşağıdaki gibi kullansam olur mu?
procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string);

Yukarıdaki procedure'
unitten aşağıdaki gibi çağırsam doğrumu olur sizce..

Kod: Tümünü seç

DBGridToExcelADO(dbgrid1,'aktarilcacakdosya.xls','aktarılansayfa');
Bilginin efendisi olmak için çalışmanın uşağı olmak şarttır...
BALZAC
Bana bir harf öğretenin kulu kölesi olurum..
HZ.ALİ
Cevapla