SQL den USER Forma

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Merhabalar, Bir excel dosyasına sql tabloda yer alan verileri sırayla alabiliyorum, ancak ben bu bilgileri sayfaya aktarmadan direkt ad sogusuna göre userforma getirmesini istiyorum bununla ilgili olarak çalışmayı yaptım ancak çalışma esnasında çözemediğim bir hata almaktayım,

birde user forma aldığım bu değerler üzerinde yaptığım değişiklikleri update etmek için değiştir tuşuna bastığımda sql deki verinin güncellenmesini istiyorum bunuda userformda başaramadım ama normal makro ile yapabiliyorum,

üzerinde çalıştığım dosya ektedir, ilgilenenlere teşekkürler,
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki kodlar; sadece Userform üzerinden veri alışverişi için yazımıştır. Bu nedenle; mevcut kodlarınızda farklı düzenlemeler veya adaptasyonlar gerektirebilir.

Örneği denemek için; kitabınızın bir kopyasını alın. UF kodlarının tamamını silin ve bu kodları kopyalayın. NOT : Bu tür sorularda; kodları deneme şansı olmadığı için mantık veya syntax hataları bulunabilir.

Kod:
Private Sub UserForm_Initialize()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
With Conn
     Conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;" & _
                             "Initial Catalog=EXCEL_ONLINE;Data Source= SERINCI "
     Conn.Open
End With
SqlText = "SELECT AD_SOYAD FROM KIMLIK_BILGILERI ORDER BY AD_SOYAD ASC;"
rs.Open SqlText, Conn, adOpenStatic, adLockReadOnly
On Error Resume Next
rs.MoveLast
kayitadedi = rs.RecordCount
rs.MoveFirst
If kayitadedi = 0 Then GoTo f1
AD_SOYAD.Column = rs.GetRows(kayitadedi)
f1:
rs.Close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
End Sub
Kod:
Private Sub ARA_Click()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
sec01 = AD_SOYAD.Value
If Trim(AD_SOYAD.Value) = Empty Then: MsgBox "Bir isim seçiniz", vbCritical, "UYARI": AD_SOYAD.SetFocus: GoTo f2
With Conn
     Conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;" & _
                             "Initial Catalog=EXCEL_ONLINE;Data Source= SERINCI "
     Conn.Open
End With
      SqlText = "SELECT " & "AD_SOYAD," _
                          & "TC_KIMLIK_No," _
                          & "BABA_ADI," _
                          & "ANA_ADI," _
                          & "DOGUM_TARIHI," _
                          & "DOGUM_YERI," _
                          & "ADRES," _
                          & "ILCE," _
                          & "IL," _
                          & "TELEFON," _
                          & "GSM," _
                          & "MAASI"
        SqlText = SqlText + " FROM KIMLIK_BILGILERI WHERE AD_SOYAD = '" & AD_SOYAD.Value & "' "
 
        rs.Open SqlText, Conn, adOpenStatic, adLockReadOnly
On Error Resume Next
rs.MoveLast
kayitadedi = rs.RecordCount
rs.MoveFirst
If kayitadedi = 0 Or kayitadedi = Empty Then GoTo f1
        AD_SOYAD.Value = rs(0)
        TC_KIMLIK_NO.Value = rs(1)
        BABA_ADI.Value = rs(2)
        ANA_ADI.Value = rs(3)
        DOGUM_TARIHI.Value = rs(4)
        DOGUM_YERI.Value = rs(5)
        ADRES.Value = rs(6)
        IL.Value = rs(7)
        ILCE.Value = rs(8)
        TELEFON.Value = rs(9)
        GSM.Value = rs(10)
        MAASI.Value = rs(11)
        GoTo f2
f1:
MsgBox "Uygun veri bulunamadı", vbCritical, "UYARI"
f2:
rs.Close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
End Sub
Kod:
Private Sub KAYDET_CLICK()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
If Trim(AD_SOYAD.Value) = Empty Then: MsgBox "İsim hanesi boş bırakılamaz", vbCritical, "UYARI": AD_SOYAD.SetFocus: GoTo f2
With Conn
     Conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;" & _
                             "Initial Catalog=EXCEL_ONLINE;Data Source= SERINCI "
     Conn.Open
End With
On Error GoTo f1
      SqlText = "UPDATE KIMLIK_BILGILERI SET " _
                        & "AD_SOYAD=" & "'" & AD_SOYAD.Value & "', " _
                        & "TC_KIMLIK_No=" & "'" & TC_KIMLIK_NO.Value & "'," _
                        & "BABA_ADI=" & "'" & BABA_ADI.Value & "'," _
                        & "ANA_ADI=" & "'" & ANA_ADI.Value & "'," _
                        & "DOGUM_TARIHI=" & "'" & DOGUM_TARIHI.Value & "'," _
                        & "DOGUM_YERI=" & "'" & DOGUM_YERI.Value & "'," _
                        & "ADRES=" & "'" & ADRES.Value & "'," _
                        & "ILCE=" & "'" & ILCE.Value & "'," _
                        & "IL=" & "'" & IL.Value & "'," _
                        & "TELEFON=" & "'" & TELEFON.Value & "'," _
                        & "GSM=" & "'" & GSM & "'," _
                        & "MAASI=" & MAASI.Value _
                        & " WHERE AD_SOYAD=" & sec01
Conn.Execute (SqlText)
f1:
MsgBox "Aşağıda belirtilen hata ile karşılaşıldı : " & vbCrLf & Err.Description, vbCritical, "UYARI"
f2:
rs.Close
Conn.Close
Set rs = Nothing
Set Conn = Nothing
End Sub
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Sayın Fpc ilginiz için çok teşekkür ederim,

Arama ve Userfor_İnitialize işlemleri sorunsuz olarak çalışıyor, ancak KAYIT seçeneğinde Nesne kapalı olduğundan işlem yapılamaz diye bir hata alıyorum, sql e kayıt güncelleme ve yeni kayıt girilemiyor. bu sorunu nasıl aşabilirim.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Hangi satırda verdi bu hatayı ?... conn.Open'da mı, yoksa conn.Execute' da mı?
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Birşeyi unutmuşum. Gerçi yukarıdaki hata ile ne kadar alakalı bilmiyorum..

Eğer yeni bir kitapta yukarıdaki kodlarla userformu çalıştırdıysanız; UPDATE aşamasında farklı bir hata da alabilirsiniz. Çünkü , ARA-BUL butonu ile değer atanan bir public değişken yaratmıştım. Size bunu söylemedim.

Bir Genel Modül sayfası açarak aşağıdaki satırı kopyalayınız

Kod:
Public sec01 as string
Tekrar kodları çalıştırıp, deneyiniz.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
hatayı verdiği bölüm conn.Exucute (sqltext) alanında olması gerekiyor çünkü debug yaptığımda bu alanın altında yer alan rs.close işaretleniyor
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
5 nolu mesajdaki değişken eklentisini yapın ve aşağıdaki satırları silip tekrar deneyiniz.

Kod:
 'RS.close[/COLOR]
[COLOR=darkgreen]'Conn.Close
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
belirtmiş olduğunuz kodu yazdım rs. close ve Conn. close komutlarını devre dışı bıraktığımda,

sizin uyarı mesajına yazdığınız alan içinde hata kodunda
Kod:
Incorrect syntax near the keyword "WHERE"
sanırım istenilen koşula uymadı bunu yeni bir kayıt yaptığımda veriyor

eski bir kaydı düzeltmek istediğimde ise
Kod:
Invalid Column Name '   ' (TIRNAK İÇERİSİNDE DEĞİŞTİRMEK İSTEDİĞİM KAYDIN İSİM BİLGİSİ GELMEKTE )
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
KODLARI İNCELEDİĞİMDE KAYIT KOMUTU İÇERİSİNDE WHERE ad soyada bağlanmış yeni kayıtta her hangi bir koşul olmaması gerekiyor bildiğim kadarı ile bu where komutu ancak eski bir kayıt güncellendiğinde kullanılabilir diye düşünüyorum,

acaba UpDATE yerine yeni kayıt olduğu için başka bir komut gerekiyor olabilir mi ?
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki koddaki revizonu siz de yapın.


Kod:
Private Sub KAYDET_CLICK()
Kod:
...[LEFT]...

