Bir Sql sorgusu

Firebird ve Interbase 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ı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Bir Sql sorgusu

Mesaj gönderen Bil_Bakalım »

Herkese merhabalar.
Mysql kullanarak Delphi 7.0 da bir muhasebe programı yazıyorum.Soracağım sorunun cevabını delphi kodları kullanarak yapabiliyorum.ama işlem uzun sürüyor.Yeteri kadar Sql bilmediğim için sizlere bir danışmak istedim.Sorun şu

Kod: Tümünü seç

tarih   belge_no            Borc      Alacak      Bakiye
01.05      1                100         -         100
03.05      2                            75         25
05.05      3                           100         -75
06.05      4                 200        -         125
Bu işlemi bir edit üzerinde carikodu parametresini alarak sql sorgusu olarak yaptırmak istiyorum.

(Buna benzer bir çözümü sanki daha önce gördüm gibi ama o kadar aradım tekrar göremedim. :oops: Yada halisünasyon görmeye başladım. )
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Size iki adet link veriyorum burada yazılanları okuyun.

http://www.delphiturkiye.com/index.php?page=dbsql.htm
http://www.delphiturkiye.com/index.php? ... lquery.htm

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

:lol: Cevap almak ne güzel. Hocam verdiğiniz linkler için teşekkür ederim.
Temel sql komutlarını biliyorum.Ama şu bakiye kısmında önceki satırın bakiyesini nasıl alacağımı bulamadım.

Yani
delphide borc-alacak dan çıkan tutarı(buna öncekibakiye dedim) bir değişkene atıp bir sonraki satırda yaptığım (borc-alacak)+öncekibakiye hesaplamasını sql de nasıl yapacağımı bulamıyorum.

Umarım anlatabilmişimdir.

sql içinde iç içe select ifadelerini kullanamıyorum yada union işlemini yaparken hata alıyorum. :oops: Mutlaka hata bendedir.Bunlar için yol gösterebilirseniz sevinirim
onaydin

Mesaj gönderen onaydin »

-Veritabanında bakiye alanı mevcut mu, yoksa rapor alınırken mi görülmek isteniyor.?
İkincisi ile ilgili bir soru sanırım sorulmuştu ama o biraz uzun yol.
Birinci durum ise öncelikle mysql de computed source olay var mı o araştırılabilir. Yoksa

Kod: Tümünü seç

INSERT  INTO borc_alacak( borc, alacak, bakiye ) 
SELECT 20 , 0, ( sum( borc )  - sum( alacak )  + 20 - 0 )
FROM borc_alacak;
gibi bir kodla veya max belge_no nun bakiyesi sum lar yerine konulup halledilebilir.
Misafir

Mesaj gönderen Misafir »

@bil_bakalım, bu konu ile ilgili örnek bir sorguyu programlama bölümünde sorduğunuz sorunun altına yazmıştım. ms sql de çalıştığını söyleiştim. yapmanız gereken sadece mysql için sytnaxını düzenlemek.

kolay gelsin.
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

mikrocu yazdı:@bil_bakalım, bu konu ile ilgili örnek bir sorguyu programlama bölümünde sorduğunuz sorunun altına yazmıştım. ms sql de çalıştığını söyleiştim. yapmanız gereken sadece mysql için sytnaxını düzenlemek.

kolay gelsin.
Gönderdiğin kodu mysqlfront da gerekli değişiklikleri yaptığım halde çalıştıramadım.Ayrıca o kodda belli bir değere göre değeri buluyor ama update işlemi yapmıyor. Benim istediğim en üst bölümde de örneğini verdiğim gibi cari kodu verilen(parametre ile alınacak) bir kişinin sql kodu kullanılarak değerinin bulunması ve tabloyo uptade edilmesi. Tabloda borc - alacak - bakiye alanları mevcut.

Ve bu işlemler için parametre olarak alınan carikod dışında tüm işlemler tek bir sorgu ile yapılsın istiyorum.Şu anda 3 sorgu ile bunu yapıyorum :oops:
poke53280
Üye
Mesajlar: 25
Kayıt: 23 Haz 2004 02:56
Konum: TOKAT

Daha önceden denemiştim.

Mesaj gönderen poke53280 »

Kod: Tümünü seç

SELECT MUSTERI,ISLEM,BORC,ALACAK, 
(SELECT SUM(BORC-ALACAK) FROM BAKIYE b WHERE b.islem_tarihi <= a.islem_tarihi) 
FROM BAKIYE a 
Where Kod= :CKOD;

Sonuçlar;
MUSTERI ISLEM BORC ALACAK BAKIYE  
---------------------------------------------- 
1                1       10        0        0      
1                1        0       20       10
1                1        0       20      -10
Fakat bu kodda alt alta 2 adet aynı tarih varsa sonuç ilkinde çıkıyor. ikincisinde de aynı oluyor bu yüzden. Birde böyle kodda, hesaplanmış sql alanı olduğundan sadece raporlarda kullanabilirsin. yani bir dbgride atıpda değiştiremezsin. eğer direct işlemek istiyorsan bence bu musterikod'a ait kayıtları bir normal gride (dbgrid değil) aktar. ve normal gridde bakiye hesabını yaptırabilirsin. Sonra griddeki her hücre değişiminde bu kayıtları veritabanındakilerle yer değiştir. Sanırım salt Sql ile çözülecek birşey değil. Çözebilirsen bizde bilelim. kolay gele...
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

şu sql komutlarının içinde içiçe select ifadelerini kullanabilsem ve sonuçta update edebilsem bu iş olacak galiba :lol:

Sevgili dostlar verdiğiniz kodları denemek istediğimde veritabanı bir hata veriyor.Bırakın yeni fikirler geliştirmeyi bu hatanın nerden kaynaklandığını bulmak bir sorun oldu şimdi :oops:
you have an error in your sql syntax.Check the manual that corresponds to your mysql server version for the right syntax to use error 'SELECT sum(borc-alacak) from bakiye b where b.tarih<=a.t
gördüğünüz gibi ikinci select ifadesinde hata veriyor. Sorunun syntax olduğun biliyorum. :x
onaydin

Mesaj gönderen onaydin »

MySQL 4.1 den itibaren subquery leri destekliyor.
Yukardaki sql de bir hata yok belki sizin kullandığınız
mysql'in sürümü düşüktür ondan syntax hatası veriyor olabilir.
Denedim çalışıyor :) .
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

bende mysql in 4.0.22 versiyonu var.Hemen 4.1 i indirip deneyeceğim teşekkür ederim dostlar
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

:eyo: Arkadaşlar mysql in 4.1 ini indirip kurunca verilen sql örnekleri çalıştı. Ama benim yaptığım yanlışlığı kimse yapmasın datalarımın yedeklerin almadan install ettim. veritabanı dağıldı. Bilginize sunulur
select a.id, a.tarih, a.borc, a.alacak,
(select (sum(b.borc) - sum(b.alacak)) as bakiye from carihareket b
where b.id <= a.id and carikod=:b) as bakiye from carihareket a WHERE carikod=:a order by id
çıkan sonucun bakiye kısmını tablomdaki tutar alanına aktardıktan sonra istediğim her şey olacak teşekkür ederim
Cevapla