bir kerede bir master birden çok detail kayıt

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gold_Lady
Üye
Mesajlar: 142
Kayıt: 03 Nis 2006 08:39
Konum: İş Yerinden :)
İletişim:

bir kerede bir master birden çok detail kayıt

Mesaj gönderen Gold_Lady »

öncelikle kandilinizi kutlar, hayırlara vesile olmasını dilerim.

herhangi bir programda kullanmak için değilde, olayı kavrayabilmek için soruyorum. master detaile yeni giriş yapıyorumda.

sorum şu;
bir tane master tablo, bir tane detail tablo var.
(firebird, delphi 7, IBX bileşenleri.)

master---------------------detail
müşteri no-------------------- satılan mallar
1---------------------------------cpu
----------------------------------ram
----------------------------------anakart

2---------------------------------cdrom
-----------------------------------boş medya
-----------------------------------ram

3---------------------------------psu
-----------------------------------power kablo
-----------------------------------IDE kablo
-----------------------------------ekran kartı

4---------------------------------monitör
-----------------------------------ekran kartı
.
.
.

diye gidiyor.

Satılan mallar kategoriler halinde, combobox tan seçiliyor. mesela 20 kategori var ve her kategori için bir tane combobox. bir tane kaydet butonu var. kullanıcı 20 kategoriden atıyorum 5 tanesiden seçim yapıyor. bu yaptıgı seçimleri kaydet butonuna bastıgında bir kerede nasıl yazdırcam detail tabloya. mantık olarak şöyle düşündüm,

1. combobox ta eger seçim yapılmışsa;

Kod: Tümünü seç

ibdatasetdetail.insert;
ibdatasetdetail[alanadı]:=combo1.text;// gibi
ibdatasetdetail.post;
ikinci combobox ta seçim yapılmışsa

Kod: Tümünü seç

ibdetail.insert;
ibdetail[alanadı]:=combo2.text;// gibi
ibdetail.post;
gibi mi olması lazım yoksa daha basit bir çözümü var mı, işin içinden cıkamadım.

teşekkürler, kolay gelsin...
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

bi insert query'si ile kolayca halledebilirsin. Benim bi yerde şöyle bişey kullanmışım.

Kod: Tümünü seç

    with dm.ibqTemp do
    begin
        Close;
        SQL.Clear;
        SQL.Add('insert into tbl_Posta (Posta_adi) values (:pr_Posta_adi)')
        ParamByName('pr_Posta_adi').Value := edtPosta.Text;
        ExecSQL;
    end;
ibqTemp adlı query bileşinini, kapatıyor, sql'inin temizliyor, yeni sql ekliyor, pr_Posta_adi diye bir parametre kullanıyor. sonra bu parametreye bir değer atıyor ve sql'i çalıştırıyor.

Kolay Gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Gold_Lady
Üye
Mesajlar: 142
Kayıt: 03 Nis 2006 08:39
Konum: İş Yerinden :)
İletişim:

Mesaj gönderen Gold_Lady »

Bu kodu döngü içinde mi kullanacağım tam anlamadım, çünkü sizin kodu kendime uyarlarsam sadece combo1 içerigi kaydedilir ve durur.

birde ilk mesajımda bir yanlış anlama olmasın.
mesela 20 kategori var ve her kategori için bir tane combobox. bir tane kaydet butonu var.
derken yani 20 tane combo var bir tane kaydet butonu var. tek kaydet butonu ile comboların içi doluysa detail tabloya yazılacak.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Kod: Tümünü seç

    with dm.ibqTemp do
    begin
        Close;
        SQL.Clear;
        SQL.Add('insert into Tablo (Alan1, Alan2, ......., AlanN) values (:Alan1in_Parametresi, :Alan2in_Parametresi, :AlanNin_Parametresi )');
        ParamByName(':Alan1in_Parametresi,').Value := Combobox1.Text;
        ParamByName(':Alan2in_Parametresi,').Value := Combobox2.Text;
        ...
        ...
        ...
        ParamByName(':AlanNin_Parametresi,').Value := ComboboxN.Text;
        ExecSQL;
    end;
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

S.A.

Kod: Tümünü seç

  var
    i: Integer;
begin
for i := 0 to ComponentCount-1 do
  if Components[i] is TComboBox then 
    if TComboBox(Components[i]).ItemIndex <> -1 then
      AddDetail(TComboBox(Components[i])).Text, deger2, deger3);

// ya da
{ for i := 1 to 20 do //20 tane combo olduğunu varsaydım
    if TComboBox(FindComponent('ComboBox'+inttostr(i))).ItemIndex <> -1 then
      AddDetail(TComboBox(FindComponent('ComboBox'+inttostr(i)).Text, deger2, deger3); }
end;


procedure AddDetail(deger1, deger2: String; deger3: Integer)
begin
  with qryAdd, SQL do
  begin
    Close;
    Text := 'insert into TABELNAME (ALAN1, ALAN2, ALAN3) '
              +'values (:Param1, :Param2, :Param3);
        ParamByName(':Param1').AsString := deger1;
        ParamByName(':Param2').AsString := deger2;
        ParamByName(':Param3').AsInteger := deger3;
    Open;
  end;//with
end;//AddDetail
AddDetail prosedüründe Query kullanmak yerine dataset de kullanabilirsin.

Eğer detail kayıtlara eklenecek bilgi taşımayan cb'ler varsa onları da kaydeder. :roll:

Kolay gelsin.
Gold_Lady
Üye
Mesajlar: 142
Kayıt: 03 Nis 2006 08:39
Konum: İş Yerinden :)
İletişim:

Mesaj gönderen Gold_Lady »

Cevaplar için teşekkür ederim ancak bu ALAN1,ALAN2,ALAN3 mantıgını pek anlamadım. Benim detaile yazdırmak istediğim alan 1 tane.

Neyse ben yanlıs yorumlamıs olabılırım kodu, deneyim sonucu yazarım.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Bi taneyse diğerlerini silin.
Genellikle tek alan kullanılmadığı için böyle örnek verdim.

Kolay gelsin.
Cevapla