[LEFT]    SqlText = "UPDATE KIMLIK_BILGILERI SET " _
[LEFT]                      .....
                      .....
[B][COLOR=red]                      & " WHERE AD_SOYAD=" & "'" & sec01 & "'"[/COLOR][/B]
...
...
End Sub[/LEFT]

[/LEFT]


[/LEFT]
NOT : Bu kaydet prosedürü sadece; UPDATE yani varolan bir kaydın güncellenmesi için geçerlidir. Yeni bir kayıt ilave etmek için SQL stringini INSERT INTO komutu ile tekrar düzenlemek gerekir.

INVALID Column name hatası; Database'inizde olmayan bir alana kayıt yapmaya çalıştığımızda ortaya çıkar. Kaydet prosedüründeki; Alan adlarının doğru yazılıp yazılmadığından emin olun.​
 
Son düzenleme:
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Teşekkür ediyorum emeğinize sağlık, aynıo kodlarda ki updateyi INSERT INTO yaptığımda yeni kayıt yapmıyor yani şu anda var olanı güncelleştiriyor ama yeni kayıt giremememin sebebi başkaca ne olabilir.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Tabloya yeni KAyıt eklemek mümkün olmuyor INSER INTO komutu kullanıyorum Where sorgusunu iptal ediyorum, ancak kayıt gerçekleşmiyor.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
kullandığım kodlar
Kod:
Private Sub DEGIS_CLICK()
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SqlText As String
If Trim(AD_SOYAD.Value) = Empty Then: MsgBox "İsim hanesi boş bırakılamaz", vbCritical, "UYARI": AD_SOYAD.SetFocus: GoTo f2
With Conn
     Conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;" & _
                             "Initial Catalog=EXCEL_ONLINE;Data Source= SERINCI "
     Conn.Open
End With
On Error GoTo f1
      SqlText = "INSERT INTO  KIMLIK_BILGILERI " _
                        & "AD_SOYAD=" & "'" & AD_SOYAD.Value & "', " _
                        & "TC_KIMLIK_No=" & "'" & TC_KIMLIK_NO.Value & "'," _
                        & "BABA_ADI=" & "'" & BABA_ADI.Value & "'," _
                        & "ANA_ADI=" & "'" & ANA_ADI.Value & "'," _
                        & "DOGUM_TARIHI=" & "'" & DOGUM_TARIHI.Value & "'," _
                        & "DOGUM_YERI=" & "'" & DOGUM_YERI.Value & "'," _
                        & "ADRES=" & "'" & ADRES.Value & "'," _
                        & "ILCE=" & "'" & ILCE.Value & "'," _
                        & "IL=" & "'" & IL.Value & "'," _
                        & "TELEFON=" & "'" & TELEFON.Value & "'," _
                        & "GSM=" & "'" & GSM .Value & "'," _
                        & "MAASI=" & "'" & MAASI .Value & "',"
Conn.Execute (SqlText)
f1:
MsgBox "Verileriniz Güncelleştirildi", , "UYARI"
f2:
cmdtemizle_Click
'.Close
'Conn.Close
Set rs = Nothing
Set Conn = Nothing
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
SQL stringinde tanımladığınız INSERT INTO komutu; normal olarak syntax (söz dizimi) hatası verecektir. Çünkü bu komutun kullanımı UPDATE'den farklıdır.

INSERT INTO'yu kullanabilmek için en başta tablonuzun yapısını bilmek gerekir.

Mesela tablonuzda ID diye bir alan var mı? Yoksa tablodaki bütün alanlar; yazdığınız kodlardaki alanlar kadar mı?

Basit şekilde; INSERT INTO komutu şu şekilde söz dizimine sahiptir.

INSERT INTO <tabloadı> VALUES (deger1, deger2, deger3,.......degerX)

Buna uygun olarak stringi oluşturmanız gerekiyor. Veri tabanınızdaki tablo'nun alan isimleri hakkında bilgi verirseniz, bunu da ilave ederiz.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Tabloda F1 kolonu olarak S&#305;ra Numaralar&#305; mevcut,

Tabloda ki Kolon isimleri, AD_SOYAD_TC_KIMLIK_NO , BABA_ADI, ANA_ADI, DOGUM_YERI_DOGUM_TARIHI, ADRES, ILCE, IL, TELEFON, GSM, MAASI olarak tan&#305;ml&#305; ayn&#305; &#351;ekilde userform dada bu isimler textboxta aynen ge&#231;erli,

&#351;&#246;yle bir durum mevcut vba ya INSERT INTO <tabload&#305;> VALUES (deger1, deger2, deger3,.......degerX)
yazd&#305;&#287;&#305;m&#305;z zaman de&#287;erleri kendimiz belitti&#287;imizde kay&#305;t ger&#231;ekle&#351;iyor ancak Textboxlardan ald&#305;rmak istedi&#351;&#287;imizde kay&#305;t ger&#231;ekle&#351;miyor.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
şöyle bir durum mevcut vba ya INSERT INTO <tabloadı> VALUES (deger1, deger2, deger3,.......degerX)
yazdığımız zaman değerleri kendimiz belittiğimizde kayıt gerçekleşiyor ancak Textboxlardan aldırmak istedişğimizde kayıt gerçekleşmiyor.
O zaman; UPDATE komutunu da yapamazdık değil mi? Oysaki UPDATE parametrik olarak değerleri; Database'a atıyor.

Şöyleki SqlTexti aşağıdaki gibi oluşturabilirsiniz.

SORU: F1 diye belirttiğiniz sıra no'lar, otomatik artan numaralar mıdır? Öylyse, onu da stringe dahil etmek gerekebilir. Çünkü, bunun eksikliği bir hataya sebep olur

Kod:
     SqlText = "INSERT INTO KIMLIK_BILGILERI " & _
                       "VALUES(" & AD_SOYAD.Text & ", " _
                                 & TC_KIMLIK_NO.Value & ", " _
                                 & BABA_ADI.Value & ", " _
                                 & ANA_ADI.Value & ", " _
                                 & DOGUM_TARIHI.Value & ", " _
                                 & DOGUM_YERI.Value & ", " _
                                 & ADRES.Value & ", " _
                                 & ILCE.Value & ", " _
                                 & IL.Value & ", " _
                                 & TELEFON.Value & ", " _
                                 & GSM .Value & ", " _
                                 & MAASI .Value & ")"
Not : Söz dizimi hatası olabilir. Ama denemelerde hata verirse; düzeltilir.

Daha sonra iş; bu sitringi işletmeye kalıyor.

Onu da UPDATE komutunda yaptığımız gibi
Kod:
Conn.Execute(sqlText)
komutu ile yaparız.
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
f1 otomatik artan bir say&#305; her kay&#305;tta 1 artmakta, bu arada yine &#231;al&#305;&#351;mad&#305; :(
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
MySql'de Auto_Increment alanlar için; değer olarak "0" atanıyordu. Belki burda da işe yarayabilir.

Stringi şu şekilde revize edin.

Kod:
    SqlText = "INSERT INTO KIMLIK_BILGILERI " & _
                       "VALUES([COLOR=red][B]0,[/B][/COLOR] " & AD_SOYAD.Text & ", " _
                                 & TC_KIMLIK_NO.Value & ", " _
                                 & BABA_ADI.Value & ", " _
                                 & ANA_ADI.Value & ", " _
                                 & DOGUM_TARIHI.Value & ", " _
                                 & DOGUM_YERI.Value & ", " _
                                 & ADRES.Value & ", " _
                                 & ILCE.Value & ", " _
                                 & IL.Value & ", " _
                                 & TELEFON.Value & ", " _
                                 & GSM .Value & ", " _
                                 & MAASI .Value & ")"
Hata aldığınız zaman;

(1) Hatanın tam olarak ekranda gördüğünüz açıklamasını (Türkçe/İngilizce)
(2) Hangi satırda verdiğini

mutlaka yazınız -ki ipucu yakalayabilelim-

NOT: Bir de kodlarınızın son halini içeren (nasıl bir yapı oluştuğunu görebilmemiz için) dosyayı eklerseniz daha iyi olur. Çünkü parça parça gönderilenlerin toplamda da bir anlam ifade etmesi lazım. Örneğin, Aynı Userform üzerinde aynı butonla; belirli şartlar sağlanmadıkça; hem yeni kayıt hemde kayıt düzeltme yapamazsınız.

 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst