Uzun SQL Tümceciği

Katılım
25 Temmuz 2005
Mesajlar
24
Uzun bir SQL'im var
Kod:
SELECT
A.ODANO, A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2,
A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY,
F.FOLYONO,F.DEPT,F.DOVIZKODU,F.BORC,SUM(F.BORC),COUNT(F.BORC)
FROM(
SELECT * FROM CIN WHERE 1=1 Union ALL
SELECT * FROM COUT WHERE 1=1) A,
FOLYOISL F
WHERE F.FOLYONO = A.KNO AND
A.KONAKLAMA NOT IN ('COMP','HUSE','H/USE','FCOMP') AND
A.COUTTARIHI = '06.15.2006' AND F.DEPT = '01'
GROUP BY
A.ODANO,A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2,
A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY,
F.FOLYONO,F.DEPT,F.DOVIZKODU,F.BORC
ORDER BY A.ODANO,F.FOLYONO
bunu VBA'da ekliyemiyorum
VBA'da 255 karakteri geçtiğinden işlem olmuyor
internette aramalarımdan aşağıdaki fonksiyonu buldum
şimdi bu fonksiyonla nasıl yapabilirim

Kod:
Function StringToArray(sSQL As String) As Variant 
    Dim aTemp() As String 
    Dim i As Long, j As Long 
    ReDim aTemp(1 To (Len(sSQL) \ 255) + 1) 
    j = 1 
    For i = 1 To Len(sSQL) Step 255 
        aTemp(j) = Mid(sSQL, i, 255) 
        j = j + 1 
    Next i 
    StringToArray = aTemp 
End Function
Teşekürler
 

zafer

Super Moderator
Yönetici
Katılım
8 Mart 2005
Mesajlar
3,288
Excel Vers. ve Dili
OFFICE 2003 TÜRKÇE
OFFICE 2010 TÜRKÇE
Merhaba

A.KTARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2, _

satır sonlarını _ ile ayısanız

xxxxx,xxxxxxx,xxxxxxxxx, _
 
Katılım
25 Temmuz 2005
Mesajlar
24
zafer' Alıntı:
Merhaba

A.KTARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2, _

satır sonlarını _ ile ayısanız

xxxxx,xxxxxxx,xxxxxxxxx, _
dediğiniz şekildede yaptım ancak tüm karakter birleşip 255'i aşınca problem oluşuyor ve internette yapmış olduğum aramalardada böyle bir karakter limitinin olduğunu öğrendim.

çözümüde bu fonksiyon olarak göstermişler. Ancak bu fonksiyonu nasıl kullanıcağımı bilemedim.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,650
Excel Vers. ve Dili
Pro Plus 2021
sql den anlamam ama yazmış olduğunuz fonksiyon sql cümleciğini varianta çeviriyor,
Sql = StringToArray(Sql)
Şeklinde varianta çeviriyorsunuz gerisini bilemem.


[vb:1:03074a4577]Sub dene()
Sql = "SELECT A.ODANO, A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2," & _
"A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY," & _
"F.FOLYONO , F.DEPT, F.DOVIZKODU, F.BORC, Sum(F.BORC), Count(F.BORC)" & _
"FROM(SELECT * FROM CIN WHERE 1=1 Union ALL" & _
"SELECT * FROM COUT WHERE 1=1) A, FOLYOISL F WHERE F.FOLYONO = A.KNO AND" & _
"A.KONAKLAMA NOT IN ('COMP','HUSE','H/USE','FCOMP') AND A.COUTTARIHI = '06.15.2006' AND F.DEPT = '01'" & _
"Group BY A.ODANO,A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2," & _
"A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY, F.FOLYONO , F.DEPT, F.DOVIZKODU, F.BORC" & _
"ORDER BY A.ODANO,F.FOLYONO"

Sql = StringToArray(Sql)

End Sub
Function StringToArray(sSQL As String) As Variant
Dim aTemp() As String
Dim i As Long, j As Long
ReDim aTemp(1 To (Len(sSQL) \ 255) + 1)
j = 1
For i = 1 To Len(sSQL) Step 255
aTemp(j) = Mid(sSQL, i, 255)
j = j + 1
Next i
StringToArray = aTemp
End Function[/vb:1:03074a4577]
 
Katılım
25 Temmuz 2005
Mesajlar
24
[vb:1:f78f827ae7]Dim sSQL, ssql2, ssql3
sSQL = "SELECT A.ODANO,A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2,A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY,F.FOLYONO,F.DEPT,F.DOVIZKODU,F.BORC,SUM(F.BORC),COUNT(F.BORC) "
ssql2 = "FROM(SELECT * FROM CIN WHERE 1=1 UNION ALL SELECT * FROM COUT WHERE 1=1) A, FOLYOISL F "
ssql3 = "WHERE F.FOLYONO = A.KNO AND A.KONAKLAMA NOT IN ('COMP','HUSE','H/USE','FCOMP') AND A.COUTTARIHI = '06.17.2006' AND F.DEPT = '01'"
ssql4 = "GROUP BY A.ODANO,A.KTARIHI,A.CITARIHI,A.MADI1,A.ODATIPI,A.KISI,A.COCUK,A.COCUK2,A.ACENTA,A.ODAFIYATI,A.DOVIZKODU,A.DOVIZKURU,A.FTIPI,A.INDIRIMY,F.FOLYONO,F.DEPT,F.DOVIZKODU,F.BORC ORDER BY A.ODANO,F.FOLYONO"
....
....
....
....
.CommandText = Array(sSQL, ssql2, ssql3, ssql4)
[/vb:1:f78f827ae7]

yukarıdaki şekilde çözülmüştür. Bir başkasına örnek olması dileğiyle
Teşekürler
 
Katılım
1 Haziran 2005
Mesajlar
2
merhaba

bendeki cümle daha uzun ve çözemiyorum
yardımcı olursanız sevinirim



Dim Sql1, Sql2, Sql3, Sql4, Sql5, Sql6, Sql7, Sql8, Sql9, Sql10

Sql1 = "SELECT dbo.TBLBNKHESSABIT.ACIKLAMA , SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-01') THEN dbo.TBLMCEK.TUTAR ELSE 0 END) ,"
Sql2 = "SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-02') THEN dbo.TBLMCEK.TUTAR ELSE 0 END) , SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-03') THEN dbo.TBLMCEK.TUTAR ELSE 0 END) , "
Sql3 = "SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-04') THEN dbo.TBLMCEK.TUTAR ELSE 0 END) , SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-05')THEN dbo.TBLMCEK.TUTAR ELSE 0 END) , "
Sql4 = "SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-06') THEN dbo.TBLMCEK.TUTAR ELSE 0 END) , SUM(CASE WHEN dbo.TBLMCEK.SC_SONDUR = 'B' AND (dbo.TBLMCEK.VADETRH = '2007-05-07')THEN dbo.TBLMCEK.TUTAR ELSE 0 END)"
Sql5 = "FROM dbo.TBLMCEK LEFT OUTER JOIN dbo.TBLBNKHESSABIT ON dbo.TBLMCEK.SC_VERILENK = dbo.TBLBNKHESSABIT.NETHESKODU GROUP BY dbo.TBLBNKHESSABIT.HESAPTIPI, dbo.TBLBNKHESSABIT.ACIKLAMA, dbo.TBLMCEK.SC_YERI, dbo.TBLMCEK.SC_SONDUR HAVING (dbo.TBLBNKHESSABIT.HESAPTIPI = 5) AND (dbo.TBLMCEK.SC_YERI = 'T')"
Sql6 = "Union ALL"
Sql7 = "SELECT ISNULL(SC_VERILENK, 'PORTFOY') , SUM(CASE WHEN (VADETRH = '2007-05-01 ') THEN TUTAR ELSE 0 END) ,"
Sql8 = "SUM(CASE WHEN (VADETRH = '2007-05-02 ') THEN TUTAR ELSE 0 END) , SUM(CASE WHEN (VADETRH = '2007-05-03 ') THEN TUTAR ELSE 0 END) , SUM(CASE WHEN (VADETRH = '2007-05-04 ') THEN TUTAR ELSE 0 END) ,"
Sql9 = "SUM(CASE WHEN (VADETRH = '2007-05-05 ') THEN TUTAR ELSE 0 END) , SUM(CASE WHEN (VADETRH = '2007-05-06 ') THEN TUTAR ELSE 0 END) , SUM(CASE WHEN (VADETRH = '2007-05-07 ') THEN TUTAR ELSE 0 END)"
Sql10 = "FROM dbo.TBLMCEK AS TBLMCEK_1 GROUP BY SC_SONDUR, SC_YERI, SC_VERILENK HAVING (SC_YERI = 'P') AND (SC_SONDUR = 'B') "


'Array(sSQL, ssql2, ssql3, ssql4)

With Selection.QueryTable
.Connection = Array(Array( _
"ODBC;DRIVER=SQL Server;SERVER=DEMETER;UID=administrator;APP=Microsoft Office 2003;WSID=DEMETER;DATABASE=GUNESPAN07;Trusted_Connectio" _
), Array("n=Yes"))
.CommandText = Array(Sql1, Sql2, Sql3, Sql4, Sql5, Sql6, Sql7, Sql8, Sql9, Sql10)
.Refresh BackgroundQuery:=False
End With
 
Üst