firebird csv import

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
droxee
Üye
Mesajlar: 86
Kayıt: 15 May 2009 04:29

firebird csv import

Mesaj gönderen droxee »

s.a. delphi 7, firebird veritabanı, ibdataset bağlantı ve excelden firebirde aktarmam gereken bir dosyam var.
programımın içinden excel dosyasını csv olarak gride aktarabiliyorum. fakat gridden database 'e aktarımı bir türlü gerçekleştiremedim.
forumda ve hatta dtoffline da çok defa aramama rağmen bir sonuç elde edemedim.
konu ile ilgili bilgisi olan arkadaşlar yardımcı olursanız çok sevinirim. delphide yeniyim.
Kullanıcı avatarı
xozcanx
Üye
Mesajlar: 362
Kayıt: 05 Oca 2012 12:55

Re: firebird csv import

Mesaj gönderen xozcanx »

Merhaba;
Aşağıdaki linkte Excelden import etme olayından bahsedildi CSV dosyası da Excel türünde olduğundan kodlarda birkaç değişiklik ile kendinize göre düzenleyebilirsiniz. Örneği inceleyin yinede yapamazsanız izlediğiniz yolu da burada paylaşın birlikte doğru sonuc ulaşırız.

İyi Çalışmalar.

http://delphiturkiye.com/forum/viewtopi ... =2&t=32372
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: firebird csv import

Mesaj gönderen mrmarman »

droxee yazdı:s.a. delphi 7, firebird veritabanı, ibdataset bağlantı ve excelden firebirde aktarmam gereken bir dosyam var.
programımın içinden excel dosyasını csv olarak gride aktarabiliyorum. fakat gridden database 'e aktarımı bir türlü gerçekleştiremedim.
Sorunu paydalara bölelim.
(1) Excel'i bir kenara bırakalım.
(2) Firebird veritabanına herhangi bir yeni bir kayıt ekleme işlemini gerçekleştirebiliyor musunuz ? Öncelikle buna cevap bulalım.
Resim
Resim ....Resim
Kullanıcı avatarı
droxee
Üye
Mesajlar: 86
Kayıt: 15 May 2009 04:29

Re: firebird csv import

Mesaj gönderen droxee »

muharrem abi firebirde veri ekleme konusunda bir sıkıntım yok sadece gride aktardığım verileri database aktaramıyorum.
Kullanıcı avatarı
droxee
Üye
Mesajlar: 86
Kayıt: 15 May 2009 04:29

Re: firebird csv import

Mesaj gönderen droxee »

özcan paşa verdiğin linke tıklayıp baktım ve bir sonuca ulaşamadım. arama çok yaptım ve hatta offline da da aradım ama çalışan bir koda ulaşamadım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: firebird csv import

Mesaj gönderen mrmarman »

Tamam şimdi bir butona basınca gridin il satırındaki tek bir veri kümesini kaydeden kod örneği yazar mısın? Onun üzerinden örnekleyeyim

Ya da gridi boşver sabit değerler ile kayıt ekleyen bir örnek yaz buraya
Resim
Resim ....Resim
Kullanıcı avatarı
droxee
Üye
Mesajlar: 86
Kayıt: 15 May 2009 04:29

Re: firebird csv import

Mesaj gönderen droxee »

Kod: Tümünü seç

procedure Tfrm_urun.RzButton1Click(Sender: TObject);
var

EXCELDEKISATIR,EXCELDEKISUTUN:Integer;
SAYFA: Variant;
begin
 IF OpenDialog1.Execute THEN BEGIN
        EXCELDOSYASI:=CreateOleObject('excel.application');
        EXCELDOSYASI.Visible:=false;
        OpenDialog1.Filter := 'Excel Dosyaları (*.xls)|*.xls';
          TRY
          EXCELDOSYASI.workbooks.open[OpenDialog1.FileName];
          exceldebilgisayisi;
          FOR EXCELDEKISATIR:=1 to KACSATIR DO BEGIN
           DataModule_.IBDataSet_Urun.Append;
           DataModule_.IBDataSet_Urun.FieldByName('URUN_KOD').AsInteger:= exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,1].value;
           DataModule_.IBDataSet_Urun.FieldByName('TUR_KOD').AsInteger:= exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,2].Value;
           DataModule_.IBDataSet_Urun.FieldByName('SERI_NO').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,3].Value;
           DataModule_.IBDataSet_Urun.FieldByName('AD').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,4].Value;
           DataModule_.IBDataSet_Urun.FieldByName('MARKA_KOD').AsInteger:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,5].Value;
           DataModule_.IBDataSet_Urun.FieldByName('MODEL_KOD').AsInteger:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,6].Value;
           DataModule_.IBDataSet_Urun.FieldByName('BIRIM_KOD').AsInteger:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,7].Value;
           DataModule_.IBDataSet_Urun.FieldByName('KAYNAK').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,8].Value;
           DataModule_.IBDataSet_Urun.FieldByName('GARANTI').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,9].Value;
           DataModule_.IBDataSet_Urun.FieldByName('KOD').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,10].Value;
           DataModule_.IBDataSet_Urun.FieldByName('ACIKLAMA').AsString:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,11].value;
           DataModule_.IBDataSet_Urun.FieldByName('DURUM_KOD').AsInteger:=exceldosyasi.ActiveSheet.Cells[EXCELDEKISATIR,12].Value;
           DataModule_.IBDataSet_Urun.Refresh;

           END;

    FINALLY

     IF NOT VarIsEmpty(EXCELDOSYASI) THEN
     BEGIN
        EXCELDOSYASI.DisplayAlerts := False;
        EXCELDOSYASI.Quit;
        EXCELDOSYASI := Unassigned;
     END;
   END;
   ShowMessage('AKTARMA İŞLEMİ TAMAMLANDI.');
   END;

