Skip to main content

AccessTr.neT


Ms Sql Tabanlı Access Arayüzde Birleşim Sorgusu Problemi

Ms Sql Tabanlı Access Arayüzde Birleşim Sorgusu Problemi

Çözüldü #1
Merhabalar, Ms Access tabanlı programını MS Sql tabanına dönüştürme çalışması yapıyorum, arayüzüm yine Ms Access olacak.
Siparişlerim ile mevcut saha stokları değerlendirip stoktan sevk edilebilecek siparişleri listelemek istiyorum, halihazırda Access tabanlı çalışan programda yaptığım birleşim sorgusu problemsiz çalışıyorken Ms Sql tabanlı olduğunda birleşim sorgusu hata veriyor.
Veritabanı MS Sql olduğu için veritabanını ekleyemiyorum ama arayüz dosyasını ekledim.
Problemim şu:
MSR1 (Müşteri sipariş rezerv-1) sorgusu ile stoktan sevk miktarı girilmiş sipariş kalemleri için sevk miktarlarına göre rezerv bilgilerini tespit ediyoruz. Sorgusu şu şekilde:
Kod:
SELECT "STOK" AS SAHA_MUSTERI, dbo_SIPARIS_LISTE.LISTE_URUN_UST_ADI AS SAHA_URUN_UST_ADI, dbo_SIPARIS_LISTE.LISTE_URUN_KOD AS SAHA_URUN_KOD, dbo_SIPARIS_LISTE.LISTE_URUN AS SAHA_URUN, dbo_SIPARIS_LISTE.LISTE_RENK AS SAHA_RENK, dbo_SIPARIS_LISTE.LISTE_ADET, dbo_SIPARIS_LISTE.LISTE_STOKTAN_ADET, dbo_SIPARIS_LISTE.LISTE_TOPLAM_SEVKEDILEN, dbo_SIPARIS_LISTE.LISTE_SEVK_KALAN, IIf([LISTE_SEVK_KALAN]>=[LISTE_STOKTAN_ADET],[LISTE_STOKTAN_ADET],[LISTE_SEVK_KALAN]) AS REZERV, dbo_SIPARIS_LISTE.LISTE_KIMLIK, dbo_SIPARIS_LISTE.SIPARIS_NO
FROM dbo_SIPARIS_LISTE
WHERE (((dbo_SIPARIS_LISTE.LISTE_STOKTAN_ADET)>0));

MSR2 (Müşteri sipariş rezerv-2) sorgusu ile MSR1 sorgu sonuçlarını gruplandırarak net rezervi ortaya koyuyoruz. Sorgusu şu şekilde:
Kod:
SELECT MSR1.SAHA_MUSTERI, MSR1.SAHA_URUN_UST_ADI, MSR1.SAHA_URUN_KOD, MSR1.SAHA_URUN, MSR1.SAHA_RENK, Sum(MSR1.REZERV) AS NET_REZERV, 0 AS Kalan
FROM MSR1
GROUP BY MSR1.SAHA_MUSTERI, MSR1.SAHA_URUN_UST_ADI, MSR1.SAHA_URUN_KOD, MSR1.SAHA_URUN, MSR1.SAHA_RENK;

SSD1 (Saha Stok Durum-1) sorgusu ile üretilen ve sevk edilen ürünlere göre saha stokta yeralan müşterile-müşterisiz tüm ürünleri gruplandırarak listeliyoruz. Sorgusu şu şekilde:
Kod:
SELECT dbo_SAHA_STOK_DURUM.SAHA_MUSTERI, dbo_SAHA_STOK_DURUM.SAHA_URUN_UST_ADI, dbo_SAHA_STOK_DURUM.SAHA_URUN_KOD, dbo_SAHA_STOK_DURUM.SAHA_URUN, dbo_SAHA_STOK_DURUM.SAHA_RENK, (Sum([dbo_SAHA_STOK_DURUM].[SAHA_ADET_GIREN]))-(Sum([dbo_SAHA_STOK_DURUM].[SAHA_ADET_CIKAN])) AS Kalan, 0 AS NET_REZERV
FROM dbo_SAHA_STOK_DURUM
GROUP BY dbo_SAHA_STOK_DURUM.SAHA_MUSTERI, dbo_SAHA_STOK_DURUM.SAHA_URUN_UST_ADI, dbo_SAHA_STOK_DURUM.SAHA_URUN_KOD, dbo_SAHA_STOK_DURUM.SAHA_URUN, dbo_SAHA_STOK_DURUM.SAHA_RENK;

Burdan sonrasında sipariş bilgileri ile saha stok bilgilerini bir birleşim sorgusuyla birleştirmem gerekiyor. Bunu da SSD1MSR2 adında bir birleşim sorgusuyla yapıyorum. Sql kodları şöyle:
Kod:
SELECT SSD1.SAHA_MUSTERI, SSD1.SAHA_URUN_UST_ADI, SSD1.SAHA_URUN_KOD, SSD1.SAHA_URUN, SSD1.SAHA_RENK, SSD1.Kalan, SSD1.NET_REZERV
FROM SSD1 INNER JOIN MSR2 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI
WHERE (((SSD1.Kalan)>=0))
ORDER BY SSD1.SAHA_URUN_KOD;
UNION SELECT MSR2.SAHA_MUSTERI, MSR2.SAHA_URUN_UST_ADI, MSR2.SAHA_URUN_KOD, MSR2.SAHA_URUN, MSR2.SAHA_RENK, MSR2.Kalan, MSR2.NET_REZERV
FROM SSD1 INNER JOIN MSR2 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI;

Yukarıdaki sorguların hepsi Ms Access veritabanı kullanıldığında problemsiz çalışıyor ancak veritabanı MS Sql olunca Access arayüzünde yaptığım yukarıdaki sorgulardan MSR1, MSR2, SSD1 Seçme sorgularında problem yok ama SSD1MSR2 Birleşim sorgusunu çalıştırmak istediğimde ekteki resimde yeralan hata mesajını alıyorum:

[Resim: do.php?img=9134]

Sizce nerede hata yapıyorum.
.rar AccessMsSQL.rar (Dosya Boyutu: 298,49 KB | İndirme Sayısı: 7)
Son Düzenleme: 23/07/2019, 08:51, Düzenleyen: hbal09.
Cevapla
#2
fazladan bir ";" var galiba sorguda sadece en sonda ";" kullanılır diye biliyorum
"union" dan önceki ";" kaldırıp öyle dener misiniz?
SELECT SSD1.SAHA_MUSTERI, SSD1.SAHA_URUN_UST_ADI, SSD1.SAHA_URUN_KOD, SSD1.SAHA_URUN, SSD1.SAHA_RENK, SSD1.Kalan, SSD1.NET_REZERV
FROM SSD1 INNER JOIN MSR2 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI
WHERE (((SSD1.Kalan)>=0))
ORDER BY SSD1.SAHA_URUN_KOD
UNION SELECT MSR2.SAHA_MUSTERI, MSR2.SAHA_URUN_UST_ADI, MSR2.SAHA_URUN_KOD, MSR2.SAHA_URUN, MSR2.SAHA_RENK, MSR2.Kalan, MSR2.NET_REZERV
FROM SSD1 INNER JOIN MSR2 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI;
Cevapla
#3
Sn halily,
önerinizi denedim ama maalesef aynı hata uyarısını veriyor.
Cevapla
#4
öncelikle şunu sorayım tabloları doğrudan Accesse eklediğinizde çalışıyor mu?
mümkünse çalışmanızı o haliyle en azından sahte de olsa verilerin olduğu haliyle eklemeniz mümkün mü?
son olarak aşağıdaki gibi dener misiniz?
Not: MSSQL ile deneyimim olmadığı için maalesef ancak bu kadar yardım edebiliyorum
SELECT SSD1.SAHA_MUSTERI, SSD1.SAHA_URUN_UST_ADI, SSD1.SAHA_URUN_KOD, SSD1.SAHA_URUN, SSD1.SAHA_RENK, SSD1.Kalan, SSD1.NET_REZERV
FROM SSD1 INNER JOIN MSR2 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI
WHERE (((SSD1.Kalan)>=0))
ORDER BY SSD1.SAHA_URUN_KOD
UNION
SELECT MSR2.SAHA_MUSTERI, MSR2.SAHA_URUN_UST_ADI, MSR2.SAHA_URUN_KOD, MSR2.SAHA_URUN, MSR2.SAHA_RENK, MSR2.Kalan, MSR2.NET_REZERV
FROM MSR2 INNER JOIN SSD1 ON SSD1.SAHA_MUSTERI = MSR2.SAHA_MUSTERI;
Cevapla
#5
Maalesef olmadı hocam, tablolar Ms Accesste oladuğu zaman problemsiz çalışıyor.
şimdi MS Sql için 4 tablo ve bir ilişki için generated script hazırlayıp atacağım.
Cevapla
#6
Merhabalar,
yukarıdaki sorgularda kullanılan 4 adet tablonun gerçek verilerinde bazı değişiklikler yaparak generated script yaparak Sql dosyasını oluşturdum. ekteki dosyayı rar'dan çıkarttıktan sonra birlikte aç deyip SSMS ile beraber açılıyor. ben veritabanı ismi olarak MYDB ismini seçtim, Execute yapmadan önce MS SQL'de MYDB isminde bir veritanı oluşturup Execute ederseniz tünm tablo ve veriler veritabanında oluşur. ODBC veri kaynakları ile bu veritabanının dosya dsn'si oluşturulup bağlı  tablolar bu dsn'e bağlandı mı veri üzerinden işlemleri kontrol etmeye fırsat verir.
.rar DB.rar (Dosya Boyutu: 79,58 KB | İndirme Sayısı: 3)
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da