FireBird Uzman Görüşü

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
ekremkocak
Üye
Mesajlar: 24
Kayıt: 31 Oca 2015 03:24

FireBird Uzman Görüşü

Mesaj gönderen ekremkocak »

Merhaba Arkadaşlar.. Uzun Zamandır delphi ile ugrasıyorum ama MALESEF veri tabanı dönpde bakamadıgım bir alan..simdi ise bir dosta hesap takip programı yazıyorum sorunum ise asagıda bilgilerini verdigim kodları güvenli bir selilde kullanılırmı yoksa bir FACİAYA yol acarmı..Simdiden tesekkürler

Data base :

Kod: Tümünü seç

/* Table: MUSTERILER, Owner: SYSDBA */

CREATE TABLE "MUSTERILER" 
(
  "TCNO"	VARCHAR(11) CHARACTER SET WIN1254 NOT NULL,
  "ADISOYADI"	VARCHAR(30) CHARACTER SET WIN1254 NOT NULL,
  "TELEFON"	VARCHAR(15) CHARACTER SET WIN1254,
  "ADRES"	VARCHAR(50) CHARACTER SET WIN1254,
  "KIMDEN"	VARCHAR(15) CHARACTER SET WIN1254,
 UNIQUE ("TCNO"),
CONSTRAINT "MUSTERILER_PK" PRIMARY KEY ("TCNO", "ADISOYADI")
);


/* Table: POLICELER, Owner: SYSDBA */

CREATE TABLE "POLICELER" 
(
  "TCNO"	VARCHAR(11) CHARACTER SET WIN1254,
  "POLICENO"	VARCHAR(15) CHARACTER SET WIN1254 NOT NULL,
  "POLICETURU"	VARCHAR(10) CHARACTER SET WIN1254,
  "ARACPLAKA"	VARCHAR(10) CHARACTER SET WIN1254 NOT NULL,
  "BASLAMATARIHI"	DATE,
  "BITISTARIHI"	DATE,
  "DEKONT"	VARCHAR(15) CHARACTER SET WIN1254,
CONSTRAINT "POLICELER_PK" PRIMARY KEY ("POLICENO", "ARACPLAKA")
);
ALTER TABLE "POLICELER" ADD CONSTRAINT "MUSTERILER_FK" FOREIGN KEY ("TCNO") REFERENCES MUSTERILER ("TCNO") ON DELETE CASCADE;
delphi kodları :

Kod: Tümünü seç

type
  TForm1 = class(TForm)
    tblMaster: TIBTable;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    tblDetail: TIBTable;
    dtsMaster: TDataSource;
    dtsDetail: TDataSource;
    dbgMaster: TDBGrid;
    dbgDetail: TDBGrid;
    btnNew: TButton;
    btnDelete: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure btnNewClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnNewClick(Sender: TObject);
begin
  if not tblMaster.Locate('TCNO',trim(Edit1.Text),[loPartialKey,loCaseInsensitive]) then
  begin
    tblMaster.Append;
    tblMaster.FieldByName('TCNO').AsString:= Edit1.Text;
    tblMaster.FieldByName('ADISOYADI').AsString:= Edit2.Text;
    try
      tblMaster.Post;
      IBTransaction1.CommitRetaining;
    except
      IBTransaction1.RollbackRetaining;
    end;
  end;
end;

procedure TForm1.btnDeleteClick(Sender: TObject);
begin
  try
    tblMaster.Delete;
    IBTransaction1.CommitRetaining;
  except
    IBTransaction1.RollbackRetaining;
  end;
end;

end.

En son ekremkocak tarafından 07 Mar 2017 11:44 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: FireBird Uzman Görüşü

Mesaj gönderen greenegitim »

kodlarınızı code tagı içerisine alırsanız okumak daha kolay olur.
bir sıkıntı yok gibi görünüyor comitleri unutmamışsınız.
Mücadele güzelleştirir!
ekremkocak
Üye
Mesajlar: 24
Kayıt: 31 Oca 2015 03:24

Re: FireBird Uzman Görüşü

Mesaj gönderen ekremkocak »

Uayrı için tesekkürler.. Benim asıl sıkıntım delphi kodlarından ziyade veri tabanındaki Index ve PK-FK Keyler de. Master-Detail baglantısında bir sıkıntı cıkarmaz inş. birde table yerine Query kullanmayı düsünüyorum falat Query'de master-detail baglantısını söyle yapıyorum.

Kod: Tümünü seç

QryDetail.MasterSource:=QryMaster;
QryDetail.SQL.Add('SELECT * FROM POLICELER WHERE TCNO =:TCNO ');
bu sekilde master-detail sorunsuz calısıyor..
Query'de Master-Detail baglantısı bu sekilde yapılması dogrumu?
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: FireBird Uzman Görüşü

Mesaj gönderen greenegitim »

master tablodaki primary key alanını bir dbedite örnek dbedit_id olsun bağlayıp onchange olayında detail tabloyu listeletebilirsiniz
Mücadele güzelleştirir!
Cevapla