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
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. Mutlaka hata bendedir.Bunlar için yol gösterebilirseniz sevinirim
-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
@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.
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
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...
şu sql komutlarının içinde içiçe select ifadelerini kullanabilsem ve sonuçta update edebilsem bu iş olacak galiba
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
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.
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 .
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