Arşiv Anasayfa Firebird / Interbase
Sayfalar: 1
Delphi le Veritabanına Giriş Gönderen: Fatih Tarih: 09 October 2005 16:58:08
Bu makalenin amacı Delphi İle Veritabanına ilk defa adım atacaklar için hazırlanmıştır. Böylece bu alanda da büyük bir eksikliği gidermiş olacağız. Uygulamayı Delphi 2005 ve Firebird kullanarak yapıyorum. Delphi 7 ile aralarında pek bir fark bulunmuyor.

Aşağıdaki gibi bir tablo ve Generators oluşturuyoruz. IDNO alanını Primary Key olarak tanımlayın. IDNO alanını sadece bize kolaylık sağlaması için oluşturduğumuz için tanımladığımız Generatorla Değerini otomatik olarak artan bir sayı vererek bir arttıracağız. Veritabanı tarafını daha önce anlattığım için ayrıntıya girmeden geçiyorum.



Aşağıdaki Görüntüde ise Delphide programımızın tasarım görüntüsü var. Delphide Veritanına bağlanmak için Component Paletten Interbase sekmesinde  IBDatabase, IBTransaction, IBDataset ve Data Access sekmesinde bulunan DataSource  formunuza birer tane ekleyin. Bu bileşenleri daha önce ayrıntısıyla işlemiştik ancak yinede kısaca anlatacağım. Anlatırken yapılacak ayarları da belirteceğim.

IBTransaction
veritabanına kayıtların anında yansıtılıp yansıtılmayacağınızı belirlemenizi sağlar. Bu bileşeni çift tıklayarak karşınıza çıkan pencereden “Read Committed” kutucuğunu işaretleyin.

Object Inspectordan DefaultDatabase özelliğine forma eklediğiniz IBDatabase bileşenini gösterin. Bu kayıtların hangi veritabanına yazılacağını gösterir.

IBDatabase

Sanırım yukarıdaki anlattığımla Veritabanına bağlantıyı sağlayan bileşen olduğunu anlamışsınızdır. Bu bileşeni de seçip Object Inspectordan DefaultTransaction özelliğine forma eklediğiniz IBTransaction bileşenini gösterin. Böylece IBTransaction ile IBDatabase ile ilişkiyi kurmuş oluyoruz. IBdatabaseye çift tıklayarak Veritabanına bağlıntıyı sağlayacak diğer ayarları yapıyoruz.IBDatabaseyi çift tıkladığınızda karşınıza çıkacak pencereden.

Local kutucuğunu işaretleyin.Database bölümüne veritabanı yolunu ve adını yazın. Örneğin “C:\My Doc\Projelerim\Deneme\DATAM.FDB” gibi. “User Name”ye Kullanıcı adını “Password”a şifrenizi yazın. Değiştirmediyseniz kullanıcı adı: “SYSDBA” şifre: “masterkey”dir. “Character Set”e Türkçe için “WIN1254” Seçin  ve son olarak “Login Prompt” kutucuğunun işaretini kaldırarak “Ok”leyin. Her şeyi doğru yaptıysanız Object Inspectordan Connected özelliğini True yaparak Veritabanıyla bağlantıyı gerçekleştirmiş olursunuz.

IBDataset

Yukarıdaki bileşenlerle veritabanına bağlandık ancak herhangi bir tablo listelemedik. İşte  bu bileşende tabloları seçmek ve üzerinde işlemler yapmak için vardır. Bu bileşenin Database ve Transaction özelliklerine forma eklediğiniz IBKDatabase ve IBTransaction bileşenlerini gösterin. Bu işlem tabloyu hangi veritabanından çekeceğimizi gösterir. Daha sonra Yine Object Inspectordan “SelectSql” özelliğine tıklıyoruz. Karşımıza çıka pencereden tablomuzu listeletecek SQL cümlesini yazıyoruz.

:
select * from TBL_REHBER


tabloyu listeleyecek kodu oluşturduk. Şimdide kayıt silecek,üncelleyecek vs.. işlemleri yapacak SQL Cümlelerini oluşturalım.. bunu yapmanın en kolay yolu IBDataset bileşenini sağ tıklayıp çıkan menüden “Dataset Editor” seçeneğini tıklamak. Karşınıza çıkan pencereden öncelikle  “Get Table Fields” buttonuna tıklayın. “Key Fields” ve Update Fields” Listesindeki tüm alanlar seçilecektir. “update fields” güncellenecek alanları gösterirken “key fields” işlem yapılırken işlemin hangi şartlara göre yapılacağını gösterir. Key fields bölümünde tümünü seçmek yerine sadece IDNO alanını seçili bırakıyoruz.  Örneğin key fields kısmında hepsi seçiliyken silme sorgusu şöyle olabilirdi

:
delete from tablo where alan1=deger and alan2=deger….
gibi

halbuki bizim bir primary keye sahip alanımız var ve primary keyli alan farklı değerler içeremez. Bu sebeple extra şartlar eklememiz hem sadeliğin bozulmasına hem de yavaşlamaya sebep olur. Aşağıda ki gibi kodumuz kısalmış olacaktır. Ve primary keyin önemini de anlamış oluyoruz.

:
delete from tablo where primaryalan=deger


Primary Keye sahip alanımızın otomatik artması için IBDataseti seçip Object inspectordan GeneratorField'e tıklayın. Generator bölümünden Generatorunuzu Field bölümünfden otomatik artacak alanı Increment By kısmına kaçar kaçar artacağıını yazdıktan sonra On Post kutucuğunu Seçip OK leyin.

Son olarak Active özelliğini True  yapın. Böylece kayıtları listelemiş olacağız.

DataSource

Bu bileşen kayıtları IBDatasetten alarak DataControls sekmesinde bulunan bileşenlere aktarır. Bir nevi köprü vazifesi görür.Köprünün kurulması için DataSource bieşeninin Dataset özelliğine forma eklediğimiz  IBDataaset bileşenini gösteriyoruz.

Tasarımı aşağıdaki şekilde oluşturuyoruz. Resimde DataControls sekmesinde bulunan bileşenlerin isimlerini üzerlerine yazdım



dbtext > verileri bir label şeklinde gösterir. İçindeki  veriyi değiştiremezsiniz. Dbgrid hariç resimdeki tüm Datacontrols bileşenleri bir  alanın değerini gösterirler. Bütün DataControls bileşenlerinin DataSource özelliği vardır. Bu özelliğe forma eklediğimiz DataSource bileşenini gösteriyoruz. DataField özelliklerine ise hangi alandaki verilerin gösterilmesini istiyorsanız o alanı gösterin. Biz kayırt tarihini o anki tarih olarak ayarlayacağımız için DataField özelliğine “KAYIT_TARIHI” alanımızı gösterdik. Aynı şekilde dbeditleri,dbmemo ve dbimage bileşenlerinin Datasource ve DataField özelliklerini ayarlayın. Diğer standart bileşenler gibi olduğu için ayrınt4ıya girmiyorum..

dbgridin DataSorce özelliğini gösterdiğinizde tüm alanları listelediğini göreceksiniz. Oysa resimde üç alan görünüyor. Dbgridi özelleştirip istediğimiz alanları listelemesi için dbgridi çift tıklayın. Karşınıza aşağıdaki gibi bir pencere gelecek.



Alan Ekleye tıklayarak dbgide yeni bir alan ekleyebilirsiniz. Eklediğiniz Alanı seçip Object Insspectordan Hangi alan için eklendiğini göstermek için “FieldName” özelliğine bağlanılacak alanı seçin. Alan isimler EMAIL vb. şekilde görünecektir. Siz bunu E-Mail şeklinde göstermek isterseniz yine alan seçiliyken title özelliğindeki Caption özelliğine E-Mail yazmanız yeterli. Böylece tıpkı resimdeki görüntüyü elde edebilirsiniz.

Gelelim kayıtlar arasında dolaşmaya. Button isimlerinden hangi buttona hangi kodu yazdığımı ve işlevlerini anlayabilirsiniz.

:
procedure TForm1.ilkKayitClick(Sender: TObject);

begin

 if not IBDataset1.Bof Then //İlk Kayıtta Değilse

IBDataset1.First;

end;



procedure TForm1.OncekiKayitClick(Sender: TObject);

begin

 if not IBDataset1.Bof Then //İlk Kayıtta Değilse

IBDataset1.Prior;

end;



procedure TForm1.mClick(Sender: TObject);

begin

if not IBDataset1.Eof Then //Son Kayıtta Değilse

IBDataset1.Next;

end;



procedure TForm1.SonKayitClick(Sender: TObject);

begin

if not IBDataset1.Eof Then //Son Kayıtta Değilse

IBDataset1.Last;

end;0



procedure TForm1.KayitEkleClick(Sender: TObject);

begin

IBDataset1.insert;

DbEdit1.setfocus; // Tablonun İlk Alanına Bağlı Bileşenge Kursörü Bırakıyoruz.

end;



procedure TForm1.KaydiSilClick(Sender: TObject);

Begin

if IBDataset1.RecordCount>0 then //Kayıt varsa

IBDataset1.delete;

end;    



procedure TForm1.KaydiDuzenleClick(Sender: TObject);

begin

IBDataset1.Edit;

end;



procedure TForm1.iptalClick(Sender: TObject);

begin

IBDataset1.Cancel;

end;



procedure TForm1.KaydetClick(Sender: TObject);

begin

IBDataset1.Post;

end;



procedure TForm1.YenileClick(Sender: TObject);

begin

 IBDataset1.Refresh;

end;


 IBDataset1: forma  eklediğimiz ibdatasettir.kayıtlar arasında dolaşırken EOF ve BOF komutlarıyla tablonun sonunda veya başında olup olmadığımızı kontrol ediyoruz. İlk kayıttayken ilk kayda git diye bir komut kullanırsak doğal olarak hata verecektir. Daha sonraki komut ise buttonun görevini yerine getiriyor.

Silme burttonunda ise önce tabloda kayıt olup olmadığı kontrol ediliyor. En az kayıt varsa kaydı siliyor. Kaydı silmek için IBDatasete yazdığımız SQL Cümlesini çalıştırıyor.. Resimde eklemeyi unuttuğum Kaydet buttonunu ekleyin. Kodları yazarken farkına vardım.

Kaydı sildiğinizde, kayıt eklediğinizde, kaydı güncellediğinizde değişikliğin anında veritabanına yansıtılmadığını göreceksiniz.

değişikliğin hemen veritabanına yansıması için forma eklediğimiz IBTransactiona değişikliği hemen veritabanına yansıtmasını söylemeliyiz.

Bunun için kayıt eklendikten ve silindikten sonra bu komutu vermeliyiz. Kayıt silindiğin de IBDatasetin AfterDelete(Sildikten sonra) ve AfterPost(kayıt eklendikten veya güncellendikten sonra) meydana gelen olaylarına aşağıdaki kodu yazmalıyız.

:
procedure TForm1.IBDataSet1AfterPost(DataSet: TDataSet);

begin

 IBTransaction1.CommitRetaining;

end;


şimdi de kayıt tarihi alanımıza kayıt ekle buttonuna basılır basılmaz günün tarihini bu alana atayalım. Bunun için IBDatasetin  kayıt eklenirken meydana gelen OnNewRecord olayına kodu yazıyoruz.

:


procedure TForm1.IBDataSet1NewRecord(DataSet: TDataSet);

begin

IBDataSet1.FieldByName('KAYIT_TARIHI').Value:=Date;

end;


Date sizinde bildiğiniz gibi şuan ki tarihi vermektedir.  KAYIT_TARIHI yerine istediğiniz alan ismini yazarak o alana atama yapabilirsiniz.

Şimdide kayıt silineceği zaman kullanıcıya emin misiniz diye soralım. Emin değilse silme işlemini iptal edelim.

Bunun için IBDatasetin kayıt silinmeden önce meydana gelen BeforeDelete olayına aşağıdaki kodu yazalım.

:
procedure TForm1.IBDataSet1BeforeDelete(DataSet: TDataSet);

Var

Cevap:Word;

Begin

Cevap:=Application.MessageBox(' silinsin  mi? ','Onay',MB_YesNo);

if Cevap=mrNo then

SysUtils.Abort; //Hayırsa İşlemi İptal Et

end;


Resim weklemek içinse dbimagenin OnClick olayına aşağıdaki kodu yazıyoruz. Öncesinde forma bir OpenPictureDialog bileşeni eklemeyi  unutmuyoruz.

:
procedure TForm1.DBImage1Click(Sender: TObject);

begin

if OpenPictureDialog1.Execute Then

Begin

//Tablo düzenleme yada ekleme modunda değilse

if not (IBDataset1.State in [dsEdit,dsInsert])  then

IBDataset1.Edit; //Düzenleme moduna gir

//dbimageye seçilen resmi aktar.

DbImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

IBDataset1.Post; //değişikliği kaydet.

end;

end;


sadece bmp dosyalarını kaydedebileceğinizi unutmaayın. İlerde diğer türleride görürüz inşallah.

Kapat buttonuna formu kapatacak kodu yazın

:
Close;


şunu unutmayın yapacağınız bütün işlemler o anki aktif kayıt üzerinde yapılır. Her zaman bir kayıt mutlaka aktiftir.

Son olarak arama işlemi için aşağıdaki kodu Bul buttonunun Onclick olayına yazalım.

:
//IBDatseti kapat. SelectSQL cümlesini Değiştirirken Mutlaka yapılmalıdır

IBDataSet1.Close;

//IBDataSetin SelectSQL özelliğini temizle

IBDataSet1.SelectSQL.Clear;

//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.

IBDataSet1.SelectSQL.Add('select * from TBL_REHBER');

//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.

IBDataSet1.SelectSQL.Add('Where ADI='+#39+EditAraAd+#39+' AND SOYADI='+#39+EditAraSoyad+#39);

//SelectSql özelliğine atama yapıldıktan sonra IBDataseti aç.

IBDataSet1.Open;


Gördüğünüz gibi Sorgulama kısmındaki Editlere göre arama yapıp. Sonuçları listeledik.

Sitede bulunan IBQuery makalesini incelemenizi öneririm. SQL Sorgularıkonusunda tek farkı “SelectSQL” Yerine “SQL” yazılması.

Örneğin

:
IBDataSet1.SelectSQL.Add('select * from TBL_REHBER');


Yerine

:
IBQuery1.SQL.Add('select * from TBL_REHBER');

Ynt: Delphi le Veritabanına Giriş Gönderen: 32844 Tarih: 06 December 2007 11:11:11
Akrep sağolsun, bu yazıyı onun sayesinde buldum ve uyguladım.
Çok güzel hazırlanmış ve hata yapma olasılığı çok az.
Ancak benim uygulamamda
Form1'de       :ComboBox1,2,3,4,5 (Ders kodu, ders saati, yarıyıl, adı soyadı, gün)
                       DBEdit1,2,3,4,5
                       DBGid
                       SpeedButton (kaydet, kayıt ekle, kayıt sil, kayıt düzelt, ilk kayıt, önceki kayıt, sonraki kayıt, son kayıt, ders kodu ara, isim ara)

DataModul'de IBDatabase, IBTransaction, IBDataset ve DataSource var
Amacım Öğretmenin adı soyadı, gün, dersi, saati ve yarıyılı listelemek.

Veritabanı C:\FHYICRA\DATA.FDB adlı dosyada ve o dosyada TBL_DERSLER adlı tabloyu esas alıyor.
Tablodaki alan adları ADI_SOYADI (varchar), GUN (varchar), DERS_KODU (varchar), DERS_SAATI (integer), YARIYIL(integer)
Primary Key bir alan yok.

SORUN 1- DBGridde sadece 1 satır mı sıralanır. Birden fazla satır sıralanamaz mı? Sıralanabilirse ilk kayıt, son kayıt, önceki kayıt, sonraki kayıt butonlarını kaldıracağım)
SORUN' 2- Kayıt işleminden sonra ikinci bir kayıt yaparken sanki öncekinin üzerine yazıyor. SQL Manager'de kontrol ettiğimde de öyle görüyorum. Sebebini çözemedim. Acemelik ne de olsa.


Kodlar aşağıdaki gibi
Makaledeki // den sonra yazılan bilgilere dokunmadan kullandım.

:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
DBEdit1.Text:=ComboBox1.Text;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
DBEdit2.Text:=ComboBox2.Text;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
begin
DBEdit3.Text:=ComboBox3.Text;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
begin
DBEdit4.Text:=ComboBox4.Text;
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
begin
DBEdit5.Text:=ComboBox5.Text;
end;

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
uData2.DataModule2.IBDataset1.post;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
uData2.DataModule2.IBDataset1.insert;
DbEdit1.setfocus; // Tablonun İlk Alanına Bağlı Bileşenge Kursörü Bırakıyoruz.
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if uData2.DataModule2.IBDataset1.RecordCount>0 then //Kayıt varsa
uData2.DataModule2.IBDataset1.delete;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
uData2.DataModule2.IBDataset1.Edit;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
//IBDatseti kapat. SelectSQL cümlesini Değiştirirken Mutlaka yapılmalıdır
uData2.DataModule2.IBDataSet1.Close;
//IBDataSetin SelectSQL özelliğini temizle
uData2.DataModule2.IBDataSet1.SelectSQL.Clear;
//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.
uData2.DataModule2.IBDataSet1.SelectSQL.Add('select * from TBL_DERSLER');
//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.
uData2.DataModule2.IBDataSet1.SelectSQL.Add('Where DERS_KODU='+#39+ComboBox1.Text+#39);
//SelectSql özelliğine atama yapıldıktan sonra IBDataseti aç.
uData2.DataModule2.IBDataSet1.Open;
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
//IBDatseti kapat. SelectSQL cümlesini Değiştirirken Mutlaka yapılmalıdır
uData2.DataModule2.IBDataSet1.Close;
//IBDataSetin SelectSQL özelliğini temizle
uData2.DataModule2.IBDataSet1.SelectSQL.Clear;
//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.
uData2.DataModule2.IBDataSet1.SelectSQL.Add('select * from TBL_DERSLER');
//IBDataSetin SelectSQL özelliğine SQL Cümlemizi atıyoruz.
uData2.DataModule2.IBDataSet1.SelectSQL.Add('Where ADI_SOYADI='+#39+DBEdit4.Text+#39);
//SelectSql özelliğine atama yapıldıktan sonra IBDataseti aç.
uData2.DataModule2.IBDataSet1.Open;
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
if not uData2.DataModule2.IBDataset1.Bof Then //İlk Kayıtta Değilse
uData2.DataModule2.IBDataset1.First;
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
if not uData2.DataModule2.IBDataset1.Bof Then //İlk Kayıtta Değilse
uData2.DataModule2.IBDataset1.Prior;
end;

procedure TForm1.SpeedButton8Click(Sender: TObject);
begin
if not uData2.DataModule2.IBDataset1.Eof Then //Son Kayıtta Değilse
uData2.DataModule2.IBDataset1.Next;
end;

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
if not uData2.DataModule2.IBDataset1.Eof Then //Son Kayıtta Değilse
uData2.DataModule2.IBDataset1.Last;
end;

Ynt: Delphi le Veritabanına Giriş Gönderen: Akrep Tarih: 06 December 2007 11:53:44
32844 (ya bu numarayı yanlış yazacam diye tekrar bakmak zorunda kalıyorum en iyisi formulize edeyim Smiley) hocam bu kodlar kayıt yapmıyor, atama yapıyor sadece sanki.
1. soruna cevap: DBGrid'de elbette birden fazla  hatta onbinlerce kayıt gösterilebilir.
2. soruna cevap: yeni kayıdı nasıl bir sql komutuyla yaptığına bağlı.

Madem combobox'lardan seçerek listeleme yapmak istiyorsun bence dbedit'lere gerek yok. Bir "Ara" düğmesi koyup OnClick olayına;

var
cmb1, cmb2, cmb3, cmb4, cmb5:String;
begin
 
if Combobox1.ItemIndex=0 then cmb1:='%' else cmb1:=Combobox1.Text;
if Combobox2.ItemIndex=0 then cmb2:='%' else cmb2:=Combobox2.Text;
if Combobox3.ItemIndex=0 then cmb3:='%' else cmb3:=Combobox3.Text;
if Combobox4.ItemIndex=0 then cmb4:='%' else cmb4:=Combobox4.Text;
if Combobox5.ItemIndex=0 then cmb5:='%' else cmb5:=Combobox5.Text;
 
 
IBDataset1.Close;
IBDataSet1.SelectSQL.Clear;
IBDataSet1.SelectSQL.Add('Select * From TBL_DERSLER Where DERS_KODU like:derskodu AND');
IBDataSet1.SelectSQL.Add('DERS_SAATI like:derssaati AND YARIYIL like:yariyil AND ADI_SOYADI like:adsoyad AND');
IBDataSet1.SelectSQL.Add('GUN like:gun');
 
IBDataset1.ParamByName('derskodu').AsString:=cmb1;
IBDataset1.ParamByName('derssaati').AsString:=cmb2;
IBDataset1.ParamByName('yariyil').AsString:=cmb3;
IBDataSet1.ParamByName('adsoyad').AsString:=cmb4;
IBDataSet1.ParamByName('gun').AsString:=cmb5;
 
IBDataSet1.Prepare;
IBDataSet1.Open;
 
end;

Eğer bileşenler arasındaki bağlantıları da doğru yaptıysan bu şekilde çalışması gerekir. Bu arada IBDataSet'in Object Inspector üzerinde görünen "SelectSQL" özelliğine "Select * from TBL_DERSLER" yazarsan iyi olur. Active özelliği de "false"  yani sen arama yapmak için düğmeye basmadığın sürece bir kayıt göstermesin, böylece performanstan tasarruf edersin. Buradaki SelectSQL cümlesi aslında bir işe yaramayacak çünkü dataset sen düğmeye basana kadar aktif hale gelmeyecek. Bastığında ise zaten yukarıdaki kodlarda oluşturulan yeni SQL cümlesi devreye girecek. Ama yine de object inspector üzerindeki "SelectSQL" özelliğine "Select * from TBL_DERSLER" yazmamızın sebebi, oraya birşeyler yazmak zorunluluğunun olması...

Ayrıca programın çalıştığında combobox'ların ilk maddesi olarak "Seçiniz" yada "-" gibi birşeyler yazarak ilk maddenin bir seçenek olmadığını belirtirsen iyi olur, çünkü yukarıdaki kodlar comboboxların ilk maddesini dikkate almayacak.

Bu yazdıklarımı yaptığında listelemeyi gerçekleştirebiliyorsan ikinci kısıma yani yeni kayıt eklemeye geçelim. Tabi yeni kayıt ekleme işini hangi kodlarla yapmaya çalıştığını da yazarsan iyi olur.

(Bu arada üzülerek tekrar hatırlatayım, yine sorunu makale bölümünde sormuşsun Smile)
Ynt: Delphi le Veritabanına Giriş Gönderen: 32844 Tarih: 06 December 2007 12:57:59
Sayın Akrep, çok teşekkür ederim.

Öncelikle bu makale üzerinde çalıştığım için soruyu buraya yazdım. Yani doğrudan ilgili olduğu için.

Verdiğin linklerin bir kısmında da böyleydi. O yüzden soru-ipucu bölümünü kullanmadım. Benim sorum ve sizin yanıtınız bana göre, makale ile bütünlük oluşturmuş durumda.

Kaydet ve kayıt ekle için makaledeki kodları kullandım. Yeni bir projede Doğrudan DBComboBox'tan kayıt yaptım sorun yok yalnız bu sefer DK_NO diye bir primary key alan atadım. Belki sorun ordadır diye. Ancak bu alanı otomatik arttırmadım. Onunla uğraşıyorum. SelectSQL'e dediklerini yazmıştım. Tavsiyene uyup, true'yi false yapacağım.

Tekrar çok teşekkürler. Şimdi
Ynt: Delphi le Veritabanına Giriş Gönderen: Akrep Tarih: 06 December 2007 13:11:16
Active özeliğini false yapman verdiğim kodları uygularsan yapmanı tavsiye ettiğim birşey, ama farklı tarzda devam ettiğine göre false yapmana da gerek yok sanıyorum. Rica ederim.