| mussimsek | 29.11.2004 - 12:28:55 |
| Merhaba,
2 tane tablom var. Bunlar arasında master-detail ilişki var. Mesela bir müşteriye yapılan satışlar ve bu satışların detayları diyebiliriz. Ben bu 2 tablodaki belirli bir ID'ye sahip müşterinin kayıtlarını LOG isimli başka bir tabloya kayıt etmek istiyorum. Mesela 5 nolu müşteri için sırasıyla: - birinci satışı tabloya insert edecek - birinci satışın detaylarını insert edecek (mesela 3 detay) - 2. satışı insert edecek - 2. satışın detaylarını insert edecek (mesela 2 detay) .... for select ile içiçe iki döngü yaptım ama detail döngüye hiç girmedi. Teşekkürler. | |
| husonet | 29.11.2004 - 12:38:20 |
| Ben bu tip şeyleri Triger ile hallediyorum.
yada datasetlerin AfterInser gibi eventlerinde. http://www.delphiturkiye.com/forum/viewtopic.php?t=1342&highlight=afterinsert Kolay Gelsin... | |
| mussimsek | 29.11.2004 - 12:41:00 |
| @husonet çok sağol,
bana bu şekilde lazım maalesef. Diğer türlüsü işime gelmiyor. Arada bir takım kontroller de yaptırıyorum vs. Teşekkürler. | |
| fahrettin | 29.11.2004 - 13:24:45 |
| Aklıma gelen alternatifler....
1. Bir sekilde ic ice dongu olusturmak... Firebird de nasıl olacagini bilmioyurm.. 2. Master detay tablolar arasi join yapip tek bir select olusturarak tek dongu icinde farkli insert komutlari ile master ve detaylari ayni select icinden farklı alanlari çekerek insert etmek... Tabi bu durumda master'a insert aninda select distinct ifadesi gerekecek. 3. Bu islemleri tek bir SP icinden degil de satis, satis detay triggerlarina dagitarak yapmak. Boylece dongu diye bir dert kalmaz. Bahsettigin ilave kontrol vs 'leri de uygun yerlere dagitabilir veya bunlari ayri SP yapabilirsin belki... 4. Sybase'e gecersin. :) | |
| mussimsek | 29.11.2004 - 13:25:57 |
| 4. maddeyi seçiyorum :D Sybase'in yeri ayrı tabii. | |
| sadettinpolat | 29.11.2004 - 14:15:32 |
| ben problemi tam olarak anlayamadım galiba.
iki tablo var ve bu tablodan seçilen belirli kayıtlar bir log dosyasına kaydedilecek.. içi içe 2 tane for - select döngüsüyle problemin çözülmesi lazım. | |
| mussimsek | 29.11.2004 - 14:24:13 |
| çözmesi lazım ama çözmedi.
for select master_tablo do
begin insert into LOG master_kayıt for select detail_tablo do begin insert into detail_kayıt end end yapı bu şekilde ama detail kayıtları kaydetmiyor. IB Expert ile debug ettim, detail_tablo'nun döngüsüne hiç girmiyor. Kolay gelsin. | |
| sadettinpolat | 29.11.2004 - 14:49:01 |
CREATE PROCEDURE MASTERDETAIL (
IN_TESELLUMID INTEGER) RETURNS ( OUT_TESELLUMID INTEGER, OUT_DETAILID INTEGER) AS DECLARE VARIABLE VAR_TESELLUMID INTEGER; DECLARE VARIABLE VAR_DETAILID INTEGER; begin DELETE FROM TEMP3; FOR SELECT T.tesellumid FROM tesellumler T WHERE T.tesellumid = :in_tesellumid INTO :out_tesellumid DO BEGIN FOR SELECT TD.detailid FROM tesellum_detail TD WHERE TD.tesellumid = :out_tesellumid INTO :out_detailid DO BEGIN INSERT INTO TEMP3 (ID,DETAILID) VALUES (:out_tesellumid,:out_detailid); /*SUSPEND;*/ END END end şeklinde bir prosedürüm var ve çalıştırıp commit edince temp3 tablosunu aşağıdaki şekilde oluşturuyor. ID DETAILID 45 86 45 85 | |
| mussimsek | 29.11.2004 - 15:19:24 |
| sağol hocam, ben deneyip, neticeyi bildiririm.
Kolay gelsin. | |
| highmemo | 30.11.2004 - 10:37:03 |
| Mustafa Bey' birde bunu değerlendiriseniz.
Sadettin arkadaşımız yazmış gerçi ama, ek örneklerden zarar çıkmaz.. İsteğinize uygun olsun diye hemen yazdım.. Çalışan bir örnek: CREATE PROCEDURE PRC_ADDTOLOG (I_CUST_ID INTEGER) AS declare variable L_ID Integer; declare variable L_TOT Integer; begin BEGIN FOR SELECT ID, TOT FROM TBL_MASTER WHERE ID= :I_CUST_ID INTO :L_ID, :L_TOT DO BEGIN INSERT INTO TBL_LOG(A,B,C) VALUES(-1, :L_ID, :L_TOT); FOR SELECT ID, TOT FROM TBL_DETAIL WHERE MASTER_ID=:I_CUST_ID INTO :L_ID, :L_TOT DO BEGIN INSERT INTO TBL_LOG(A,B,C) VALUES(-2, :L_ID, :L_TOT); END END END end | |
| mussimsek | 30.11.2004 - 11:14:00 |
| merhaba,
sağolun arkadaşlar sorun çözüldü. Verilerde bir bozukluk varmış Deneme yaparken sanırım sildim o kayıtları. Ben 7 nolu ID ile deneme yapıyordum ama detail tabloda 7 nolu hiç kayıt yokmuş. Onun için döngüye hiç girmiyormuş. Kayıt ekleyince çalıştı :D Teşekkürler. | |