ibx bileşenleri ile veritabanına kayıt
ibx bileşenleri ile veritabanına kayıt
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)
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)
merhaba..
Bu satırdan sonra;
IBtransaction1.Commitretaining demelisin...
Burada transactionu commit yapmamışsın...dm2.qnn.Close;
dm2.qnn.SQL.Clear;
dm2.qnn.SQL.Add(d);
dm2.qnn.Prepare;
dm2.qnn.ExecSQL;
Kod: Tümünü seç
dm2.qnn.ExecSQL;
IBtransaction1.Commitretaining demelisin...
Merhaba,
sql cümlenizin doğru olup olmadığını showmessage komutu ile kontrol edebilirsiniz.
ben insert işini aşağıdaki şekilde hallediyordum.
**** Nasıl bir hata ile de karşılaştığınızı yazmamışsınız.
İyi çalışmalar.
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;
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
İyi çalışmalar.
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.
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;
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
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
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
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..ofenX yazdı: sql cümlenizin doğru olup olmadığını showmessage komutu ile kontrol edebilirsiniz.
Kolay gelsin..
merhaba...
Bir de bu yapı çok yanlış...Şu şekilde yaparsan daha anlaşılır olur...
iyi günler...
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
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;
Merhaba,
Sql cümlenizi copy paste ile bize iletebilir misin? Mesela texti bir memo bileşenine yapıştırıp bize aktarabilirsiniz.
koda bakarsak belki nerede hata olduğunu bulabiliriz.

Ayrıca d yi string olarak tanımlamışsınız. Girdikleriniz ya 255 karakteri geçiyorsa?????
Kolay Gelsin.
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;
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.bLue aLonE yazdı: ShowMessage Kod Takibi ve Yönetimi için programcının performansını düşürür ve hantal bir yöntemdir.





Kolay Gelsin.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
cümlesini menderes arkadaşımız için yazmıştım. Şöyleki en az hali ilebLue aLonE yazdı:d'yi string tanımlama...cümlesi kime istinaden, anlayamadım
//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.
Bir de bu yapı çok yanlış...Şu şekilde yaparsan daha anlaşıl
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.
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.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
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?
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
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ibx bileşenleri ile veritabanına kayıt
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.....?
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.....?