ibx bileşenleri ile veritabanına kayıt

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
menderes

ibx bileşenleri ile veritabanına kayıt

Mesaj gönderen menderes »

Herkese kolay gelsin..................
Firebird e geçiş yaptım, fakat zorlanıyorum ne hikmetse,
Aşağıdaki işlemleri ADO bileşenlerini kullanarak yaptım, çalışıyor....
IBX bileşenlerini kullanayım dedim bir türlü veritabanına kayıt olayını gerçekleştiremedim.
Şirket kayıtı yapılacak önce kayıt kontrolünü yapıyoruz...

Not:dm2.qnn =(ibquery)
procedure Tsirketler.SpeedButton7Click(Sender: TObject);
var
c,d,e,f:string;
s1,s2:string;
OpStruc: TSHFileOpStruct;
frombuf, tobuf: Array [0..128] of Char;
begin
if (Trim(Edit2.Text)<>'') and (Trim(Edit3.Text)<>'') then
begin
dm2.IBTransaction1.Active:=True;
Edit2.SetFocus;
dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add('select * from SIRKETS');
dm2.qnn.SQL.Add('where KOD=:kodi and AD=:adi');
dm2.qnn.ParamByName('kodi').AsString:=Edit2.Text;
dm2.qnn.ParamByName('adi').AsString:=Edit3.Text;
//dm2.qnn.SQL.Add('where KOD="'+Edit2.Text+'" and AD="'+Edit3.Text+'"');
dm2.qnn.Prepare;
dm2.qnn.Open;
if not dm2.qnn.IsEmpty then
begin
ShowMessage('Yazılı şirket daha önceden kayıtlı');
Edit2.SetFocus;
Abort;
end

else <br>
// aynı kayıttan yoksa veritabanı dosyasını yeni bir klasör açarak (şirket kodu ile Edit2.text ' yazılan kelime ile) veritabanını o klasöre kopyalıyoruz. Şirketin kullanımına hazır. begin
e:='.txt';
Edit16.Text:='C:\haystok\data\STOK.FDB'; //kopyalanacak dosya
Edit18.Text:='C:\haystok\'+Trim(Edit2.Text)+''; // hedef klasör
s1:=Edit16.Text+'*.*';
s2:=Edit18.Text;
ForceDirectories(s2);
fillChar( OpStruc, Sizeof(OpStruc), 0 );
FillChar( frombuf, Sizeof(frombuf), 0 );
FillChar( tobuf, Sizeof(tobuf), 0 );
StrPCopy( frombuf, s1 );
StrPCopy( tobuf, s2 );
With OpStruc DO Begin
Wnd:= Handle;
wFunc:= FO_COPY;
pFrom:= @frombuf;
pTo:=@tobuf;
fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
end;
ShFileOperation( OpStruc );
Edit17.Text:='C:\mystok\'+Trim(Edit2.Text)+'\STOK.FDB';

