Çözüldü Sql ile Verileri Güncelleme ,Silme

Bu sorun verilen destek sayesinde çözüme ulaştırılmıştır.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
1)Merhaba ekteki dosyamda StokKartFormunda Kart giriş formu mevcut bu formda verileri kaydedip wampserver sunucusuna ve Mysql8.0 veri tabanında görecek şekilde aktarmaları yapıyorum.Güncelleme ve Silme yapmak için Listview tablosuna tıklayıp verileri textboxlara ve combolara aktarıyor silme ve güncelleme işlemi yaptırmak istiyorum bu işlemler yapıldıktan sonra mysql ve wamp serverda 'da değişmesini istiyorum.

2) Arama formum mevcut Listview tablosu üzzerinde .Tablodaki verileri aynı şekilde wampserverdan sql ile çekmek istiyorum .Arama kodları mevcut .
 

Ekli dosyalar

  • Resim ekle1 (1) (1) (1).xlsm
    456 KB · Gösterim: 5
Çözüm
Local
Size kabaca bir örnek hazırladım. ListViewDoldur prosedürünü bütün hareketlerden sonra çağırdığıma dikkat etmenizi rica ediyorum.

Ayrıca Baglanti diye bir class oluşturup bütün ADODB nesnelerini orada tanımladım. her defasında bağlantı, kayıtseti, bağlantımetni gibi değişkenleri tekrar tekrar çağırmak zorunda kalmıyoruz.

Formun genel değişken tanımlama kısmına Dim b as Baglanti diye bir kere tanımladıktan sonra kullanacağımız olaylar ya da prosedürler içinde set b = new Baglanti şeklinde çağırarak classı kullanabiliyoruz.

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Stok tablonuzun birincil anahtarı hangi alana denk geliyor?
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Stok Kodunu baz alabilirsiniz veya wampserverda ID PRIMARY Key otomadik ıd'de yapabilirsiniz ben Id sırası yapmadım
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Stok Kodunu baz alabilirsiniz veya wampserverda ID PRIMARY Key otomadik ıd'de yapabilirsiniz ben Id sırası yapmadım
StokKodu.jpg

Birincil anahtarın en önemli özelliği (hatta tek özelliği diyebilirim buna) tekrarlı veri olmamasıdır.

Resimde görünen listview nesnenizde tekrar eden stok kodları mevcut. Bu nesnede bulunan her bir kayıda karşılık mysql serverinizde bir kayıt mevcut ise üzgünüm ama böyle bir işlemi gerçekleştiremezsiniz.

Alternatif çözüm(ler) var ama veritabanı normalizasyonu kurallarını alt üst ettikten sonra mutlaka veri kaybı olacaktır.
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Oradaki stok kodları farklı olacak isterseniz ID numarası ekleyip tekrar düzenleyeyim dosyayı gözden kaçırmışım
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
ID ekledim Stok kodlarını değiştirdim
 

Ekli dosyalar

  • Resim ekle1 (1) (1) (1).xlsm
    457.1 KB · Gösterim: 1

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Oradaki stok kodları farklı olacak isterseniz ID numarası ekleyip tekrar düzenleyeyim dosyayı gözden kaçırmışım
ID alanı ekleyip eklememekle bir sorun yok aslında. mysql serverınızdaki stok tablonuzda unique bir alan söz konusu ile (söylediğiniz gibi bu stok kodu gibi alanlarla sağlanabilir) update ve delete gibi sorgular yazılabilir.

Burada asıl bilmemiz gereken şey stok kodu alanınızı her yerde unique tutabilecekseniz update ve delete sorgularınızı aynı insertte olduğu gibi gerçekleştirebilirsiniz.
Mesela update için kaydet butonunuzdaki kodların aynısı ile veri gönderme işlemini gerçekleştirebilirsiniz. Sadece yapmanız gereken şey sql değişkeni içindeki sorguyu değiştirmek.
Kabaca aşağıda bulunan örnekteki gibi bir sorgu ile update yapılabilir.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Tek tırnaklı olan yerlere textboxlara ve comboboxlara verdiğim isimler yani neye karşılık geliyorsa onları yazacağım değilmi
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Tek tırnaklı olan yerlere textboxlara ve comboboxlara verdiğim isimler yani neye karşılık geliyorsa onları yazacağım değilmi
Kısa bir örnek ile nasıl yapılması gerektiğini göstereyim.
Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
-İlk başta dikkat edilmesi gereken kısım "UPDATE" ile başlayıp tablo adını yazıyoruz. Daha sonra sadece 1 kere SET yazdıktan sonra değerlerin değiştirileceği alanları ve alması gereken değerleri yazıyoruz.

