VBA SQL - Insert into da where koşulu

Katılım
21 Aralık 2023
Mesajlar
10
Excel Vers. ve Dili
Türkçe
Merhabalar

Bir veri kayıt etmeye çalışıyorum. Normal kayıt işleminde sorun yok ama where ile koşul verince where komut hatası alıyorum.


Kod:
Dim sSql As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim cmdObj As ADODB.Command
Dim qf As Object
Dim mySubtotal As Double
Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=sunucu; Initial Catalog=kasa; User Id=Kullanıcı;Password=Sifresi"
cn.CommandTimeout = 600
sSql = " IF EXISTS (SELECT * FROM kasa_rapor WHERE tarih = '" & tarih1 & "' and sube = '" & sube1 & "') THEN msgbox('bu kayıt zaten girilmiş') ELSE INSERT INTO kasa_rapor (sube, Veyselciro, yazarkasaciro, tarih, Veyselnakit, Veyselkk, Veyselonline, yazarkasakk, yazarkasanakit, yazarkasacaritahsilat, yazarkasamasraf, Veyselodenmez, Veyselindirim, Veyselservis, Veyselkdv10, Veyselkdv20,Veyselkdv20servis) VALUES (' " & sube1 & " ', ' " & Veyselciro1 & " ', ' " & yazarkasaciro1 & " ', ' " & tarih1 & " ', ' " & Veyselnakit1 & " ', ' " & Veyselkk1 & " ', ' " & Veyselonline1 & " ', ' " & yazarkasakk1 & "', ' " & yazarkasanakit1 & " ', ' " & yazarkasacaritahsilat1 & " ', ' " & yazarkasamasraf1 & " ', ' " & Veyselodenmez1 & " ', ' " & Veyselindirim1 & " ', ' " & Veyselservis1 & " ', ' " & Veyselkdv101 & " ', ' " & Veyselkdv201 & " ' , ' " & Veyselkdv20servis1 & " ') where ( tarih != ' " & tarih1 & " ') WHERE (tarih != ' " & tarih1 & " ' AND sube != ' " & sube1 & " ')"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenForwardOnly
rs.Open sSql, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
bu sorgu da

tarih = tarih1 ve sube=sube1 ise kayıt yapma ve "bu tarihli rapor kayıt edilmiş" uyarısı vermek istiyorum ama yapamıyorum.

yardımlarınızı rica ederim
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
367
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Kontrol eder misiniz? (Yapay Zeka desteği ile)

Kodunuzda iki sorun bulunuyor:

  1. SQL Söz Dizimi Hatası: SQL Server’da IF EXISTS ve THEN ifadesi SQL komutları olarak desteklenmez. IF EXISTS kullanırken, THEN olmadan SQL sorgusunu yeniden yapılandırmalısınız.
  2. SQL Komutunun Mantığı: IF EXISTS sorgusunun sonuçlarına göre bir işlem yapmak istiyorsanız, kayıt işlemini iki ayrı adımda yapmanız gerekecek. İlk adımda IF EXISTS ile kayıt olup olmadığını kontrol edecek, varsa MsgBox uyarısını verecek; yoksa INSERT INTO komutuyla veri kaydını yapacaksınız.
İşte sorununuzu çözmek için düzenlenmiş kod örneği:

Kod:
Dim sSql As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection

Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=sunucu;Initial Catalog=kasa;User Id=Kullanıcı;Password=Sifresi"
cn.CommandTimeout = 600

' İlk olarak kayıt olup olmadığını kontrol ediyoruz
sSql = "SELECT COUNT(*) AS KayitSayisi FROM kasa_rapor WHERE tarih = '" & tarih1 & "' AND sube = '" & sube1 & "'"
Set rs = New ADODB.Recordset
rs.Open sSql, cn, adOpenForwardOnly, adLockReadOnly, adCmdText

If rs!KayitSayisi > 0 Then
    MsgBox "Bu tarihli rapor zaten kayıt edilmiş."
Else
    ' Kayıt yoksa INSERT komutunu çalıştırıyoruz
    sSql = "INSERT INTO kasa_rapor (sube, Veyselciro, yazarkasaciro, tarih, Veyselnakit, Veyselkk, Veyselonline, yazarkasakk, yazarkasanakit, yazarkasacaritahsilat, yazarkasamasraf, Veyselodenmez, Veyselindirim, Veyselservis, Veyselkdv10, Veyselkdv20, Veyselkdv20servis) VALUES ('" & sube1 & "', '" & Veyselciro1 & "', '" & yazarkasaciro1 & "', '" & tarih1 & "', '" & Veyselnakit1 & "', '" & Veyselkk1 & "', '" & Veyselonline1 & "', '" & yazarkasakk1 & "', '" & yazarkasanakit1 & "', '" & yazarkasacaritahsilat1 & "', '" & yazarkasamasraf1 & "', '" & Veyselodenmez1 & "', '" & Veyselindirim1 & "', '" & Veyselservis1 & "', '" & Veyselkdv101 & "', '" & Veyselkdv201 & "', '" & Veyselkdv20servis1 & "')"
    cn.Execute sSql
    MsgBox "Kayıt başarıyla eklendi."
End If

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Açıklamalar:
  • İlk olarak SELECT COUNT(*) ile istenen kayıt olup olmadığını kontrol ediyoruz.
  • Eğer kayıt varsa MsgBox ile kullanıcıya uyarı veriyoruz.
  • Kayıt yoksa INSERT INTO komutuyla veriyi ekliyoruz.
 
Katılım
21 Aralık 2023
Mesajlar
10
Excel Vers. ve Dili
Türkçe
"SELECT COUNT(*) AS KayitSayisi FROM kasa_rapor WHERE tarih = '" & tarih1 & "' AND su
Kontrol eder misiniz? (Yapay Zeka desteği ile)

Kodunuzda iki sorun bulunuyor:

  1. SQL Söz Dizimi Hatası: SQL Server’da IF EXISTS ve THEN ifadesi SQL komutları olarak desteklenmez. IF EXISTS kullanırken, THEN olmadan SQL sorgusunu yeniden yapılandırmalısınız.
  2. SQL Komutunun Mantığı: IF EXISTS sorgusunun sonuçlarına göre bir işlem yapmak istiyorsanız, kayıt işlemini iki ayrı adımda yapmanız gerekecek. İlk adımda IF EXISTS ile kayıt olup olmadığını kontrol edecek, varsa MsgBox uyarısını verecek; yoksa INSERT INTO komutuyla veri kaydını yapacaksınız.
İşte sorununuzu çözmek için düzenlenmiş kod örneği:

Kod:
Dim sSql As String
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection

Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=sunucu;Initial Catalog=kasa;User Id=Kullanıcı;Password=Sifresi"
cn.CommandTimeout = 600

' İlk olarak kayıt olup olmadığını kontrol ediyoruz
sSql = "SELECT COUNT(*) AS KayitSayisi FROM kasa_rapor WHERE tarih = '" & tarih1 & "' AND sube = '" & sube1 & "'"
Set rs = New ADODB.Recordset
rs.Open sSql, cn, adOpenForwardOnly, adLockReadOnly, adCmdText

If rs!KayitSayisi > 0 Then
    MsgBox "Bu tarihli rapor zaten kayıt edilmiş."
Else
    ' Kayıt yoksa INSERT komutunu çalıştırıyoruz
    sSql = "INSERT INTO kasa_rapor (sube, Veyselciro, yazarkasaciro, tarih, Veyselnakit, Veyselkk, Veyselonline, yazarkasakk, yazarkasanakit, yazarkasacaritahsilat, yazarkasamasraf, Veyselodenmez, Veyselindirim, Veyselservis, Veyselkdv10, Veyselkdv20, Veyselkdv20servis) VALUES ('" & sube1 & "', '" & Veyselciro1 & "', '" & yazarkasaciro1 & "', '" & tarih1 & "', '" & Veyselnakit1 & "', '" & Veyselkk1 & "', '" & Veyselonline1 & "', '" & yazarkasakk1 & "', '" & yazarkasanakit1 & "', '" & yazarkasacaritahsilat1 & "', '" & yazarkasamasraf1 & "', '" & Veyselodenmez1 & "', '" & Veyselindirim1 & "', '" & Veyselservis1 & "', '" & Veyselkdv101 & "', '" & Veyselkdv201 & "', '" & Veyselkdv20servis1 & "')"
    cn.Execute sSql
    MsgBox "Kayıt başarıyla eklendi."
End If

rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
Açıklamalar:
  • İlk olarak SELECT COUNT(*) ile istenen kayıt olup olmadığını kontrol ediyoruz.
  • Eğer kayıt varsa MsgBox ile kullanıcıya uyarı veriyoruz.
  • Kayıt yoksa INSERT INTO komutuyla veriyi ekliyoruz.

Sorunumu çözdü, çok teşekkür ederim.
 

tugkan

Altın Üye
Katılım
6 Kasım 2004
Mesajlar
367
Excel Vers. ve Dili
Excel 2016
Türkçe 64 BIT
Altın Üyelik Bitiş Tarihi
16-10-2025
Rica ederim. Bir beğeninizi alırım artık :)
 
Üst