Memo1.Lines.Add('C:\myhaystok\'+Trim(Edit2.Text)+'\STOK.FDB');
Memo1.Lines.SaveToFile('C:\myhaystok\'+Trim(Edit2.Text)+e);
// Memo1 ' yeni veritabanı yolunu alıyor ve yeni verilen isimle txt dosyası oluşturuyoruz. Bu işlem veritabanına dışarıdan müdahale için bağlantılarda ............
Şimdi soruma geleyim;
Ben ne hikmetse forumu günlerdir inceliyorum belki bayadır. Çok bilgilendim, en azından firebird hoşuma gitti.
IBQuery, IBDataset, IBSQL bunlara bir türlü şu şirketi veritabanına kayıt edemedim....

d:='insert into SIRKETS(KOD,AD,TEL,TEL1,FAX,ADRES,ILCE,IL,PKOD,';
d:=d+'ULKE,WEB,EMAIL,VD,VN,dosya)Values("';
d:=d+Trim(Edit2.Text)+'","'; //KOD
d:=d+Trim(Edit3.Text)+'","'; //ŞİRKET ADI
d:=d+Edit4.Text+'","'; //TEL
d:=d+Edit5.Text+'","'; //TEL1
d:=d+Edit6.Text+'","'; //FAX
d:=d+Edit7.Text+'","'; //ADRES
d:=d+Edit8.Text+'","'; //ILCE
d:=d+Edit9.Text+'","'; //IL
d:=d+Edit10.Text+'","'; //PKOD
d:=d+Edit11.Text+'","'; //ULKE
d:=d+Edit12.Text+'","'; //WEB
d:=d+Edit13.Text+'","'; //EMAIL
d:=d+Edit14.Text+'","'; //VD
d:=d+Edit15.Text+'","'; //VN
d:=d+Edit17.Text+'")'; //dosya

dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add(d);
dm2.qnn.Prepare;
dm2.qnn.ExecSQL;

end;
end
else
begin
ShowMessage('Şirket kodu ve Şirket Adı Mutlaka Yazılması gereklidir.');
end;
end;

Şirket kayıdını nasıl yaparım. bu ibx bileşenleri ile........?
Lütfen Acil olarak bekliyorum,,,,, (Genel örnek olmasın lütfen)
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba..
dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add(d);
dm2.qnn.Prepare;
dm2.qnn.ExecSQL;
Burada transactionu commit yapmamışsın...

Kod: Tümünü seç

dm2.qnn.ExecSQL;
Bu satırdan sonra;
IBtransaction1.Commitretaining demelisin...
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,

Kod: Tümünü seç

 dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add(d);
showmessage(dm2.qnn.sql.text);
dm2.qnn.Prepare;
dm2.qnn.ExecSQL; 
sql cümlenizin doğru olup olmadığını showmessage komutu ile kontrol edebilirsiniz.
ben insert işini aşağıdaki şekilde hallediyordum.

Kod: Tümünü seç

 dm1.IBDatabase1.Connected:=False;

//showmessage(dosya_yolu);

dm1.IBDatabase1.DatabaseName:=dosya_yolu;
        dm1.IBDatabase1.Params.Values['User_Name']:='SYSDBA';
        dm1.IBDatabase1.Params.Values['PassWord']:='masterkey';
        dm1.IBDatabase1.Params.Values['lc_ctype']:='WIN1254';

                  //Database Connect ediliyor
                 dm1.IBDatabase1.Connected:=True;

dm1.IB_clients.Active:=true;
dm1.IB_firma.Active:=true;
dm1.IB_hareket.Active:=true;
dm1.IB_belgetur.Active:=true;
dm1.IB_vd.Active:=true;
dm1.IB_semtler.Active:=true;
dm1.IB_iller.Active:=true;
DM1.Ibq_seritop.Active:=true;

// ************************* sabitlerin eklenmesi
//   ********  İLK DEFA KULLANILACAK DOSYAYA VERİ EKLENMESİ
     if yeni_dosya then
       begin

                  for i:=0 to 80  do       // *** illerin eklenmesi
                         begin
                                  dm1.IB_iller.Insert;
                                   dm1.IB_iller.FieldByName('il_adi').asstring:=listbox1.items[i];
                                    dm1.IB_iller.Post;

                         end;

                     for i:=81 to 94  do   // *** belge türlerinin eklenmesi
                         begin
                                  dm1.IB_belgetur.Insert;
                                   // showmessage(listbox1.items[i]);
                                   dm1.IB_belgetur.FieldByName('belge_turu').asstring:=listbox1.items[i];
                                  dm1.IB_belgetur.FieldByName('seri').asstring:='A';
                                  dm1.IB_belgetur.FieldByName('seri_no').AsVariant:=0;



                                    dm1.IB_belgetur.Post;
                                    dm1.IBTransaction4.CommitRetaining;


                         end;



              dm1.ib_firma.Insert;
                  dm1.IB_firma.FieldByName('frkayit_no').AsInteger:=1;
                  dm1.IB_firma.FieldByName('isim').Asstring:='*';
                     dm1.IB_firma.FieldByName('vd_id').AsInteger:=0;
                     dm1.IB_firma.FieldByName('a_deft_id').AsInteger:=0;
                     dm1.IB_firma.FieldByName('tes_ed_isim').Asstring:='*';
                //      dm1.IB_firma.FieldByName('semt').AsString:='';
                 //    dm1.IB_firma.FieldByName('ili').AsString:='diyarbakır';

                  dm1.IB_firma.Post;



               dm1.ib_vd.Insert;
               dm1.IB_vd.FieldByName('ismi').Asstring:='Varsayılan';
               dm1.ib_vd.Post;

               dm1.ib_semtler.Insert;
               dm1.IB_semtler.FieldByName('semt_adi').Asstring:='Varsayılan';
               dm1.ib_semtler.Post;


       end;  //   if yeni_dosya then

**** Nasıl bir hata ile de karşılaştığınızı yazmamışsınız.

İyi çalışmalar.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Dosya oluşturma işini de copy ile değil aşağıdaki şekilde hallediyorum.
Programım ilk açıldığında çalışma yılı çıkıyor. Her bir yıla bir dosya oluşturuyorum. Girilen yıla ait dosya yoksa aşağıdaki kodla oluşturuyorum.

Kod: Tümünü seç


procedure tf_yilgiris.dosya_olustur;

    begin


 dm1.IBDatabase1.Connected:=false;

       //Database ayarlanıyor
      dm1.IBDatabase2.DataBaseName:=dosya_yolu;
      dm1.IBDatabase2.SQLDialect:=3;
             dm1.IBDatabase2.LoginPrompt := false;


         //Database Oluşturuluyor
         dm1.IBDatabase2.CreateDatabase;
        dm1.IBDatabase2.Connected:=False;


        dm1.IBDatabase2.Params.Values['User_Name']:='SYSDBA';
        dm1.IBDatabase2.Params.Values['PassWord']:='masterkey';
        dm1.IBDatabase2.Params.Values['lc_ctype']:='WIN1254';
                                  //Database Connect ediliyor
                                  dm1.IBDatabase2.Connected:=True;
                                  //Transaction Active ediliyor..
                                  dm1.IbTransaction7.Active:=True;


//  ***************  CLIENTS  TABLE I
       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;


    dm1.ibsql1.SQL.Add('CREATE TABLE CLIENTS (');
    dm1.ibsql1.SQL.Add('CLKAYIT_NO      INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('KODU          VARCHAR(20) NOT NULL  COLLATE PXW_TURK,');

    dm1.ibsql1.SQL.Add('ISIM          VARCHAR(50) NOT NULL  COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('OZEL_KODU     VARCHAR(20) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('ADRES         VARCHAR(60) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SEMT          VARCHAR(25) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('ILI           VARCHAR(25) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('TESLIM_ALAN  VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('FAALIYET      VARCHAR(50) CHARACTER SET WIN1254 COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('VD_MASTER   INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('VERGI_NOSU    VARCHAR(14),');
    dm1.ibsql1.SQL.Add('PRIMARY KEY (CLKAYIT_NO))');

    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;

// ************ FIRMA TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;



    dm1.ibsql1.SQL.Add('CREATE TABLE FIRMA (');
    dm1.ibsql1.SQL.Add('FRKAYIT_NO        INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('ISIM            VARCHAR(50) NOT NULL COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('ADRES           VARCHAR(60) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SEMT            VARCHAR(25) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('ILI             VARCHAR(25) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('VD_ID           INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('VERGI_NO        VARCHAR(14),');
    dm1.ibsql1.SQL.Add('A_DEFT_ID       INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('A_TARIH         DATE,');
    dm1.ibsql1.SQL.Add('A_SAYI          VARCHAR(10),');
    dm1.ibsql1.SQL.Add('A_BASLAMA       DATE,');
    dm1.ibsql1.SQL.Add('A_BITIS         DATE,');
    dm1.ibsql1.SQL.Add('TES_ED_ISIM    VARCHAR(50) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('PRIMARY KEY (FRKAYIT_NO))');




    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;







// ************ BELGE HAREKET TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;

    dm1.ibsql1.SQL.Add('CREATE TABLE BELGE_HAREKET (');
    dm1.ibsql1.SQL.Add('HRKAYIT_NO        INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('MAST_KODU       INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('KAYIT_TARIHI    DATE,');
    dm1.ibsql1.SQL.Add('CINSI           VARCHAR(70) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SERISI          VARCHAR(4) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SERI_NOSU       DOUBLE PRECISION,');
    dm1.ibsql1.SQL.Add('MIKTARI         INTEGER,');
    dm1.ibsql1.SQL.Add('VERILIS_TARIHI  DATE,');
    dm1.ibsql1.SQL.Add('TES_ALAN        VARCHAR(50) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('MVD_ID          INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('TES_EDEN        VARCHAR(50) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('TES_ED_TARIHI   DATE,');
    dm1.ibsql1.SQL.Add('PRIMARY KEY (HRKAYIT_NO))');

    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;







// ************ SEMTLER  TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;


    dm1.ibsql1.SQL.Add('CREATE TABLE SEMTLER (');
    dm1.ibsql1.SQL.Add('SMKAYIT_NO  INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('SEMT_ADI  VARCHAR(25) COLLATE PXW_TURK)');


    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;







//*********** ILLER   TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;


    dm1.ibsql1.SQL.Add('CREATE TABLE ILLER (');
    dm1.ibsql1.SQL.Add('ILKAYIT_NO  INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('IL_ADI  VARCHAR(25) COLLATE PXW_TURK)');


    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;









//*********** belge tur   TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;


    dm1.ibsql1.SQL.Add('CREATE TABLE BELGE_TUR (');
    dm1.ibsql1.SQL.Add('BTKAYIT_NO      INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('BELGE_TURU      VARCHAR(25) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SERI            VARCHAR(4) COLLATE PXW_TURK,');
    dm1.ibsql1.SQL.Add('SERI_NO         DOUBLE PRECISION )');
    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..



    Finally
    dm1.ibsql1.Close;
   end;









//*********** belge VERGI_DAIRE    TABLE I

       Try
       dm1.ibsql1.Close;
       dm1.ibsql1.SQL.Clear;


    dm1.ibsql1.SQL.Add('CREATE TABLE VERGI_DAIRE (');
    dm1.ibsql1.SQL.Add('VDKAYIT_NO  INTEGER NOT NULL,');
    dm1.ibsql1.SQL.Add('ISMI VARCHAR(25) NOT NULL COLLATE PXW_TURK)');

    dm1.ibsql1.Prepare;
    dm1.ibsql1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..




    Finally
    dm1.ibsql1.Close;
   end;

            //Generator oluşturuluyor
Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_BELGE_HAREKET_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;

Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_BELGE_TUR_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;


Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_CLIENTS_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;

Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_FIRMA_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;
Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_ILLER_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;


Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_SEMTLER_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;

Try
dm1.IBSQL1.Close;
dm1.IBSQL1.SQL.Clear;
dm1.IBSQL1.SQL.Add('CREATE GENERATOR GEN_VERGI_DAIRE_ID');
dm1.IBSQL1.Prepare;
dm1.IBSQL1.ExecQuery; //IBQuery kullanıyorsanız ExecQuery yerine ExecSQL yazacaksınız..
Finally
dm1.IBSQL1.Close;
end;

// SHOWMESSAGE ('dosya oluşturma işi bitti çıkacaz ');


dm1.IBDatabase2.Connected:=false;
dm1.IBTransaction7.Active:=false;

menderes

Mesaj gönderen menderes »

ilgine ve alakana teşkkür ederim. Benim sorunum veritabanı ve table oluşturmak değil.
Yukarıdaki örnekte; d stringine insert sql oluşturdum. Bu insert için valuesleri de edit.text lerden alıyorum.
burada dinamic sql error diye hata alıyorum. -206 yazıyor birde.
sql çalışmıyor yani....
commit yazmayı unutmuşum oraya normalde commit ediyorum.....
tekrar teşekkür ederim
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

ofenX yazdı: sql cümlenizin doğru olup olmadığını showmessage komutu ile kontrol edebilirsiniz.
ShowMessage Kod Takibi ve Yönetimi için programcının performansını düşürür ve hantal bir yöntemdir..Bunun yerine Break Point kuyarak Delphi'nin bu bağlamdaki nimetlerinden herhangi birini kullanmanın daha seri bir yöntem olacağı görüşündeyim..

Kolay gelsin..
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba...

Kod: Tümünü seç

d:='insert into SIRKETS(KOD,AD,TEL,TEL1,FAX,ADRES,ILCE,IL,PKOD,';
d:=d+'ULKE,WEB,EMAIL,VD,VN,dosya)Values("';
d:=d+Trim(Edit2.Text)+'","'; //KOD
d:=d+Trim(Edit3.Text)+'","'; //ŞİRKET ADI
d:=d+Edit4.Text+'","'; //TEL
d:=d+Edit5.Text+'","'; //TEL1
d:=d+Edit6.Text+'","'; //FAX
d:=d+Edit7.Text+'","'; //ADRES
d:=d+Edit8.Text+'","'; //ILCE
d:=d+Edit9.Text+'","'; //IL
d:=d+Edit10.Text+'","'; //PKOD
d:=d+Edit11.Text+'","'; //ULKE
d:=d+Edit12.Text+'","'; //WEB
d:=d+Edit13.Text+'","'; //EMAIL
d:=d+Edit14.Text+'","'; //VD
d:=d+Edit15.Text+'","'; //VN
d:=d+Edit17.Text+'")'; //dosya 
Bir de bu yapı çok yanlış...Şu şekilde yaparsan daha anlaşılır olur...

Kod: Tümünü seç

      try
        with IBQuery1 do
        begin
          SQL.Clear;
          SQL.Add('insert into SIRKETS');
          SQL.Add('(KOD,AD,TEL,TEL1,FAX,ADRES,ILCE,IL,PKOD,ULKE,WEB,EMAIL,VD,VN,DOSYA)');
          SQL.Add('values');
          SQL.Add('(:KOD,:AD,:TEL,:TEL1,:FAX,:ADRES,:ILCE,:IL,:PKOD,:ULKE,:WEB,:EMAIL,:VD,:VN,:DOSYA)');

          ParamByName('KOD').AsString := Edit1.Text;
          ParamByName('AD').AsString := Edit2.Text;
          ParamByName('TEL1').AsString := Edit3.Text;
          ParamByName('TEL2').AsString := Edit4.Text;
        //------------------
        //------parametre sayısı kadar------------
          Close;
          Prepare;
          ExecSQL;
          IBTransaction1.CommitRetaining;
        end;
      except
        IBTransaction1.RollbackRetaining;
        Exit;
      end;
iyi günler...
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Sql cümlenizi copy paste ile bize iletebilir misin? Mesela texti bir memo bileşenine yapıştırıp bize aktarabilirsiniz.

Kod: Tümünü seç

 dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add(d);

memo1.Lines.Clear;
memo1.lines.add(dm2.qnn.sql.text);

dm2.qnn.Prepare;
dm2.qnn.ExecSQL; 


koda bakarsak belki nerede hata olduğunu bulabiliriz.
bLue aLonE yazdı: ShowMessage Kod Takibi ve Yönetimi için programcının performansını düşürür ve hantal bir yöntemdir.
Bu showmessage programda sürekli kalan bir şey değil istediğim değeri gördükten sonra o satırı siliyorum. Bana watch eklemekten daha kolay geliyor. :lol:
:!: :!: :!: :!: Ayrıca d yi string olarak tanımlamışsınız. Girdikleriniz ya 255 karakteri geçiyorsa?????

Kolay Gelsin.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Ben de onun için söylemiştim..d'yi string tanımlama...cümlesi kime istinaden, anlayamadım :)
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

bLue aLonE yazdı:d'yi string tanımlama...cümlesi kime istinaden, anlayamadım :)
cümlesini menderes arkadaşımız için yazmıştım. Şöyleki en az hali ile
//KOD 10
//ŞİRKET ADI 30
//TEL 7
//TEL1 7
//FAX 7
//ADRES 30
//ILCE 10
//IL 10
//PKOD 5
//ULKE 10
//WEB 20
//EMAIL 20
//VD 15
//VN 9
//dosya 20 karakterden oluşursa

210 karakter şu an doluyor. Ki yukarıdaki değerler mutlaka daha fazladır.
O yüzden sql in textini verirse menderes arkadaşımız daha iyi bir sonuç alırız.
menderes

Bir de bu yapı çok yanlış...Şu şekilde yaparsan daha anlaşıl

Mesaj gönderen menderes »

Hepinize çok teşekkür ederim. Öyle iyisinizki.
yukarıda demiştimki ben daha önce ado bileşnelri ile çalışıyordum, firebirde yeni geçtim. access yetersiz kaldığı için.
orada bu yazdığım kod harika bir şekilde çalışıyordu. Ve veritabanına işim olduğu zaman bağlanıyorum işim olmadığı zamanda veritabanı kapalı kalıyordu. bu benim ado ile çalışırken prensibimdi. Yine DBEdit.text ler veritabanına direk bağlı kalıyorlar. buda ağda başka bilgisayar varken trafiği artırır ve başka sorunlarda olur.
Sadece bu olayın ibx bileşenleri ile nasıl olacağını sormuştum. Anladımki parametreli sorgulama olacak.

Amacım ibx bileşenlerini kullanarak veritabanına kayıt etmek.
string tanımlama bir örnekti olabilirde olmayabilirde önemli olan ibx bileşenlerini kullanarak en uygun olarak veritabanına nasıl kayıt edilir.
genelde örnekler edit.text gibi bileşenler kullanılmadan veriliyor.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba bu sorunuzun cevabı olarak çok kısa ve özetle

kayıtların vt ye aktarılması hususu, daha önce access kullandığınız için belki böyle bir yapı ile çalışmadınız. ancak fb gibi server yapıdaki vt lere kaydı yazmak için commit komutunu vermeniz lazım. tabi bunu yapmadan transactionda vt ye yazılacak bilginin de bulunması gerekli. öncelikle IBTable1.Post veya IBQuery1.Post veya IBDataset1.Post işlemlerinden sonra Transactiondaki bilgiyi Commit ile vt ye yazar Rollback ile de Transactiondaki bilgiyi boşaltıp vt e yazmaztan vazgeçersiniz.

kaydedilsinmi?

Kod: Tümünü seç

Evet ise 
Begin
IBQuery1.Post;
IBTransaction1.Commitretaining;

Hayır ise
Begin 
IBTransaction1.Rollbackretaining; 
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
menderes

ibx bileşenleri ile veritabanına kayıt

Mesaj gönderen menderes »

Tüm arkadaşlara teşekkür ederim sayenizde IBX bileşenlerinde bayağı ilerledim. Bu foruma katkısı olan tüm arkadaşlardan ALLAH razı olsun.....
Bileşenlerden IBQuery ile şöyle bir çalışmam oldu.
Database ve transaction ların açık olması gerekiyor. Bunları unutmamak için IBQuery i açmadan önce bunları kontrol ediyorum....
procedure Tdm.KULBeforeOpen(DataSet: TDataSet);
begin
if not IBDatabase1.Connected=True then
IBDatabase1.Connected:=True;
if IBTransaction1.Active=False then
IBTransaction1.Active:=True;
end;

Daha sonra kayıt işleminden sonra (post) afterpost olayına aşağıdaki gibi bir kod yazdım........
procedure Tdm.KULAfterPost(DataSet: TDataSet);
begin
KUL.ApplyUpdates;
IBTransaction1.CommitRetaining;
end;


Veritabanına kayıt edecek işlem için aşağıdaki gibi parametreli olarak ancak çalıştırabildim.....
Kaydet Butonuna aşağıdaki kodu yazdım....
dm.KUL.Close;
dm.KUL.SQL.Clear;
dm.KUL.SQL.Add('insert into NEW_TABLE');
dm.KUL.SQL.Add('(UID,LOGIN,SIFRE,ADSOYAD)');
dm.KUL.SQL.Add('values(:UID,:logi,:sifi,:adi)');
dm.KUL.ParamByName('UID').AsInteger:=1; // ARTAN ALAN OLMADIĞI İÇİN İNDEX ALANA SAYI GİRİLMESİ LAZIM
dm.KUL.ParamByName('logi').AsString:=Trim(Edit19.Text);
dm.KUL.ParamByName('sifi').AsString:=Trim(Edit20.Text);
dm.KUL.ParamByName('adi').AsString:=Trim(Edit18.Text);
dm.KUL.Prepare;
dm.KUL.ExecSQL;
dm.IBTransaction1.Commit;

update işlemi için ise aşağıdaki gibi bir kod yazdım...
dm.KUL.Close;
dm.KUL.SQL.Clear;
dm.KUL.SQL.Add('update NEW_TABLE set LOGIN=:logi,SIFRE=:sifi,ADSOYAD=:XAD');

dm.KUL.ParamByName('logi').AsString:=Edit19.Text;
dm.KUL.ParamByName('sifi').AsString:=Edit20.Text;
dm.KUL.ParamByName('XAD').AsString:=Edit18.Text;
dm.KUL.SQL.Add('where UID='+Edit22.Text+'');
dm.KUL.Prepared:=True;
dm.KUL.ExecSQL;

----------------
SORU :Burada dikkat edilirse post işlemi yok execSQL var; Burada
IBTransaction1.Commit; daha önce afterpost olayına yazmıştık, buraya da yazmak lazım gerekiyormu....veya execSQL komutlarında transaction işlemleri için hep sonuna mı yazmak gerekir.
Yine yukarıdaki insert işleminde generatörü kullanamadım. Başka bir table oluşturup sayıyı ordan alıyorum. Generatör tanımlamıştım ama burada kullanamadım....Nasıl kullanabilirim....
Herkese tekrar teşekkür ederim......
Birde aynı işlemi IBDataset le nasıl yaparım.....?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sn. @menderes kodlarınızı [ code ] [ /code ] tag'ları arasına yazarsanız mesajınız ve sorunuz daha okunaklı olacaktır :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla