Delphi SQL de İç içe For Döngüsü Hakkında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphi SQL de İç içe For Döngüsü Hakkında
Merhaba arkadaşlar. Üzerinde çalıştığım veritabanlı programda iç içe for döngüsü kullanmak istiyorum ama beceremedim. Yardımlarınıza ihtiyaç duydum. Yardımcı olursanız çok sevinirim.
4 ADET TABLOM VAR. HER TABLODA KAYITLAR VAR. BEN BU 3 TABLODAKİ KAYITLARDA "ORAN" ALANLARINI ÇARPMAK VE TABLO 4 E Kaydetmek istiyorum.
ÖRNEK VERECEK OLURSAM:
TABLO1: 1 VE 2 SAYILARI VAR
TABLO2: 3 VE 4 SAYILARI VAR
TABLO3: 5 VE 6 ALTI SAYILARI VAR.
TABLO4 E ŞU ŞEKİLDE KAYITLAR OLACAK
1*3*5=15
1*3*6=18
1*4*5=20
1*4*6=24
2*3*5=30
2*3*6=36
2*4*5=40
2*4*6=48
Dikkat ederseniz tüm olasılıkları çarptı. ASLINDA BU OLASILIKLARI BULUP KAYDETME İŞLEMİ.Kayıt işleminde sıkıntı yok ama iç içe döngüyü yazamıyorum.
var
M1:Integer;
begin
ADO_DURUM1.Close;
ADO_DURUM1.SQL.Clear;
ADO_DURUM1.sql.Add('SELECT * FROM TBL_DURUM_1');
ADO_DURUM1.open;
////////////// DÖGÜYE BAŞLA
for M1:=0 to ADO_DURUM.recordcount-1 do begin
BTN_KAYIT_EKLE.Click; // DB EDİTTEKİ VERİLERİ ÇARPIP TABLO 4 E KAYDEDİYOR.
ADO_MAC1.next;
end;
end;
TÜM OLASILIKLARI ÇARPMAK VE VERİTABANINA KAYIT İÇİN BU KODLARIN DEVAMINDA NASIL BİR DÖNGÜ OLACAK?
4 ADET TABLOM VAR. HER TABLODA KAYITLAR VAR. BEN BU 3 TABLODAKİ KAYITLARDA "ORAN" ALANLARINI ÇARPMAK VE TABLO 4 E Kaydetmek istiyorum.
ÖRNEK VERECEK OLURSAM:
TABLO1: 1 VE 2 SAYILARI VAR
TABLO2: 3 VE 4 SAYILARI VAR
TABLO3: 5 VE 6 ALTI SAYILARI VAR.
TABLO4 E ŞU ŞEKİLDE KAYITLAR OLACAK
1*3*5=15
1*3*6=18
1*4*5=20
1*4*6=24
2*3*5=30
2*3*6=36
2*4*5=40
2*4*6=48
Dikkat ederseniz tüm olasılıkları çarptı. ASLINDA BU OLASILIKLARI BULUP KAYDETME İŞLEMİ.Kayıt işleminde sıkıntı yok ama iç içe döngüyü yazamıyorum.
var
M1:Integer;
begin
ADO_DURUM1.Close;
ADO_DURUM1.SQL.Clear;
ADO_DURUM1.sql.Add('SELECT * FROM TBL_DURUM_1');
ADO_DURUM1.open;
////////////// DÖGÜYE BAŞLA
for M1:=0 to ADO_DURUM.recordcount-1 do begin
BTN_KAYIT_EKLE.Click; // DB EDİTTEKİ VERİLERİ ÇARPIP TABLO 4 E KAYDEDİYOR.
ADO_MAC1.next;
end;
end;
TÜM OLASILIKLARI ÇARPMAK VE VERİTABANINA KAYIT İÇİN BU KODLARIN DEVAMINDA NASIL BİR DÖNGÜ OLACAK?
Re: Delphi SQL de İç içe For Döngüsü Hakkında
Merhaba,
Bu tarz işlemleri Stored Procedure ile veritabanı tarafında daha kolay ve hızlı yapabilirsiniz.
Bir tablonun tüm kayıtlarını dolaşmak için :
şeklinde yapabilirsiniz.
Kolay gelsin.
Bu tarz işlemleri Stored Procedure ile veritabanı tarafında daha kolay ve hızlı yapabilirsiniz.
Bir tablonun tüm kayıtlarını dolaşmak için :
Kod: Tümünü seç
...
AdoDurum1.First;
while not AdoDurum1.Eof do
begin
//yapacağınız işlemleri yapın
AdoDurum1.Next;
end
Kolay gelsin.
Re: Delphi SQL de İç içe For Döngüsü Hakkında
mussimsek yazdı: 07 Kas 2023 02:33 Merhaba,
Bu tarz işlemleri Stored Procedure ile veritabanı tarafında daha kolay ve hızlı yapabilirsiniz.
Bir tablonun tüm kayıtlarını dolaşmak için :
şeklinde yapabilirsiniz.Kod: Tümünü seç
... AdoDurum1.First; while not AdoDurum1.Eof do begin //yapacağınız işlemleri yapın AdoDurum1.Next; end
Kolay gelsin.
Öncelikle teşekkür ederim. Buraya kadar bende de çalışıyor. ilk 2 olasığı (1*3*5 ve 2*3*5) veriyor. Sonraki 6 durumu nasıl yapacağım? Benim sorunum da zaten kalan 6 durumu bulamamak. Yeni Bir döngü kurup geriye kalan 6 durumu da bulmam gerekece.
Re: Delphi SQL de İç içe For Döngüsü Hakkında
Merhaba,
Aşağıdaki gibi iç içe döngü kullanabilirsiniz. Ancak uzun vadede yavaş çalışmaya başlayacaktır.
Aşağıdaki gibi iç içe döngü kullanabilirsiniz. Ancak uzun vadede yavaş çalışmaya başlayacaktır.
Kod: Tümünü seç
ADOTable1.Open();
ADOTable2.Open();
ADOTable3.Open();
ADOTable1.First();
while not ADOTable1.Eof do
begin
ADOTable2.First();
while not ADOTable2.Eof do
begin
ADOTable3.First();
while not ADOTable3.Eof do
begin
// Hesaplamalar burada.
// Deger := ADOTable1.FieldByName('a').AsInteger * ADOTable2.FieldByName('b').AsInteger * ADOTable3.FieldByName('c').AsInteger;
// 4ncü tabloya kayıt burada.
// ADOTable4.Append();
// ADOTable4.FieldByName('d').AsInteger := Deger;
// ADOTable4.Post();
ADOTable3.Next();
end;
ADOTable2.Next();
end;
ADOTable1.Next();
end;
-
- Üye
- Mesajlar: 16
- Kayıt: 22 May 2009 01:53
Re: Delphi SQL de İç içe For Döngüsü Hakkında
Slm, eğer ado üzerinden aç kapa ilerle gibi yaparsanız hem veri tabanında kayıt hataları alırsınız, hemde işlem gerçekten uzun sürer. bu sebeple eğer mysql veri tabanı kullaniyorsan senin örneğindeki gibi 4 adet tablo açtım ve herbirinde "sayi" alani var. tablolara ise senin gibi veri girişi yaptım.
inner join tb2
inner join tb1
bu kodu ado.query1.sql altına yazıp çalıştırdığında, sana
şeklinde bir liste verir.
bu şekilde tek bir tablo üzerinden işlem yapabilirsin. aslında mysql ile çarpma yapıp direk tablo 4 de de kaydebilirsin. çok hızlı çalışır. ama şimdi çıkmam gerek belki öğlendensonra yazarım.
select tb1.sayi, tb2.sayi, tb3.sayi from tb34 ADET TABLOM VAR. HER TABLODA KAYITLAR VAR. BEN BU 3 TABLODAKİ KAYITLARDA "ORAN" ALANLARINI ÇARPMAK VE TABLO 4 E Kaydetmek istiyorum.
ÖRNEK VERECEK OLURSAM:
TABLO1: 1 VE 2 SAYILARI VAR
TABLO2: 3 VE 4 SAYILARI VAR
TABLO3: 5 VE 6 ALTI SAYILARI VAR.
inner join tb2
inner join tb1
bu kodu ado.query1.sql altına yazıp çalıştırdığında, sana
Kod: Tümünü seç
1 - 3 - 5
1 - 3 - 6
1 - 4 - 5
1 - 4 - 6
2 - 3 - 5
2 - 4 - 6
2 - 4 - 5
2 - 4 - 6
bu şekilde tek bir tablo üzerinden işlem yapabilirsin. aslında mysql ile çarpma yapıp direk tablo 4 de de kaydebilirsin. çok hızlı çalışır. ama şimdi çıkmam gerek belki öğlendensonra yazarım.
En son muratturan tarafından 16 Kas 2023 04:28 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Üye
- Mesajlar: 16
- Kayıt: 22 May 2009 01:53
Re: Delphi SQL de İç içe For Döngüsü Hakkında
Kod: Tümünü seç
INSERT INTO tb4 (sayi)
(
select (tb1.sayi * tb2.sayi *tb3.sayi) as sonuc from tb3
inner join tb2
inner join tb1
);
tablo4 'ün görüntüsü
15
18
20
24
.... şeklinde gidiyor.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Delphi SQL de İç içe For Döngüsü Hakkında
Kod: Tümünü seç
SELECT * FROM TABLO1, TABLO2, TABLO3
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .