• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Sql like kullanımı hakkında

  • Konbuyu başlatan Konbuyu başlatan mukoli
  • Başlangıç tarihi Başlangıç tarihi
Katılım
4 Eylül 2020
Mesajlar
394
Excel Vers. ve Dili
Excel 2016
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
 
.

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

.
 
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
 
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
 
.

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

.
 
.

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
.
 
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 .
 
.

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.

.
 
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 .
 
Geri
Üst