-Daha sonraki kısımda dikkat edilecek konu ise her bir alanın arasında "," (Virgül) bulunmasıdır. Tek tırnak ile set edilen alanlar string değer alan alanlar iken, string değeri almayan alanlarda tek tırnak kullanılmaması gerekmektedir.

-Ayrıca en önemli ve can alıcı kısmı ise WHERE şartıdır. Son alanınıza da değer atandıktan sonra virgül koymadan WHERE şartı eklenir ve güncelleme sorgunuz gerçekleşmiş olur.

UPDATE ve DELETE sorgularını çalıştırırken tekrar tekrar kontrol etmeniz gereken şey WHERE şartıdır. Koymuş olduğunuz şartın hangi kayıtları kapsadığını bilmek çok önemlidir.

Burada bariz bir örnekle açıklarsak;
Diyelim ki belirli bir stok kodu bulunan tek bir stoğu silmek istiyorsunuz ve DELETE FROM StokTablo ile sorguya başladınız fakat WHERE şartında "WHERE StokKodu=1" gibi bir kod yazmak yerine yanlışlıkla "WHERE StokGrubu=1" yazdınız. Stok kodu 1 olan stoğu silmek yerine Stok Grubu 1 olan bütün stoklarınızı sildiniz. Ve evet (EĞER yedeğil yoksa) kaybolan verilerinizin üzerine bir bardak soğuk su içebilirsiniz.
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Teşekkürler sağolun peki 2.soruda ne yapmam gerekiyor veriyi listview tablosuna getirmem gerek arama yaptıktan sonra
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Teşekkürler sağolun peki 2.soruda ne yapmam gerekiyor veriyi listview tablosuna getirmem gerek arama yaptıktan sonra
Arama userformu üzerinde listview doldurulacaksa oradaki comboboxtan arama yapılacak alanı seçip alttaki metin kutusuna değer girip ara dediğinizde veriler gelsin istiyorsunuz anladığım kadarıyla. İstediğiniz böyle bir şey ise onu yapmak kolay. Fakat ben yanlış anladıysam biraz daha detaylandırırsanız ona göre bir kod yazayım.
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Hocam dediğiniz doğru arama kodlarıda mevcut zaten ama verileri MYSQL veri tabanından çekecek arama yaparken excel sayfasından değil
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Hocam dediğiniz doğru arama kodlarıda mevcut zaten ama verileri MYSQL veri tabanından çekecek arama yaparken excel sayfasından değil
ComboBoxda bulunan alan adları ile sunucunuzdaki tablonun alan adları birebir aynı mı?
Mesela comboboxda "STOK KODU" yazıyor. sunucunuzdaki stok tablosunda da stok kodu alanınızın adı "STOK KODU" mudur? EĞER öyle değilse comboboxa aldırdığınız isimler sunucunuzdaki isimlerle birebir aynı olması gerekir.
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Bu arada direkt çözüm şöyle olmalı gibi bir şey sunmadan önce bir çok soru sormam gerekiyor ama her biri tek tek önemli konular. Size çözüm diye bir çok dosya göndereceğim ama her birinde sorduğum sorulardan kaynaklanan hatalardan dolayı hata aldım diye geri dönüş yapacaksınız. Her şeyi netleştirip çözüme ulaşmanın daha doğru olduğunu düşünüyorum. Çünkü wampserverınıza erişimimiz olmadığı için varsayımsal olarak bir şeyler yapmaya çalışıyorum.
 

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
wampser daki stok__kodu,kayit_tarihi,ürün_grubu ,grup_kodu_ismi olarak geçiyor hocam
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Comboboxdaki adların sunucudaki alan adları ile birebir olduğu varsayılarak hazırlanmıştır. Kodlarda yaptığım değişiklikleri eklemeleri yorum satırlarıyla açıklamaya çalıştım. Umarım işinize yarar.
 

Ekli dosyalar

  • Resim ekle1 (1) (1) (1) (2).xlsm
    437.5 KB · Gösterim: 1

Local

