Aceesde iç içe sorgu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Aceesde iç içe sorgu

Mesaj gönderen baloglurecep »

arkadaşlar selam ve saygılar... acceste basit bir güncelleştirme sorusu bir kaçgündür çözümsüzlük üretiyor. Benim kafam karıştı bir de siz bakıverin. iki tablo var. satislar, bakiyeler
İki tabloda birbirine musteri_id alanı ortak alan. Satıslar tbalosuna veri girişi olduğunda ( programdan kaydete basıldığında) satışlarda kaydedilen tutar hangi işlem türüne ve hangi müşteriye kaydedildiyse bakiyeler tablosunda da satışlar tablosundaki o müşterinin idine bakacak ve işlem türüne bakarak gruplayıp toplayack topladığını da bakiyelerdeki ilgili alana atacak. aslında bu sorgu firibirde çok güzel çalışıyor ama accesde çalışmadı.

Kod: Tümünü seç


UPDATE bakiyeler SET bakiyeler.toplam_alacak = ( SELECT Sum(satislar.tutar) AS Toplatutar FROM satislar
GROUP BY satislar.musteri_id, satislar.islem_tur
HAVING (  ((satislar.musteri_id)=6) AND ( (satislar.islem_tur)=1) )) where ((bakiyeler.musteri_id)=6) ;


Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Aceesde iç içe sorgu

Mesaj gönderen sabanakman »

Hata mesajını da yazmanız daha sağlıklı olacaktı. İlk bakışta bir şey söylemek zor ama HAVING ve WHERE için verilen şartlardaki en dışta kalan parantezler ters gelmiş olabilir. Ayrıca bir de aşağıdaki (test edilmemiş :mrgreen: ) sorguyu da denemenizi önerebilirim.

Kod: Tümünü seç

UPDATE bakiyeler SET bakiyeler.toplam_alacak = tbl.Toplatutar from 
  (SELECT Sum(satislar.tutar) AS Toplatutar FROM satislar
   GROUP BY satislar.musteri_id, satislar.islem_tur
   HAVING satislar.musteri_id=6 AND satislar.islem_tur=1) as tbl
where bakiyeler.musteri_id=tbl.musteri_id
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Aceesde iç içe sorgu

Mesaj gönderen baloglurecep »

şaban bey hocam tekrar selam ve saygılar... dediğinizi yaptım ama sonuç olumlu değil. acces sql dilinie çok fazla cevap vermiyor mu diyeceğim artık. yada veri tabanını değişeceğm. hata olarak işlem güncelleştirilebilir sorgu kullanmalıdır diye hata mesajı vermekte. anlamadım gitti. firibirde geçireceğim olmazsa.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Aceesde iç içe sorgu

Mesaj gönderen unicorn64 »

Burada dendiğine göre mdb dosyası ağda falansa erişim kısıtlamasından kaynaklanabiliyormuş, yetki vermek gerekiyormuş..

genelde web sayfalarının dblerinde karşılaşılmış sanırım, genel sıkıntı izinler gibi görünüyor.. burada da benzer şeyler konuşulmuş

Ayrıca burada ağda kullanılan bir uygulamada mdb nin c: sürücüsü yerine d: ye alınmasının sorunu çözdüğü yazılmış

daha fazlası için bkz
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Aceesde iç içe sorgu

Mesaj gönderen baloglurecep »

ben de nette google hocamıza sordum hata mesajını yazarak arattım. çıkan yanıtlar beni tatmin etmedi. ben projelerim d bölümünde zaten. direk delphiden göndermiyorum sorguyu. sorguyu çalıştırmak için öncelikle acces mdb dosyasından test ediyorum. aldığım hata mesajıda bu test sonucundan çıkan mesaj.
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Aceesde iç içe sorgu

Mesaj gönderen baloglurecep »

arkadaşlar firibirdde çalışan kodları yazıyorum. işlem aynı işlem sadece veri tabanı ve alanlar ismi değişik. firibirdde çalışan kodlar accesde çalşmıyor

Kod: Tümünü seç

update bakiyeler set bakiyeler.satis=
(select sum (satislar.toplam) from satislar where (bakiyeler.musteri_id=satislar.musteri_id) and (satislar.musteri_id=13 and satislar.tur_id=1));

Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Aceesde iç içe sorgu

Mesaj gönderen unicorn64 »

bir de şu şekilde dener misin...

Kod: Tümünü seç

update bakiyeler 
inner join satislar on bakiyeler.musteri_id=satislar.musteri_id
set bakiyeler.satis=sum (satislar.toplam)
where ((satislar.musteri_id=13) and (satislar.tur_id=1));
bu arada ik mesajında bakiyeler.toplam_alacak ı güncelliyordun şimdi bakiyeler.satis olmuş...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
baloglurecep
Üye
Mesajlar: 261
Kayıt: 21 Tem 2006 04:59
İletişim:

Re: Aceesde iç içe sorgu

Mesaj gönderen baloglurecep »

selamlar arkadaşlar artık azgeçtim sayılır. acces cevap vermiyor benim istediğim sorguya. uzun yoldan gitmeye devam. 2 satırlık güncelleştirme sorgusu yerine 8 tane sorgu ile işi halletim :) tabi bu da kayıt sayısı çok olduğunda sorgu süresi uzayacak ama başka da çare yok gibi... yada firibirdle yapacam programı. ondada tak çalıştır özelliği olmayacak. yardımlarınız herekse teşekkür ederim.
Cevapla