ShowPopupEditor ile ilgili.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

ShowPopupEditor ile ilgili.

Mesaj gönderen sunye »

S.A.

Daha önceki sorularımda dbGrid'deki alanları Excel'e nasıl aktaracağımı sordum ve çeşitli öneriler aldım. Fakat bu öneriler ile bir sonuç elde edemediğim için yöntem değişikliğine gitmek zorunda kaldım. Forumda yaprığım aramalarda ShowPopupEditor komutu ile ilgili hiç bir çalışma yok. İnternet üzerindeki kaynaklardan da yararlanamadım (Rusça ya da Yunanca ağırlıklı).

Eğer bu konu hakkında bilgisi olan arkadaşlar var ise ShowPopupEditor ile açtığımız penceredeki Field'lara nasıl erişim sağlarız.

Örnek;

dbGrid1.ShowPopupEditor(Column[5]).Fields[1].AsString;

gibi. Ama böyle bir komut yok delphide. :oops:
Bildiğim tek şey, hiç bir şey bilmediğim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Neden sonuç alamadın ? Kod yazar mısın hatan nedere anlayalım... İşlem çok klasik ve basittir. Nette ingilizce ağırlıklı da bulmuş olmalısın. Deborah Pate bunun üzerine çalışıyor. Forumda bulamadıysan bile google'da Delphi Excel OleAutomation diye aratırsan karşına bir sürü kaynak çıkıyor.
Resim
Resim ....Resim
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Mesaj gönderen barutali »

Aşağıdaki şekilde ben aktarmayı başarmıştım

nesne : ExcelApplication

Kod: Tümünü seç

uses excel2000, comobj

Kod: Tümünü seç

procedure   DBGridToExcell(DBG:TDBGrid; FileName:String);
var
  EXCEL, WORKBOOK, SHEET:VARIANT;
  DBGDataset: TDataSet;
  k1,k2,k3:Integer;
begin
  DBGDataset:=DBG.DataSource.DataSet;
  k3:=DBGDataset.RecNo;
  DBGDataset.DisableControls;

  EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');
  EXCEL.VISIBLE :=False;
  WORKBOOK :=EXCEL.WORKBOOKS.ADD;
  SHEET:=WORKBOOK.WORKSHEETS[1];
  try
    For k1:=0 to DBG.Columns.Count-1 do
    begin
      SHEET.CELLS[1,k1+1]:=DBG.Columns[k1].Field.DisplayName;
      SHEET.Columns[k1+1].ColumnWidth:=(0.139*DBG.Columns[k1].Width);
    end;
    DBGDataset.First;  k2:=1;
    While not(DBGDataset.Eof) do
    begin
      k2:=k2+1;
      For k1:=0 to DBG.Columns.Count-1 do
      begin
        SHEET.CELLS[k2,k1+1]:=DBG.Columns[k1].Field.AsString;
      end;
      DBGDataset.Next;
    end;
    WORKBOOK.SaveAs(FileName);
    ShowMessage('Excel Formatında Kayıt Tamamlandı');
  finally
    EXCEL.DisplayAlerts := False;
    EXCEL.Quit;
    EXCEL:=Unassigned;
    DBGDataset.RecNo:=k3;
    DBGDataset.EnableControls;
  end;
  end;

kullanım :

Kod: Tümünü seç

SaveDialog1.Execute;
DBGridToExcell(DBGrid1, SaveDialog1.FileName);


Kodlar : delphiturk.com sitesine aittir (Yazan arkadaşı hatırlayamadım kusura bakmasın)
amatör küme programcı :D
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

basitce bir while do dongusu içinde tablo alanlarını bir text dosyaya atıp aralarına virgul yada ; yazsan, uzantısına "csv" desen işlem biterdi.

sanırım yeterince denenmemiş. forumda bir ton kaynak var... ben OLE yi çok tercih etmiyorum çünkü illede excel olmalı makinede ancak bu şekilde herhangi bir tablo yazılımı verilerimi açıyor. (open office, 602 , quattro vs)
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Mesaj gönderen sunye »

S.A. Arkadaşlar benim dbGrid'deki kayıtları Excel'e atmamda bir sorun yok. Sitedeki bütün excel'e aktarım makalelerini inceledim hepsi ilk dbGrid sayfasındaki kayıdı aktarıyor. Benim sorunum dbGrid'in içerisinde ShowPopupEdidor ile gelen yeni bir childgrid (tamamen salladığım bir isim) deki bilgileri okumak. Program içerisinden hangi kodla erişebilirim?

@mrmarman; işte bu nedenle herhangi bir kod yazamıyorum. :oops:
Bildiğim tek şey, hiç bir şey bilmediğim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@sunye

- Seninla anlaşamadığımız konu şu. Veritabanı programcılığında DBGrid sadece bir vitrindir. Yani asıl veri bağlı olduğu DataSource ne ise oradaki veridir. Bahsettiğin grid her hangi ne ise onun bağlı olduğu kaynağındaki veriyi basit bir döngü ile aktarma imkanı her zaman varken neden vitrine bakasın ki ? Desen ki "ben bir SQL Query kurgulayamıyorum." ona yönelik bir yardımımız olur. Sonra bu Query sonucunu Excel'e aktarırsın.

- Bu bağlamda sorunu yeniden düşün taşın öyle yeniden sor. De ki bir tablom var şu şu şu bilgi alanlarını içeriyor. Ben xxx yyy zzz grid bileşenini kullanarak şu şekle büründürdüm. Atıyorum adı şu şu olanları gruplayan bir fonksiyonu var. Bu ürün grid içeriğini excel'e aktarmak istiyorum. vs.vs.vs.

- Böyle sormayıp da bahsettiğin grid'i kullananları beklersen sorun da zaman aşımına uğrar, sabrımız da :wink:
Resim
Resim ....Resim
Kullanıcı avatarı
sunye
Üye
Mesajlar: 105
Kayıt: 24 Ağu 2004 04:49
Konum: izmir

Mesaj gönderen sunye »

@mrmarman

Öncelikle ilgin ve açıklayıcı yazın için teşekkür ederim. Benim sorunum dbGrid bileşeni (standart delphi ile gelen) içerisindeki verileri excel'e aktarmak değil. Onları zaten forumdaki yöntemler ve dediğin gibi döngüler sayesinde aktarıyorum. Benim anlatamadığım nokta şu. dbGrid ile database in içeriğini gösterdikten sonra dbGridin içerisinde ikitane (DATASET)... diye alan var. bu alanları "..." butonuna basınca yeni bir pencerede alt kayıtları görüyoruz görüyoruz. (daha önce bu şekilde bir database görmediğim için de ne olduğunu tam olarak anlatamıyorum) Forumdaki bütün dbGrid > Excel veri aktarım metodlarını denedim. Sadece dbGrid'in ilk ana sayfasında ki kayıtları aktarıyor. (DATASET)... yazan alanlar Excele "(DATASET)" yazısı olarak geliyor. Program içerisinden bu alanı yani sonradan açılan küçük pencereyi getirmek için ShowPopupEditor komutu ile açıyorum. Soru şu : Bu alandaki bilgilere programdan nasıl erişeceğim.

http://rapidshare.com/files/64848202/XMLCevir.rar programın örnek haline buradaki linki kullanarak erişip ne demek istediğimi anlayabilirsin.
(xml ve xta dosyası da mevcut. programı çalıştırdıktan sonra program içerisinden dosyaları senin göstermen gerekmekte)
Bildiğim tek şey, hiç bir şey bilmediğim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Rapid Linkini koyduğun örnek kaynak kodları olmasada görünen o ki iç içe tablolar var. Buna göre stratejin ne olmalı ? tabii ki bu iç tabloya haricen erişerek bilgileri bir master detail tablo gibi iki farklı tablo olarak olarak değerlendirmelisin. Aktif kaydın alt bilgilerini almak istiyorsan, iç datasetin bağlı olduğu tabloya direkt erişim yapacak ve dbgrid'e mi yansıtıyorsun, excel'e mi atıyorsun dilediğini yapacaksın. Bunu XML basit parse ile de yapabilirsin clientdataset ile de...

- Kurguya ilişkin kaynak sıkıntın varsa http://dn.codegear.com/article/29825 sayfası güzelce anlatmış.

- Sanırım asıl sıkıntı XML konusuna yabancı olmandan kaynaklı. ClientDataset olayına nerden ihtiyacın olduğunu ifade edebilirsen alternatifler sunabiliriz.
Resim
Resim ....Resim
Cevapla