Tüm Versiyonu Göster : sql ile veri alma
arkadaşlar merhaba
sql ile logo tıgerden müşteri carilerini ve stok taki ürünlrin adet bazında satışını olmak istiyorum ama olmuyor bu konuda yardımcı olabilirmisiniz
lsuersoy
26-02-2009, 13:26
Bir örnek ile gösterebilirmisiniz...
Hangi alanların olmasını istiyorsunuz ?
lsuersoy
26-02-2009, 13:34
Logo Tiger dan Cari Listesini aşağıdaki kod yardımı ile getirebilirsiniz...
Kodu bir butona tanımlamalısınız...
ayrıca SETUP adında bir çalışma sayfanızda olmalı...
Private Sub CommandButton1_Click()
Dim Baglanti As New ADODB.Connection
Dim KayitSeti As New ADODB.Recordset
Dim Firma As String, Server As String, Database As String, Kullanıcı As String, Parola As String
Firma = Format(Sheets("SETUP").Range("B5"), "000")
Server = Sheets("SETUP").Range("B1").Value
Database = Sheets("SETUP").Range("B4").Value
Kullanıcı = Sheets("SETUP").Range("B2").Value
Parola = Sheets("SETUP").Range("B3").Value
sorgu = "SELECT CODE,DEFINITION_ FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_CLCARD " & "ORDER BY DEFINITION_" & ""
Baglanti.Open "Provider=SQLOLEDB; Data Source=" & Server & "; Initial Catalog=" & Database & "; User ID=" & Kullanıcı & "; Password=" & Parola & ";"
KayitSeti.Open sorgu, Baglanti
Cells(8, 1).CopyFromRecordset KayitSeti
KayitSeti.Close
Baglanti.Close
Set KayitSeti = Nothing
Set Baglanti = Nothing
End Sub
sayın lsuersoy yardımınızı için çok teşekkürler ama
Dim Baglanti As New ADODB.Connection hata veriyor
stok taki ürünlerdede stok miktarı ve satışı gerekiyor
lsuersoy
26-02-2009, 13:45
sayın lsuersoy yardımınızı için çok teşekkürler ama
Dim Baglanti As New ADODB.Connection hata veriyor
stok taki ürünlerdede stok miktarı ve satışı gerekiyor
ADODB bağlantısında hata vermesinin sebebi Librarylerin SET edilmemiş olması ile alakalı olabilir...
"Cari Kodu - Stok Kodu - Stok Adı - Toplam satış Miktarı - Toplam Satış tutarı " şeklinde mi istiyorsunuz ?
lsuersoy
26-02-2009, 13:45
VBA kod penceresinde Tools/References bölümü resimdeki gibi olmalı
SAYIN lsuersoy tamam problemi halletim ama cari kartlada son bakiyeleri nasıl görebilirim, stok ları ve satışları da ekleyebilirmiyim
lsuersoy
26-02-2009, 13:53
Herşey yapılabilir , burada önemli olan veritabanının yapısı ve sorgulamanın çevireceği sonucu bilecek kadar da T-SQL bilgisi gerekiyor...
Veritabanı yapısındaki ilişkileri biliyorsanız herşeyi yapabilirsiniz...
Cari Hesap Listesi + Son Bakiyeleri + Stok Kodu + Stok Açıklaması + Satışların Stok gruplamasına göre toplam Miktarı + Miktarların birim fiyatlar ile çarpım sonucu...Böyle bir sorgu yazılması gerekiyor...
Bu sorguyu yazmak benim de bir çırpıda yapabileceğim bir iş değil uğraşmak lazım...
Ama kesinlikle imkansız değil...
Kolay gelsin , iyi çalışmalar...
lsuersoy
26-02-2009, 13:58
Cari Hesap Kodu "M" ile başlayan Cari Hesapların son bakiyesini getiren MS Query kodu
SELECT CLCARD.CODE AS KODU, CLCARD.DEFINITION_ AS ÜNVANI, SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) AS BAKİYE, CASE WHEN SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) < 0 THEN SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) * - 1 ELSE 0 END AS [Alacak Bakiye], CLCARD.ADDR1 AS Adres1, CLCARD.ADDR2 AS Adres2, CLCARD.CITY AS Şehir, CLCARD.COUNTRY AS Ülke, CLCARD.POSTCODE AS PostaKodu, CLCARD.TELNRS1 AS TEL1, CLCARD.TELNRS2 AS TEL2, CLCARD.FAXNR AS FAKS, CLCARD.TAXNR AS Vergi_No, CLCARD.TAXOFFICE AS Vergi_Dairesi, CLCARD.DISCRATE AS iskonto, CLCARD.TOWN AS İLÇE, CLCARD.DISTRICT AS SEMT, CLCARD.STORECREDITCARDNO AS Plasiyer, CLCARD.ACTIVE AS Statüsü FROM LG_086_01_CLFLINE CLFLINE INNER JOIN LG_086_CLCARD CLCARD ON CLFLINE.CLIENTREF = CLCARD.LOGICALREF AND CLFLINE.CANCELLED = 0 GROUP BY CLCARD.CODE, CLCARD.DEFINITION_, CLCARD.ADDR1, CLCARD.ADDR2, CLCARD.CITY, CLCARD.COUNTRY, CLCARD.POSTCODE, CLCARD.TELNRS1, CLCARD.TELNRS2, CLCARD.FAXNR, CLCARD.TAXNR, CLCARD.TAXOFFICE, CLCARD.DISCRATE, CLCARD.TOWN, CLCARD.DISTRICT, CLCARD.STORECREDITCARDNO, CLCARD.ACTIVE HAVING (CLCARD.CODE LIKE 'M%') AND (CLCARD.ACTIVE = 0) ORDER BY CLCARD.BAKİYE DESC
SELECT CLCARD.CODE AS KODU, CLCARD.DEFINITION_ AS ÜNVANI, SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) AS BAKİYE, CASE WHEN SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) < 0 THEN SUM((1 - CLFLINE.SIGN) * CLFLINE.AMOUNT) - SUM(CLFLINE.SIGN * CLFLINE.AMOUNT) * - 1 ELSE 0 END AS [Alacak Bakiye], CLCARD.ADDR1 AS Adres1, CLCARD.ADDR2 AS Adres2, CLCARD.CITY AS Şehir, CLCARD.COUNTRY AS Ülke, CLCARD.POSTCODE AS PostaKodu, CLCARD.TELNRS1 AS TEL1, CLCARD.TELNRS2 AS TEL2, CLCARD.FAXNR AS FAKS, CLCARD.TAXNR AS Vergi_No, CLCARD.TAXOFFICE AS Vergi_Dairesi, CLCARD.DISCRATE AS iskonto, CLCARD.TOWN AS İLÇE, CLCARD.DISTRICT AS SEMT, CLCARD.STORECREDITCARDNO AS Plasiyer, CLCARD.ACTIVE AS Statüsü FROM LG_086_01_CLFLINE CLFLINE INNER JOIN LG_086_CLCARD CLCARD ON CLFLINE.CLIENTREF = CLCARD.LOGICALREF AND CLFLINE.CANCELLED = 0 GROUP BY CLCARD.CODE, CLCARD.DEFINITION_, CLCARD.ADDR1, CLCARD.ADDR2, CLCARD.CITY, CLCARD.COUNTRY, CLCARD.POSTCODE, CLCARD.TELNRS1, CLCARD.TELNRS2, CLCARD.FAXNR, CLCARD.TAXNR, CLCARD.TAXOFFICE, CLCARD.DISCRATE, CLCARD.TOWN, CLCARD.DISTRICT, CLCARD.STORECREDITCARDNO, CLCARD.ACTIVE HAVING (CLCARD.CODE LIKE 'M%') AND (CLCARD.ACTIVE = 0) ORDER BY CLCARD.BAKİYE DESC
Sayın lsuersoy yardımınız için çokteşekkürler şimdi sizin verdiğiniz kodlar üzerin de değişiklikler yapıp uyarlamaya çalışıyorum yol gösterdiğiniz için gerçekten çok teşekkür edrim
sayın lsuersoy yardımınız için ve çok teşekkürler tekrardan gönderdiğiniz kodlar üzüerinde çalışıp bişiler yapmaya çalışacağım yol gösterdiğiniziçin çok teşekkürler
lsuersoy
31-03-2009, 12:34
Tekrar Merhaba ;
Bu konu ile alakalı benimde bir sorunum var ,
Amacım Logo'dan 1 nolu kasanın iki tarih arasında sadece giriş hareketlerinin toplam değerini excel de bir hücreye yazdırmak istiyorum.
Bunun için oluşturduğum hata veren kod bloğum aşağıdadır.Acaba nerede hata yapmış olabilirim...
DefStr S
Private Sub CommandButton1_Click()
'Bir butonumuz var o butona tıklayınca sırası ile aşağıdaki işlemler gerçekleşecek
Dim Baglanti As Object, KayitSeti As Object
'Baglantı ve KayitSeti nesnelerini tanımlıyoruz
Set Baglanti = CreateObject("adodb.connection")
'Bağlantı nesnesinin türünü belirliyoruz
Set KayitSeti = CreateObject("adodb.recordset")
'KayıtSeti nesnesinin türünü belirliyoruz
strFirma = Format(Sheets("SETUP").Range("B5"), "000")
'İlgili EXCEL çalışma kitabında SETUP adında bir sayfa var,Bu sayfadaki B5 hücresine LOGO Firma numarasını yazacağız
strServer = Sheets("SETUP").Range("B1").Value
'İlgili EXCEL çalışma kitabında SETUP adında bir sayfa var,Bu sayfadaki B1 hücresine LOGO nun SERVER IP sini yazacağız
strDatabase = Sheets("SETUP").Range("B4").Value
'İlgili EXCEL çalışma kitabında SETUP adında bir sayfa var,Bu sayfadaki B4 hücresine LOGO nun DATABASE adını yazacağız
strKullanıcı = Sheets("SETUP").Range("B2").Value
'İlgili EXCEL çalışma kitabında SETUP adında bir sayfa var,Bu sayfadaki B2 hücresine SQL in USER adını yazacağız
strParola = Sheets("SETUP").Range("B3").Value
'İlgili EXCEL çalışma kitabında SETUP adında bir sayfa var,Bu sayfadaki B3 hücresine SQL USER ının şifresini yazacağız
' tarih1 = Format(Range("B1"), "yyyy-mm-dd")
' tarih2 = Format(Range("C1"), "yyyy-mm-dd")
'İlgili EXCEL çalışma kitabında verilerin listeleneceği bir sayfa var,Bu sayfadaki I2 hücresine TARİH yazacağız , formatı GG.AA.YY şeklinde olacak
'tarih2 = Format(Range("B1"), "yyyy-mm-dd")
'dbo.LG_311_01_INVOICE.DATE_ BETWEEN '" & tarih1 & "' AND '" & tarih2 & "'
' S değişkeni ve değişkenin alacağı değeri getiren T-SQL kodunu VBA formatında yazıyoruz
'S = "SELECT SUM(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.AMOUNT) AS Giren,"
'S = S & "FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD INNER JOIN"
'S = S & "LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES ON LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.CARDREF"
'S = S & "WHERE (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME, '" & tarih1 & "', 102) AND CONVERT(DATETIME, '" & tarih2 & "', 102)) AND"
'S = S & "(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.SIGN = 0) AND (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = 1)"
tarih1 = Format(Range("B1").Value, "yyyy-mm-dd")
tarih2 = Format(Range("C1").Value, "yyyy-mm-dd")
S = "SELECT SUM(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.AMOUNT) AS Giren,"
S = S & "FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD INNER JOIN,"
S = S & "LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES ON LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.CARDREF,"
S = S & "WHERE format(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.DATE_,'yyyy-mm-dd') BETWEEN '" & tarih1 & "' AND '" & tarih2 & "') AND"
S = S & "(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.SIGN = 0) AND (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = 1)"
Baglanti.Open "Provider=SQLOLEDB; Data Source=" & strServer & "; Initial Catalog=" & strDatabase & "; User ID=" & strKullanıcı & "; Password=" & strParola & ";"
'Bağlantı Nesnesini açıyoruz.
KayitSeti.Open S, Baglanti, 1, 1 'BU SATIRDA HATA ALIYORUM , bu satırda alınan hata SQL kodunun VBA syntaxında bir hata 'olduğu anlamına geliyor, ama o ufak ayrıntıyı henüz yakalayamadım..
'Kayıt Seti Nesnesini açıyoruz.
Range("A9:IV65536").ClearContents
'Tarih kıstasına göre butona her tıklandığında veriler yeniden listeleneceği için , daha önceki çok verinin üzerine az veri yazılması gerekebilir...listelenen verileri sildiriyoruz..tekrar yazdırıyoruz.
Range("B5").CopyFromRecordset KayitSeti
'KayıtSeti nesnesinin SQL sorgusundan çektiği bilgilerin , verilerin listeleneceği sayfada B5 hücresine yazılması için
KayitSeti.Close
Baglanti.Close
Set KayitSeti = Nothing
Set Baglanti = Nothing
strFirma = vbNullString
strServer = vbNullString
strDatabase = vbNullString
strParola = vbNullString
strKullanıcı = vbNullString
S = vbNullString
End Sub
lsuersoy
31-03-2009, 13:00
Sorgunun Sadeleştirilmiş hali
Private Sub CommandButton1_Click()
Dim Baglanti As Object, KayitSeti As Object
Set Baglanti = CreateObject("adodb.connection")
Set KayitSeti = CreateObject("adodb.recordset")
strFirma = Format(Sheets("SETUP").Range("B5"), "000")
strServer = Sheets("SETUP").Range("B1").Value
strDatabase = Sheets("SETUP").Range("B4").Value
strKullanıcı = Sheets("SETUP").Range("B2").Value
strParola = Sheets("SETUP").Range("B3").Value
tarih1 = Format(Range("B1").Value, "yyyy-mm-dd")
tarih2 = Format(Range("C1").Value, "yyyy-mm-dd")
S = "SELECT SUM(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.AMOUNT) AS Giren,"
S = S & "FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD INNER JOIN,"
S = S & "LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES ON LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.CARDREF,"
S = S & "WHERE format(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.DATE_,'yyyy-mm-dd') BETWEEN '" & tarih1 & "' AND '" & tarih2 & "') AND"
S = S & "(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.SIGN = 0) AND (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = 1)"
Baglanti.Open "Provider=SQLOLEDB; Data Source=" & strServer & "; Initial Catalog=" & strDatabase & "; User ID=" & strKullanıcı & "; Password=" & strParola & ";"
KayitSeti.Open S, Baglanti, 1, 1
Range("A9:IV65536").ClearContents
Range("B5").CopyFromRecordset KayitSeti
KayitSeti.Close
Baglanti.Close
Set KayitSeti = Nothing
Set Baglanti = Nothing
strFirma = vbNullString
strServer = vbNullString
strDatabase = vbNullString
strParola = vbNullString
strKullanıcı = vbNullString
S = vbNullString
End SubFakat yine aynı satır da hata alıyorum...Bu hatayı nasıl giderebiliriz ?
KayitSeti.Open S, Baglanti, 1, 1
Hata mesajı
Run-time error '-21472117900 ( 80040e14)':
incorrect syntax near the keyword 'FROM'.
Merhaba
From dan ve Where den önce gelen satırlardaki en son , işaretini kaldırın
AS Giren"
CARDREF" şeklinde olacak
Ayrıca S = S & "FROM ve S = S & "WHERE ifadelerini
S = S & " FROM ve S = S & " WHERE olarak (bir boşluk bırakarak ) başlatınız.
Merhaba
CARDREF'in hangi kasanın referansı olduğunu bildikten sonra Kasa toplamı için KSCARD ile birleşim yapmanıza gerek yok.
SELECTSUM(LG_XXX_XX_KSLINES.AMOUNT)AS [kasatop]
FROM LG_XXX_XX_KSLINES
WHERE(LG_XXX_XX_KSLINES.DATE_ <CONVERT(DATETIME,'2009-03-31 00:00:00', 102))AND(LG_XXX_XX_KSLINES.DATE_ >CONVERT(DATETIME,
'2009-01-01 00:00:00', 102))and(LG_XXX_XX_KSLINES.CARDREF=1)
lsuersoy
30-04-2009, 12:29
teşekkürler
arkadaşlar lks kullanıyorum...bakiye veren cari kartların ödeme vadelerinin hangi gün olacağına ait sql sorgusuna ihtiyacım var... şimdiden teşekkürler
Merhaba
VERITABANI_ISMI Kısmına kendi veritabanınızı yazınız.LG ile başlayan firma numaralarınıda kendine göre değiştiriniz.
Ödeme tarihi parametriktir.İsterseniz ölçütü cari hesaba görede yapabilirsiniz.
Excel'de boş bir sql sorgusu açıp aşağıdaki kodları sql kodlarının üzerine yapıştırınız.
istediğiniz ölçüte göre veri alabilirsiniz.
SELECT LG_010_CLCARD.CODE AS 'KOD', LG_010_CLCARD.DEFINITION_ AS 'UNVANI', LG_010_01_INVOICE.FICHENO AS 'FATURA NO', LG_010_01_PAYTRANS.PROCDATE AS 'FATURA TARİHİ', LG_010_01_PAYTRANS.DATE_ AS 'ÖDEME TARİHİ', LG_010_01_PAYTRANS.TOTAL AS 'TUTAR'
FROM VERITABANI_ISMI.dbo.LG_010_01_INVOICE LG_010_01_INVOICE, VERITABANI_ISMI.dbo.LG_010_01_PAYTRANS LG_010_01_PAYTRANS, VERITABANI_ISMI.dbo.LG_010_CLCARD LG_010_CLCARD
WHERE LG_010_01_PAYTRANS.FICHEREF = LG_010_01_INVOICE.LOGICALREF AND LG_010_01_INVOICE.CLIENTREF = LG_010_CLCARD.LOGICALREF AND LG_010_01_PAYTRANS.CARDREF = LG_010_CLCARD.LOGICALREF AND ((LG_010_01_INVOICE.TRCODE=8) AND (LG_010_01_PAYTRANS.MODULENR=4) AND (LG_010_01_PAYTRANS.PROCDATE Between ? And ?))
ORDER BY LG_010_01_INVOICE.FICHENO
zafer bey ilginize teşekkür ederim
Üstadım problem şu;
1- Herhangi bir cari kartta
a) gelen veya kesilen faturaya ilişkin herhangi bir ödeme (çekler, senetler veya nakit) bire bir yapılmış ise problem yok
b) Faturaya ilişkin ödeme aracı eksik gelmiş ise kalan cari bakiyenin ödeme zamanı ne olacak
yapılabiliyorsa sorgu şöyle çalışmalı;
1- Cari kartın bakiyesine bakmalı
2- enson faturadan başlamak üzere cari kartın bakiyesine göre vade koymalı
Diyelim ki Cari bakiye: 1.000
Son faturalar ise : 900 ve 600
bana raporda 900 ün ne zaman ödeneceği ve diğer faturadan kalan 100 ün ne zaman ödeceği ile ilgili rapor yapmalı
Merhaba
Ben LKS kullanmıyorum.Logo'nun kendi raporları ile alınabilirmi diye program danışmanınıza sorabilirmisiniz.
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.