end;
bunu offliine dan bi örnekten projeme uyarlamaya çalıştım olmadı..
Kullanıcı avatarı
droxee
Üye
Mesajlar: 86
Kayıt: 15 May 2009 04:29

Re: firebird csv import

Mesaj gönderen droxee »

Kod: Tümünü seç

begin
Datamodule_.IBQuery1.Close;
Datamodule_.IBQuery1.SQL.Clear;
Datamodule_.IBQuery1.SQL.Add('INSERT INTO TBL_URUN (URUN_KOD, TUR_KOD, SERI_NO, AD, MARKA_KOD, MODEL_KOD, BIRIM_KOD, KAYNAK, GARANTI, KOD, ACIKLAMA, DURUM_KOD)');
Datamodule_.IBQuery1.SQL.Add('VALUES (:URUN_KOD, :TUR_KOD, :SERI_NO, :AD, :MARKA_KOD, :MODEL_KOD, :BIRIM_KOD, :KAYNAK, :GARANTI, :KOD, :ACIKLAMA, :DURUM_KOD)');
Datamodule_.IBQuery1.ParamByName('URUN_KOD').value:=Edit_Urun_Kod.Text;
Datamodule_.IBQuery1.ParamByName('TUR_KOD').value:=strtoint(Label_Tur_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('SERI_NO').value:=Edit_Seri_No.Text;
Datamodule_.IBQuery1.ParamByName('AD').value:=Edit_Ad.Text;
Datamodule_.IBQuery1.ParamByName('MARKA_KOD').value:=strtoint(Label_Marka_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('MODEL_KOD').value:=strtoint(Label_Model_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('BIRIM_KOD').value:=strtoint(Label_Birim_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('KAYNAK').value:=Edit_Kaynak.Text;
Datamodule_.IBQuery1.ParamByName('GARANTI').value:=Edit_Garanti.Text;
Datamodule_.IBQuery1.ParamByName('KOD').value:=Edit_Kod.Text;
Datamodule_.IBQuery1.ParamByName('ACIKLAMA').value:=Edit_Aciklama.Text;
Datamodule_.IBQuery1.ParamByName('DURUM_KOD').value:=strtoint(Label_Durum_Kod.Caption);
Datamodule_.IBQuery1.ExecSQL;
Datamodule_.IBTransaction1.CommitRetaining;
DataModule_.IBDataSet_Urun.Close;
DataModule_.IBDataSet_Urun.Open;
Edit_Urun_Kod.Clear;
Edit_Tur_Ad.Clear;
Edit_Seri_No.Clear;
Edit_Ad.Clear;
Edit_Marka_Ad.Clear;
Edit_Model_Ad.Clear;
Edit_Birim_Deger.Clear;
Edit_Birim_Tip.Clear;
Edit_Kaynak.Clear;
Edit_Garanti.Clear;
Edit_Kod.Clear;
Edit_Aciklama.Clear;
Edit_Durum_Ad.Clear;
Application.MessageBox('Yeni Kayıt Yapıldı !!!','BİLGİ',MB_OK);
btn_mlz_kaydet.Enabled:=False;
btn_mlz_iptal.Enabled:=False;
end;
abi buda kayıt ekleme butonum bunda sıkıntı yok..
Senat0r
Üye
Mesajlar: 80
Kayıt: 13 Tem 2014 09:30
Konum: Antalya

Re: firebird csv import

Mesaj gönderen Senat0r »

İhtiyaç durumunda yazmış olduğum bir koddu umarım seninde işine yarar iyi çalışmalar
https://yadi.sk/d/TLpA9GqhWvtMu
gideceği limanı bilmeyen gemiye hiçbir rüzgar yardım edemez...

Kod: Tümünü seç

Delete from hayat where cins="çıkarcılar"
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: firebird csv import

Mesaj gönderen mrmarman »

Evet şimdi yapacağın işlemi daha rahat tarif edebiliriz. ( EDIT: Yukardaki yapmaya çalıştım ama olmadı dediğin kodu geç gördüm. Telefondan takip ettim de o bakımdan... Oradaki hatan Refresh yerine POST komutu vermen gerekirdi ki veritabanına yazılsın.)

Kod: Tümünü seç

Datamodule_.IBQuery1.ParamByName('URUN_KOD').value:=Edit_Urun_Kod.Text;
Datamodule_.IBQuery1.ParamByName('TUR_KOD').value:=strtoint(Label_Tur_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('SERI_NO').value:=Edit_Seri_No.Text;
Datamodule_.IBQuery1.ParamByName('AD').value:=Edit_Ad.Text;
Datamodule_.IBQuery1.ParamByName('MARKA_KOD').value:=strtoint(Label_Marka_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('MODEL_KOD').value:=strtoint(Label_Model_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('BIRIM_KOD').value:=strtoint(Label_Birim_Kod.Caption);
Datamodule_.IBQuery1.ParamByName('KAYNAK').value:=Edit_Kaynak.Text;
Datamodule_.IBQuery1.ParamByName('GARANTI').value:=Edit_Garanti.Text;
Datamodule_.IBQuery1.ParamByName('KOD').value:=Edit_Kod.Text;
Datamodule_.IBQuery1.ParamByName('ACIKLAMA').value:=Edit_Aciklama.Text;
Datamodule_.IBQuery1.ParamByName('DURUM_KOD').value:=strtoint(Label_Durum_Kod.Caption);
şeklinde kodun var ya. Buraya öncelikle sadece Grid'in ilk (1) satırını kaydedecek şeklini yazalım.
Aşağıda bir integer değişken tanımlıyoruz. Adı iSatir olsun. (sütunları kendi düzenine göre numaralandırırsın, ben 1'den başladım sona kadar yazdım.)

Kod: Tümünü seç

Var
  iSatir : Integer;
begin
  ...
  ...
  ...
  iSatir := 1;
  Datamodule_.IBQuery1.ParamByName('URUN_KOD').value  :=StringGrid1.Cells[1, iSatir];
  Datamodule_.IBQuery1.ParamByName('TUR_KOD').value   :=strtoint(StringGrid1.Cells[2, iSatir]);
  Datamodule_.IBQuery1.ParamByName('SERI_NO').value   :=StringGrid1.Cells[3, iSatir];
  Datamodule_.IBQuery1.ParamByName('AD').value        :=StringGrid1.Cells[4, iSatir];
  Datamodule_.IBQuery1.ParamByName('MARKA_KOD').value :=strtoint(StringGrid1.Cells[5, iSatir]);
  Datamodule_.IBQuery1.ParamByName('MODEL_KOD').value :=strtoint(StringGrid1.Cells[6, iSatir]);
  Datamodule_.IBQuery1.ParamByName('BIRIM_KOD').value :=strtoint(StringGrid1.Cells[7, iSatir]);
  Datamodule_.IBQuery1.ParamByName('KAYNAK').value    :=StringGrid1.Cells[8, iSatir];
  Datamodule_.IBQuery1.ParamByName('GARANTI').value   :=StringGrid1.Cells[9, iSatir];
  Datamodule_.IBQuery1.ParamByName('KOD').value       :=StringGrid1.Cells[10, iSatir];
  Datamodule_.IBQuery1.ParamByName('ACIKLAMA').value  :=StringGrid1.Cells[11, iSatir];
  Datamodule_.IBQuery1.ParamByName('DURUM_KOD').value :=strtoint(StringGrid1.Cells[12, iSatir]);
  ...
  ...
  ...
end;
Ne görüyorsun. iSatir ne ise o satırdaki veri veritabanına kaydedilecek. Yani, iSatir 1'den başlayıp satır sayısı kadar bir döngü oluşturduğunda senin StringGrid'deki içerik veritabanına kaydedilecek demektir. Bu kadar basit.

Biraz daha ileri gidersek bu INSERT sql ifadelerini tek bir SQL katarına yükleyip tümünü bir batında da ekletebilirsin, bir defalık bir işlem ise yukarıdaki biçimi basit döngü ile kullanman bir şey kaybettirmeyecektir.
Resim
Resim ....Resim
Cevapla