Insert Into

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Bulut
Üye
Mesajlar: 30
Kayıt: 11 Mar 2005 03:09

Insert Into

Mesaj gönderen Bulut »

Kod: Tümünü seç

 //KURUM Tablosu oluşturuluyor.
        sorgu.Close;
        sorgu.SQL.Clear;
        sorgu.SQL.Add('CREATE TABLE "KURUM" ("SIRA" INTEGER NOT NULL,');
        sorgu.SQL.Add('"KURUMADI" VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"MUDURADI" VARCHAR(30) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"MUDURYARADI" VARCHAR(30) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"OGRETIMYILI" VARCHAR(15) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"ILILCE" VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"TELEFON" VARCHAR(15) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"FAX" VARCHAR(15) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"MAILADRESI" VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('"WEBADRESI" VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
        sorgu.SQL.Add('PRIMARY KEY ("SIRA"))');
        sorgu.Prepare;
        sorgu.ExecSQL; 
        sorgu.Close;
        sorgu.SQL.Clear;
//KURUM generator
        Try
            sorgu.Close;
            sorgu.SQL.Clear;
            sorgu.SQL.Add('CREATE GENERATOR "KURUM_GEN"');
            sorgu.Prepare;
            sorgu.ExecSQL;  
        Finally
            sorgu.Close;
        end;
//Stored Procedure oluşturuluyor autoinc field için
        try
           sorgu.Close;
           sorgu.SQL.Clear;
           sorgu.SQL.Add('CREATE PROCEDURE "SP_KURUM"');
           sorgu.SQL.Add('RETURNS');
           sorgu.SQL.Add('(');
           sorgu.SQL.Add('  "SIRA" INTEGER');
           sorgu.SQL.Add(')');
           sorgu.SQL.Add('AS');
           sorgu.SQL.Add('BEGIN');
           sorgu.SQL.Add('SIRA = GEN_ID(KURUM_GEN,1);');
           sorgu.SQL.Add('END');
           sorgu.Prepare;
           sorgu.ExecSQL;
        Finally
           sorgu.Close;
        end;    
    
Yukarıdaki kodlarla ürettiğim FireBird vt tablosunu lazarusta kullanacağım.
Formu hazırladım, navigator ile yeni kayıt eklemeye kalktığımda tablo read-only açıldı diyor. Yeni kayıt giremiyorum.
Forma bir buton ekleyip bu butonun onclick yordamına aşağıdaki kodu ekledim:

Kod: Tümünü seç

procedure Tfrkurumgir.SpeedButton2Click(Sender: TObject);
begin
  frdm.kurum.Active:=false;
  frdm.kurum.SQL.Clear;
  frdm.kurum.SQL.Add('insert into kurum(SIRA, KURUMADI, MUDURADI, MUDURYARADI, OGRETIMYILI, ILILCE,TELEFON,FAX,MAILADRESI,WEBADRESI)');
  frdm.kurum.SQL.Add('values(3, '' Ticaret'', ''Fikret Karakoç'', ''Nedim Güngören'', ''2007-2008'', ''Çanakkale/Biga'',''2863161035'',''2863170753'',''yeniticaret'',''www.yenihtml.k12.tr'')');
frdm.kurum.Open;
end;   
bu kaydı vt'nına ekledi ama kaydı yazıp programı kapattı.
Kodun sonunda close komutu veya halt gibi bir komut yok.
Lazarusta kullandığım bileşenden kaynaklanan bir durum olabilirmi?
Buradaki SIRA alanına değeri kendim verdim, yukarıdaki genarator sayıyı ne zaman üretecek, value alanına aşağıdaki kodu yazdığımda maalesef sonuç üretmedi:

Kod: Tümünü seç

  frdm.kurum.SQL.Add('values(:SIRA, :KURUMADI, :MUDURADI, :MUDURYARADI, :OGRETIMYILI, :ILILCE,:TELEFON,:FAX,:MAILADRESI,:WEBADRESI)');
not nul alana değer atanmadığı mesajını veriyor.
bu alanları ayrıca parameter komutu ile tanımlamam mı gerekiyor?

Kod: Tümünü seç

ADOQuery1.Parameters.ParamByName('edit1').Value:=Edit1.Text;
örneğinde olduğu gibi.
Bu işi şimdiye kadar lisanssız delphi ile ve paradox ile yapmıştım, ama lisans riskinden dolayı lazarus ile yapabilirmiyim diye denedim, maalesef el yordamı ile hiç bir yol alamadım. Yardımlarınız için teşekkürler...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

* insert into cümlesini ExecSQL ile çalıştırmanız lazım.
* insert into'da parametre kullanamıyorsunuz. Yani direk cümleyi oluşturmanız lazım. yani :

insert into TABLO (ID,ADI) values (:ID, :ADI) gibi yazıp, daha sonra bunları parametre ile çalıştıramıyorsunuz. Direk yazmanız lazım.

insert into TABLO (ID,ADI) values (1, 'ALİ VELİ')

gibi.

Bir de bu tarz cümleleri önce veritabanı tarafında deneyip, sonra Delphi'ye aktarın. Çok faydasını görürsünüz. Mesela Create Table cümlesi yazacaksanız önce Firebird yönetim aracınızla cümleyi çalıştırın. Tabloyu istediğiniz gibi oluşturuyorsa bu cümleyi aynen delphiye taşıyın.

Kolay gelsin.
Kullanıcı avatarı
Bulut
Üye
Mesajlar: 30
Kayıt: 11 Mar 2005 03:09

Mesaj gönderen Bulut »

Teşekkür ederim,
galiba eksiğim ExecSQL komutunu uygun yerde kullanmamışım.
Ama yine sonuç alamadım.
Sebebide SIRA alanı nut null bir alan. yukarıdaki kodlarda yazmış olduğum generator ve stored procedure nezaman çalışacak. Galiba onlar çalışmıyorlar.
Aldığım mesaj:
validation error for column SIRA value '***null***'
şeklinde.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

:ara Arama kısmından "generator" yazıp arattım. 4. mesajda karşıma insert into ile nasıl kullanacağım çıktı, Recep abi yazmış : )


viewtopic.php?t=20431&highlight=generator

Kolay gelsin.
Cevapla