Bronz Üye
Kullanıcı Bilgileri
Katılım
19 Ağu 2023
Mesajlar
247
Aldığı beğeni
21
Excel Versiyonu
Office 2016 TR
Konuyu Başlatan
Teşekkür ederim.Uygulayacağım.Son bir sorum daha vardı isterseniz daha sonra ekli dosya ekleyeyim .Controls komutuyla tek seferde 5'li 6'lı kayıt yaptırıyorum acaba sql kodlarında değişiklik yapmama gerek varmı .Örneğin ;

Sql = "insert into stokkart2(stok__kodu,kayit_tarihi,) values ('" & stok__kodu & "', '" & kayit_tarihi & "') bu sql kodunu kaydetmede kullanıyoruz tek seferde çoklu kayıtlarda değiştirmem gerekirmi.


Buradaki kod ise vba daki kaydetme kodu controls ile yaptırıyorum.


If MsgBox("Stok giriş irsaliyesini kaydetmek istiyor musunuz.?", vbYesNo + vbDefaultButton1 + vbQuestion, "KAYDET") = vbNo Then Exit Sub
Set syf = Sheets("Stok")
ss = syf.Cells(Rows.count, 1).End(xlUp).Row
If ss < 2 Then ss = 1
For i = 1 To 7
If Controls("TextBox" & i) <> Empty Then
ss = ss + 1
On Error Resume Next
syf.Cells(ss, 1) = Controls("TextBox" & i)
syf.Cells(ss, 2) = Controls("textbox95")
syf.Cells(ss, 3) = Controls("combo_ürün" & i)
syf.Cells(ss, 4) = Controls("txt" & i)
syf.Cells(ss, 5) = Controls("combo_stok" & i)
syf.Cells(ss, 6) = Controls("combo_depo_yeri")
 

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Combobox içinde listeye birden fazla sütunlu değer aldırıp sunucudaki isimlerinin görünmemesi ile ilgili kodu da yazdım.
userform_initialize olayındaki yorumları okuyun lütfen.
 

Ekli dosyalar

  • Resim ekle1 (1) (1) (1) (2).xlsm
    443.7 KB · Gösterim: 3

aeGNoR

Destek Ekibi
Kullanıcı Bilgileri
Katılım
10 Mar 2021
Mesajlar
772
Çözümler
98
Aldığı beğeni
867
Excel Versiyonu
Office 2021 TR
Teşekkür ederim.Uygulayacağım.Son bir sorum daha vardı isterseniz daha sonra ekli dosya ekleyeyim .Controls komutuyla tek seferde 5'li 6'lı kayıt yaptırıyorum acaba sql kodlarında değişiklik yapmama gerek varmı .Örneğin ;

Sql = "insert into stokkart2(stok__kodu,kayit_tarihi,) values ('" & stok__kodu & "', '" & kayit_tarihi & "') bu sql kodunu kaydetmede kullanıyoruz tek seferde çoklu kayıtlarda değiştirmem gerekirmi.


Buradaki kod ise vba daki kaydetme kodu controls ile yaptırıyorum.


If MsgBox("Stok giriş irsaliyesini kaydetmek istiyor musunuz.?", vbYesNo + vbDefaultButton1 + vbQuestion, "KAYDET") = vbNo Then Exit Sub
Set syf = Sheets("Stok")
ss = syf.Cells(Rows.count, 1).End(xlUp).Row
If ss < 2 Then ss = 1
For i = 1 To 7
If Controls("TextBox" & i) <> Empty Then
ss = ss + 1
On Error Resume Next
syf.Cells(ss, 1) = Controls("TextBox" & i)
syf.Cells(ss, 2) = Controls("textbox95")
syf.Cells(ss, 3) = Controls("combo_ürün" & i)
syf.Cells(ss, 4) = Controls("txt" & i)
syf.Cells(ss, 5) = Controls("combo_stok" & i)
syf.Cells(ss, 6) = Controls("combo_depo_yeri")
Sunucuya birden fazla kayıt gönderilirken her bir kayıt için sql değişkeni tekrar tekrar oluşturulup sunucuya tek tek gönderilir. Genelde bir döngü içinde yapılır.

Fakat form üzerinden kaydet butonu ile sunucuya veri gönderecekseniz, çoklu veri göndermeyi nasıl planlıyorsunuz?

Sonuç olarak elinizde her alan için 1 tane textbox var ve kaydet butonuna bastığınızda o textboxlardaki verileri oluşturacağı tek bir kayıda gönderecek.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

Konuyu okuyanlar

Üst