MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen Lost Soul »

S.A.
Internet üzerinden Zeos bileşeni ile veri atmaya çalışıyorum.
1 Master 7 detail tablo var.

Atacağım veri tabanı yapısı üzerinde değişiklik yapma şansım yok.

Aşağıdaki örnek yapı üzerinden soracağım.

Master Table :

id : autoinc
field1...
field2...

Detail Table
masterid
field3...
field4...

şimdi burada

Kod: Tümünü seç

 
insert into detail(masterid,field3,field4) values ( masterdangelenid,'field3','field4') 
(
insert into master (field1,field2) values ('field1','field2');
) sonuc= masterdangelenid
şeklinde
master'a insert into ile eklenen kayıttan dönen autoinc değeri detail'e masterdengelenid şeklinde parametre olarak atayabileceğim bir kod çözümü olan var mı acaba:?:
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen mkysoft »

bu şekilde kullanım görmedim, iki ayrı sql göndermeniz gerekecektir. birden fazla sql kullanmak istemiyorsanız SP yazabilirsiniz.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen Lost Soul »

sorunu şu şekilde çözdüm


Global değilken tanımla

Kod: Tümünü seç

set @sonid5021129823=0;

Master Table'da kaydı ekle

Kod: Tümünü seç

insert into ogrsbs2
(sinavturu,sinavno,kurumkodu,numara,adi,soyadi,
adsoyad,kitapcik,sinif,ilkodu,ilcekodu)
values
(:sinavturu,:sinavno,:kurumkodu,:numara,:adi,:soyadi,
:adsoyad,:kitapcik,:sinif,:ilkodu,:ilcekodu);

Son eklenen kaydı global değişkene ata

Kod: Tümünü seç

select @sonid5021129823:=last_insert_id();
İstediğin yerde kullan

Kod: Tümünü seç

insert into ogrsbsb2
(ogrsbsid,btur,bmat,bfen,bsos,bdil,btop)
values
(@sonid5021129823,:btur,:bmat,:bfen,:bsos,:bdil,:btop)
;

insert into ogrsbsd2
(ogrsbsid,dtur,dmat,dfen,dsos,ddil,dtop)
values
(@sonid5021129823,:dtur,:dmat,:dfen,:dsos,:ddil,:dtop)
;

insert into ogrsbsderece2
(ogrsbsid,tmsinifderece,tmokulderece,tmilcederece,tmilderece,tmderece,
sinifderece,okulderece,ilcederece,ilderece,derece)
values
(@sonid5021129823,:tmsinifderece,:tmokulderece,:tmilcederece,:tmilderece,:tmderece,
:sinifderece,:okulderece,:ilcederece,:ilderece,:derece)
;

insert into ogrsbsn2
(ogrsbsid,ntur,nmat,nfen,nsos,ndil,ntop)
values
(@sonid5021129823,:ntur,:nmat,:nfen,:nsos,:ndil,:ntop)
;

insert into ogrsbsp2
(ogrsbsid,tmpuan)
values
(@sonid5021129823,:tmpuan)
;

insert into ogrsbss2
(ogrsbsid,stur,smat,sfen,ssos,sdil,stop)
values
(@sonid5021129823,:stur,:smat,:sfen,:ssos,:sdil,:stop)
;

insert into ogrsbsy2
(ogrsbsid,ytur,ymat,yfen,ysos,ydil,ytop)
values
(@sonid5021129823,:ytur,:ymat,:yfen,:ysos,:ydil,:ytop)
;
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen mkysoft »

çok kullanıcılı sistemlerde başınızı ağrıtabilir. başka bir kullanıcı başka bir tabloya veri girdiğinde last_insert no değişmiş olabilir.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen Lost Soul »

mkysoft yazdı:çok kullanıcılı sistemlerde başınızı ağrıtabilir. başka bir kullanıcı başka bir tabloya veri girdiğinde last_insert no değişmiş olabilir.
Program çok kullanıcılı olacak zaten. bu nedenle tüm kayıt işlemini tek bir script halinde gerçekleştirmem gerekti.
yani yukarıdaki kodların tümü server'a tek seferde gönderilip icra ettiriliyor.
başta table ile yapmayı denedim fakat table'nin açılması 3-7 dk arası sürüyordu.
bu yüzden sql script ile kayıtları ekleyip
hemen arkasından last_inserti deeğişkene atayarak diğer tablolarda kullanmayı seçtim.
değişkenin diğer kullanıcıların değişkenleri ile çakışmaması için de

set @sonid5021129823=0;
formatında değişken tanımladım. ordaki sonidxxxxxxxx şeklinde xxxxx rakamları atacağım verideki bir kaç integer alanın ardarda eklenmiş hali :)

attığım verilerde unique alan olmadığı için veriyi atıp arkasından unique alan ile attığım bilgiyi geri çağırıp id yi öğrenmem zar atmak gibi bişey olur.

eğer daha iyi bir yol olursa memnuyiet ve minnetle uygulamaya koyarım.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: MySQL- Master Tabloya kayıt atıp detaillere pk ile kayıt ekl

Mesaj gönderen vkamadan »

Merhabalar,
Sadece ek bilgi olsun diye söylüyorum , Last_InsertID() fonksiyonu size on an ki aktif bağlantı kanalının yaptığı insert işlemlerinin en sonuncusunun aldığı değeri verir, yani çok kullanıcılı sistemlerde bu metodun sorun oluşturma şansı yoktur, her bağlantı kendi Last_InsertID sini ayrı ayrı takip eder izoledir.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla