Sql like kullanımı hakkında

Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
Merhabalar excele makro ile sqlden veri çekiyorum userform yaptım . stokadını textbox girerek virgülle ayrılmış şekilde veri girerek like gibi çekmek istiyorum .

arko,dove,axe gibi textbox yazıcam TB.STOKADI LIKE 'arko%' or TB.STOKADI LIKE 'dove%' or TB.STOKADI LIKE 'axe%' böyle algılaması için nasıl kod yazmam gerekiyor. Yardımcı olursanız sevinirim. yabancı kaynaklarada baktım çözüm bulamadım
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,893
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
.

Kod:
Private Sub CommandButton1_Click()
    metin = Me.TextBox1.Text
    aranan = ","
    a = Len(metin) - Len(WorksheetFunction.Substitute(metin, aranan, ""))

    'arko,dove,axe gibi textbox yazıcam TB.STOKADI LIKE 'arko%' or TB.STOKADI LIKE 'dove%' or TB.STOKADI LIKE 'axe%'

    If a = 0 Then
        sql3 = "TB.STOKADI LIKE '" & Me.TextBox1.Text & "%'"
    Else

        For b = 0 To a

            sql2 = "TB.STOKADI LIKE '" & Split(metin, aranan)(b) & "%'"
            sql3 = sql3 & sql2 & " OR "

        Next b
        
    End If


    If a = 0 Then
        MsgBox sql3
    Else
        MsgBox Left(sql3, Len(sql3) - 4)
    End If

End Sub
.
 
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
Hocam bu şekilde ekledim . Fakat textboxa sadec dove yazınca getiriyor ama dove,arko yazınca hiçbirşey getirmiyor
Kod:
Dim cnt As ADODB.Connection

Dim rst As ADODB.Recordset
Dim strConn As String, sorgu As String


Sub ServerMerkez()




Call sil
If UserForm1.CheckBox1 = "True" Then
tarih1 = Format(Sayfa5.Range("AB1").Value, "yyyy-mm-dd")
tarih2 = Format(Sayfa5.Range("AB2").Value, "yyyy-mm-dd")
Else
tarih1 = Format(UserForm1.TextBox4.Value, "yyyy-mm-dd")
tarih2 = Format(UserForm1.TextBox5.Value, "yyyy-mm-dd")
End If


'tarih1 = Format(Sayfa5.TextBox3.Value, "yyyy-mm-dd")
'tarih2 = Format(Sayfa5.TextBox4.Value, "yyyy-mm-dd")

Set cnt = New ADODB.Connection
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "Provider=SQLOLEDB.1;Password=K1234;Persist Security Info=True;User ID=sa;Initial Catalog=VEGADB;Data Source=10.0.0.1;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=USER-BILGISAYAR;Use Encryption for Data=False;Tag with column collation when possible=False"
cnt.Open strConn
Set rst = New ADODB.Recordset
With rst
.ActiveConnection = cnt

Dim selection As String
Dim lItem As Long
Dim strSQL As String
Dim i As Integer
Dim aData() As String
    Dim lngLoop1 As Long
For lItem = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(lItem) = True Then
selection = selection & "'" & Replace(Left(UserForm1.ListBox1.List(lItem), 10), "'", "''") & "',"
End If
Next
selection = Mid(selection, 1, Len(selection) - 1)
    metin = UserForm1.TextBox6.Text
    aranan = ","
    a = Len(metin) - Len(WorksheetFunction.Substitute(metin, aranan, ""))

    'arko,dove,axe gibi textbox yazıcam TB.STOKADI LIKE 'arko%' or TB.STOKADI LIKE 'dove%' or TB.STOKADI LIKE 'axe%'

    If a = 0 Then
        sql3 = "STK.MALINCINSI LIKE '" & UserForm1.TextBox6.Text & "%'"
    Else

        For b = 0 To a

            sql2 = "  STK.MALINCINSI LIKE '" & Split(metin, aranan)(b) & "%'"
            sql3 = sql3 & sql2 & "  OR "

        Next b
        
    End If


    If a = 0 Then
        MsgBox sql3
    




sorgu = "SELECT " & _
" CASE SH.DEPO  WHEN '117' THEN 'AKTUEL'  WHEN '107' THEN 'KIZILAY' " & _
"WHEN '108' THEN 'TUNALI' WHEN '109' THEN 'BAYRAMYERI' WHEN '110' THEN 'CINAR' WHEN '111' THEN 'ANTALYA' " & _
"WHEN '112' THEN 'BESIKTAS' WHEN '113' THEN 'BEYLICIUM' WHEN '114' THEN 'ESENLER' WHEN '115' THEN 'FINDIKZADE' " & _
"WHEN '116' THEN 'GAZIPASA' WHEN '119' THEN 'GEMLIK' WHEN '120' THEN 'ISPARTA' WHEN '121' THEN 'KAYSERI' " & _
"WHEN '122' THEN 'KIRIKKALE' WHEN '125' THEN 'MALTEPE' WHEN '126' THEN 'PENDIK' WHEN '127' THEN 'PROFILO' " & _
"WHEN '128' THEN 'SEFAKOY' WHEN '129' THEN 'SOGANLIK' WHEN '130' THEN 'SIRINEVLER' WHEN '131' THEN 'YAYLA' " & _
"WHEN '132' THEN 'ZONGULDAK' WHEN '134' THEN 'KARABUK' WHEN '135' THEN 'MANISA' WHEN '136' THEN 'AYDIN' WHEN '100' THEN 'CASHCARRY' WHEN '140' THEN 'NIGDE' " & _
"ELSE 'DIGER' END AS DEPO,STK.STOKKODU , " & _
"STK.MALINCINSI ,ISNULL(STK.KOD6,'BOŞ'),ISNULL(STK.KOD7,'BOŞ'),SUM(CIKAN-GIREN) AS NETCIKIS ,ROUND(SUM(CASE When IADE='FALSE' Then (SH.TUTAR+SH.TUTAR*SH.KDV/100)  Else -(SH.TUTAR+SH.TUTAR*SH.KDV/100) End ),2) AS [NET TOPLAMCIRO], " & _
"BRMEX.SATISFIYATI1 AS [PRKNDE STF1],ISNULL(BRMEX.SATISFIYATI4,0) AS [MALIYET] ,ROUND(SUM(CASE When IADE='FALSE' Then (CIKAN*BRMEX.SATISFIYATI4) Else -(GIREN*BRMEX.SATISFIYATI4) End ),2) as [TOPLAM MALIYET] " & _
"FROM   F0101TBLSTOKLAR AS  STK LEFT JOIN F0101D0003TBLSTOKHAREKETLERI AS SH ON  " & _
"STK.IND=SH.STOKNO LEFT JOIN F0101TBLDEPOLAR AS TBLDEPOLAR ON TBLDEPOLAR.IND=SH.DEPO LEFT JOIN F0101TBLBIRIMLEREX AS BRMEX ON BRMEX.IND=STK.BIRIMEX  WHERE  " & _
" SH.IZAHAT IN (101,102,27,21) AND (" & sql3 & ") AND  " & _
"TBLDEPOLAR.DEPOADI NOT IN ('MERKEZ','SAYIM','INTERNET','CARSI','TRANSFER','NCITY','HASARLI','SATIS') " & _
"AND convert(date,SH.TARIH) BETWEEN '" & tarih1 & "'  AND '" & tarih2 & "' AND TBLDEPOLAR.DEPOADI IN  (" & selection & ") " & _
"AND  STK.STOKKODU LIKE  '%" & UserForm1.TextBox3.Text & "%' " & _
"GROUP BY " & _
"STK.STOKKODU,STK.MALINCINSI,STK.KOD6,STK.KOD7,BRMEX.SATISFIYATI1,BRMEX.SATISFIYATI4,SH.DEPO ORDER BY NETCIKIS DESC "


.Open sorgu
Sayfa1.Range("A2").CopyFromRecordset rst
.Close
Else
        MsgBox Left(sql3, Len(sql3) - 4)
    End If

End With
MsgBox "Veriler Çekildi...", vbInformation

cnt.Close
Set rst = Nothing
Set cnt = Nothing

Worksheets("Sube_Hareketleri").Activate



End Sub
 
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
Teşekkür ederim buyrun kod alttadır.

Kod:
Dim cnt As ADODB.Connection

Dim rst As ADODB.Recordset
Dim strConn As String, sorgu As String


Sub ServerMerkez()




Call sil
If UserForm1.CheckBox1 = "True" Then
tarih1 = Format(Sayfa5.Range("AB1").Value, "yyyy-mm-dd")
tarih2 = Format(Sayfa5.Range("AB2").Value, "yyyy-mm-dd")
Else
tarih1 = Format(UserForm1.TextBox4.Value, "yyyy-mm-dd")
tarih2 = Format(UserForm1.TextBox5.Value, "yyyy-mm-dd")
End If


'tarih1 = Format(Sayfa5.TextBox3.Value, "yyyy-mm-dd")
'tarih2 = Format(Sayfa5.TextBox4.Value, "yyyy-mm-dd")

Set cnt = New ADODB.Connection
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "Provider=SQLOLEDB.1;Password=K123445;Persist Security Info=True;User ID=sa;Initial Catalog=VEGADB;Data Source=10.0.1.7;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=USER-BILGISAYAR;Use Encryption for Data=False;Tag with column collation when possible=False"
cnt.Open strConn
Set rst = New ADODB.Recordset
With rst
.ActiveConnection = cnt

Dim selection As String
Dim lItem As Long
For lItem = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(lItem) = True Then
selection = selection & "'" & Replace(Left(UserForm1.ListBox1.List(lItem), 10), "'", "''") & "',"
End If
Next
selection = Mid(selection, 1, Len(selection) - 1)



 

sorgu = "SELECT " & _
" CASE SH.DEPO  WHEN '117' THEN 'AKTUEL'  WHEN '107' THEN 'KIZILAY' " & _
"WHEN '108' THEN 'TUNALI' WHEN '109' THEN 'BAYRAMYERI' WHEN '110' THEN 'CINAR' WHEN '111' THEN 'ANTALYA' " & _
"WHEN '112' THEN 'BESIKTAS' WHEN '113' THEN 'BEYLICIUM' WHEN '114' THEN 'ESENLER' WHEN '115' THEN 'FINDIKZADE' " & _
"WHEN '116' THEN 'GAZIPASA' WHEN '119' THEN 'GEMLIK' WHEN '120' THEN 'ISPARTA' WHEN '121' THEN 'KAYSERI' " & _
"WHEN '122' THEN 'KIRIKKALE' WHEN '125' THEN 'MALTEPE' WHEN '126' THEN 'PENDIK' WHEN '127' THEN 'PROFILO' " & _
"WHEN '128' THEN 'SEFAKOY' WHEN '129' THEN 'SOGANLIK' WHEN '130' THEN 'SIRINEVLER' WHEN '131' THEN 'YAYLA' " & _
"WHEN '132' THEN 'ZONGULDAK' WHEN '134' THEN 'KARABUK' WHEN '135' THEN 'MANISA' WHEN '136' THEN 'AYDIN' WHEN '100' THEN 'CASHCARRY' WHEN '140' THEN 'NIGDE' " & _
"ELSE 'DIGER' END AS DEPO,STK.STOKKODU , " & _
"STK.MALINCINSI ,ISNULL(STK.KOD6,'BOŞ'),ISNULL(STK.KOD7,'BOŞ'),SUM(CIKAN-GIREN) AS NETCIKIS ,ROUND(SUM(CASE When IADE='FALSE' Then (SH.TUTAR+SH.TUTAR*SH.KDV/100)  Else -(SH.TUTAR+SH.TUTAR*SH.KDV/100) End ),2) AS [NET TOPLAMCIRO], " & _
"BRMEX.SATISFIYATI1 AS [PRKNDE STF1],ISNULL(BRMEX.SATISFIYATI4,0) AS [MALIYET] ,ROUND(SUM(CASE When IADE='FALSE' Then (CIKAN*BRMEX.SATISFIYATI4) Else -(GIREN*BRMEX.SATISFIYATI4) End ),2) as [TOPLAM MALIYET] " & _
"FROM   F0101TBLSTOKLAR AS  STK LEFT JOIN F0101D0003TBLSTOKHAREKETLERI AS SH ON  " & _
"STK.IND=SH.STOKNO LEFT JOIN F0101TBLDEPOLAR AS TBLDEPOLAR ON TBLDEPOLAR.IND=SH.DEPO LEFT JOIN F0101TBLBIRIMLEREX AS BRMEX ON BRMEX.IND=STK.BIRIMEX  WHERE  " & _
"STK.MALINCINSI LIKE  '" & UserForm1.TextBox1.Text & "%' AND SH.IZAHAT IN (101,102,27,21) AND " & _
"TBLDEPOLAR.DEPOADI NOT IN ('MERKEZ','SAYIM','INTERNET','CARSI','TRANSFER','NCITY','HASARLI','SATIS') " & _
"AND convert(date,SH.TARIH) BETWEEN '" & tarih1 & "'  AND '" & tarih2 & "' AND TBLDEPOLAR.DEPOADI IN  (" & selection & ") " & _
"AND  STK.STOKKODU LIKE  '%" & UserForm1.TextBox3.Text & "%' " & _
"GROUP BY " & _
"STK.STOKKODU,STK.MALINCINSI,STK.KOD6,STK.KOD7,BRMEX.SATISFIYATI1,BRMEX.SATISFIYATI4,SH.DEPO ORDER BY NETCIKIS DESC "


.Open sorgu
Sayfa1.Range("A2").CopyFromRecordset rst
.Close
End With
MsgBox "Veriler Çekildi...", vbInformation

cnt.Close
Set rst = Nothing
Set cnt = Nothing

Worksheets("Sube_Hareketleri").Activate

End Sub
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,893
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
.

Kodlarınızda destek istediğiniz TB.STOKADI LIKE komutu hiç yok ?

.
 
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
STK.MALINCINSI LIKE ' bu hocam
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,893
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
.

Bunu bir dener misiniz.

LIKE komutu bunun içinde stkmalıncinsi

Kod:
Dim cnt As ADODB.Connection

Dim rst As ADODB.Recordset
Dim strConn As String, sorgu As String


Sub ServerMerkez()

Call sil
If UserForm1.CheckBox1 = "True" Then
tarih1 = Format(Sayfa5.Range("AB1").Value, "yyyy-mm-dd")
tarih2 = Format(Sayfa5.Range("AB2").Value, "yyyy-mm-dd")
Else
tarih1 = Format(UserForm1.TextBox4.Value, "yyyy-mm-dd")
tarih2 = Format(UserForm1.TextBox5.Value, "yyyy-mm-dd")
End If


'tarih1 = Format(Sayfa5.TextBox3.Value, "yyyy-mm-dd")
'tarih2 = Format(Sayfa5.TextBox4.Value, "yyyy-mm-dd")

Set cnt = New ADODB.Connection
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "Provider=SQLOLEDB.1;Password=K123445;Persist Security Info=True;User ID=sa;Initial Catalog=VEGADB;Data Source=10.0.1.7;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=USER-BILGISAYAR;Use Encryption for Data=False;Tag with column collation when possible=False"
cnt.Open strConn
Set rst = New ADODB.Recordset
With rst
.ActiveConnection = cnt

Dim selection As String
Dim lItem As Long
For lItem = 0 To UserForm1.ListBox1.ListCount - 1
If UserForm1.ListBox1.Selected(lItem) = True Then
selection = selection & "'" & Replace(Left(UserForm1.ListBox1.List(lItem), 10), "'", "''") & "',"
End If
Next
selection = Mid(selection, 1, Len(selection) - 1)


metin = UserForm1.TextBox6.Text
    aranan = ","
    a = Len(metin) - Len(WorksheetFunction.Substitute(metin, aranan, ""))

    'arko,dove,axe gibi textbox yazıcam TB.STOKADI LIKE 'arko%' or TB.STOKADI LIKE 'dove%' or TB.STOKADI LIKE 'axe%'

    If a = 0 Then
        sql3 = "STK.MALINCINSI LIKE '" & UserForm1.TextBox6.Text & "%'"
    Else

        For b = 0 To a

            sql2 = "  STK.MALINCINSI LIKE '" & Split(metin, aranan)(b) & "%'"
            sql3 = sql3 & sql2 & "  OR "

        Next b
      
    End If


    If a = 0 Then
       stkmalıncinsi = sql3
    Else
        stkmalıncinsi = Left(sql3, Len(sql3) - 4)
    End If


sorgu = "SELECT " & _
" CASE SH.DEPO  WHEN '117' THEN 'AKTUEL'  WHEN '107' THEN 'KIZILAY' " & _
"WHEN '108' THEN 'TUNALI' WHEN '109' THEN 'BAYRAMYERI' WHEN '110' THEN 'CINAR' WHEN '111' THEN 'ANTALYA' " & _
"WHEN '112' THEN 'BESIKTAS' WHEN '113' THEN 'BEYLICIUM' WHEN '114' THEN 'ESENLER' WHEN '115' THEN 'FINDIKZADE' " & _
"WHEN '116' THEN 'GAZIPASA' WHEN '119' THEN 'GEMLIK' WHEN '120' THEN 'ISPARTA' WHEN '121' THEN 'KAYSERI' " & _
"WHEN '122' THEN 'KIRIKKALE' WHEN '125' THEN 'MALTEPE' WHEN '126' THEN 'PENDIK' WHEN '127' THEN 'PROFILO' " & _
"WHEN '128' THEN 'SEFAKOY' WHEN '129' THEN 'SOGANLIK' WHEN '130' THEN 'SIRINEVLER' WHEN '131' THEN 'YAYLA' " & _
"WHEN '132' THEN 'ZONGULDAK' WHEN '134' THEN 'KARABUK' WHEN '135' THEN 'MANISA' WHEN '136' THEN 'AYDIN' WHEN '100' THEN 'CASHCARRY' WHEN '140' THEN 'NIGDE' " & _
"ELSE 'DIGER' END AS DEPO,STK.STOKKODU , " & _
"STK.MALINCINSI ,ISNULL(STK.KOD6,'BOŞ'),ISNULL(STK.KOD7,'BOŞ'),SUM(CIKAN-GIREN) AS NETCIKIS ,ROUND(SUM(CASE When IADE='FALSE' Then (SH.TUTAR+SH.TUTAR*SH.KDV/100)  Else -(SH.TUTAR+SH.TUTAR*SH.KDV/100) End ),2) AS [NET TOPLAMCIRO], " & _
"BRMEX.SATISFIYATI1 AS [PRKNDE STF1],ISNULL(BRMEX.SATISFIYATI4,0) AS [MALIYET] ,ROUND(SUM(CASE When IADE='FALSE' Then (CIKAN*BRMEX.SATISFIYATI4) Else -(GIREN*BRMEX.SATISFIYATI4) End ),2) as [TOPLAM MALIYET] " & _
"FROM   F0101TBLSTOKLAR AS  STK LEFT JOIN F0101D0003TBLSTOKHAREKETLERI AS SH ON  " & _
"STK.IND=SH.STOKNO LEFT JOIN F0101TBLDEPOLAR AS TBLDEPOLAR ON TBLDEPOLAR.IND=SH.DEPO LEFT JOIN F0101TBLBIRIMLEREX AS BRMEX ON BRMEX.IND=STK.BIRIMEX  WHERE  " & _
stkmalıncinsi & " AND SH.IZAHAT IN (101,102,27,21) AND " & _
"TBLDEPOLAR.DEPOADI NOT IN ('MERKEZ','SAYIM','INTERNET','CARSI','TRANSFER','NCITY','HASARLI','SATIS') " & _
"AND convert(date,SH.TARIH) BETWEEN '" & tarih1 & "'  AND '" & tarih2 & "' AND TBLDEPOLAR.DEPOADI IN  (" & selection & ") " & _
"AND  STK.STOKKODU LIKE  '%" & UserForm1.TextBox3.Text & "%' " & _
"GROUP BY " & _
"STK.STOKKODU,STK.MALINCINSI,STK.KOD6,STK.KOD7,BRMEX.SATISFIYATI1,BRMEX.SATISFIYATI4,SH.DEPO ORDER BY NETCIKIS DESC "


.Open sorgu
Sayfa1.Range("A2").CopyFromRecordset rst
.Close
End With
MsgBox "Veriler Çekildi...", vbInformation

cnt.Close
Set rst = Nothing
Set cnt = Nothing

Worksheets("Sube_Hareketleri").Activate

End Sub
.
 
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
Hocam bu kodda dove,arko yazınca getirdi fakat arko yazınca bu kadar geliyor doğru
240672
dove yazınca bu kadar
240673

fakat dove,arko yazınca 1500 kayıt getiriyor. Farklı tarihteki kayıtları getiriyor .
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,893
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
.

SQL komut kısmını test edemediğim için size biraz iş düşüyor.
Siz dove, arko için çalışan SQL kodunu yazıp, çalıştırın. ( TB.STOKADI LIKE 'arko%' or TB.STOKADI LIKE 'dove%' )
Çalışan komutu burada paylaşın. Ona göre çeviri yapalım.

.
 
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
22-11-2022
Kod:
 AND (" & stkmalıncinsi & ") AND
bu şekilde doğru çalıştı hocam .ellerinize sağlık . Ama sanırım like kısmı sorguyu çok yavaşlatıyor .
 
Üst