MSSQL ile Master/Detail

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

MSSQL ile Master/Detail

Mesaj gönderen apex06 »

Arkadaşlar Merhaba,

ADODataset ile basit bir fiş işlemi (Master/Detail) yapmak istiyorum. Firebird veya Oracle'da sorunsuz yaptığım bu işlemi ilk defa master/detail yapacağım MSSQL'de başaramadım.


Yapmak istediğim Grid'e veri ekleyip aşağı ok tuşu ile veri eklemeye devam etmek ama alt satıra geçtiğimde ilk satır bilgileri kayboluyor.

Master ve Detail datasetlerin SQL'lerini yazdım.
Detail Datasetin Datasource'una Master Source'u ekledim.
Detail Datasetin MasterFields kısmında Field Link Designer ile Detail ve Master keyleri bağladım.

Master Tablo

Kod: Tümünü seç

CREATE TABLE [dbo].[FIS](
	[FISKEY] [int] IDENTITY(1,1) NOT NULL,
	[TARIH] [date] NULL,
	[FISNO] [smallint] NULL,
 CONSTRAINT [PK_FIS] PRIMARY KEY CLUSTERED 
(
	[FISKEY] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Detail Tablo

Kod: Tümünü seç

CREATE TABLE [dbo].[FISDET](
	[FISDETKEY] [int] IDENTITY(1,1) NOT NULL,
	[FISKEY] [int] NULL,
	[ADI] [varchar](50) NULL,
	[NUMARASI] [varchar](50) NULL,
 CONSTRAINT [PK_FISDET] PRIMARY KEY CLUSTERED 
(
	[FISDETKEY] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Master tablodaki KEY'in alması gereken son numarayı "SELECT IDENT_CURRENT('FIS') AS SONID" query ile buldum ve DetailDatasetin BeforePost olayına Detail datasetin MasterKey'ine atadım.



Resim

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  MasterDataset.Active := True;
  DetailDataset.Active := True;
end;

Kod: Tümünü seç

procedure TForm1.DetailDatasetBeforePost(DataSet: TDataSet);
var
  SonID: Integer;
begin
  ADOQuery1.Active := True;
  SonID := ADOQuery1SONID.AsInteger + 1;
  DetailDatasetFISKEY.AsInteger := SonID;
  ShowMessage(IntToStr(DetailDatasetFISKEY.AsInteger));
end;

Kod: Tümünü seç

procedure TForm1.btnYeniClick(Sender: TObject);
begin
  ADOConnection1.BeginTrans;
  MasterDataset.Append;
  DetailDataset.Append;
end;

Teşekkür ederim.
Dosya ekleri
Projects.rar
(89.35 KiB) 62 kere indirildi
Cevapla