• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü Vba kodu yanyana yazma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

tukayf

Yeni Üye
Katılım
19 Eyl 2022
Mesajlar
528
Çözümler
19
Aldığı beğeni
143
Excel V
Office 2019 TR
Konu Sahibi
RS("TC_No") = TC_No
RS("Ad") = Ad
RS("Tel_No") = Tel_No
RS("kan") = Kan
RS("boy") = boy
RS("kilo") = kilo
RS("ten") = Ten
RS("goz") = goz
RS("sac") = sac

Bu şekilde 100 e yakın alan var. Bunları alt alta yazınca iş çığrından çıkıyor yan yana yazabilmenin yolu nedir acaba.
Ya da bunları kısaltabilecek bir yol var mıdır? Yardımlar için teşekkürler.
 
Konu Sahibi
Sayın halily Yanlış görmedim ise VT ye kayıt yapılmıyor, kayıtlar okunup, forma yazılıyor.
Kayıt kodu da var hocam. Dosyanın içeriğini boşaltıp göndermiştim.
Değerli hocalarım. Bu kodlar bana ait değil. Nette bulduğum bir projeyi uyarladım. Kod devşirdim. TAkıldığım yerde forumdan yardım alıyorum.
Bu nedenle yazdığınız kodları şu satırları silip şunların yerine kullan gibi yönlendirme yapabilirseniz çok makbule geçecek. Deneme yanılma ile çok vakit kaybediyorum.
 
mesela ekle ve güncelle düğmelerinde doğrudan recordsete veri atama var
 
Konu Sahibi
aşağıdaki kodlar RS.Open satırının altına yazılabilirHTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
yada
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
kodların açıklamasını yapalım o zaman:
RS.Open kodu ile recordset açıldıktan sonra
1 - For Each fld In RS.Fields: kodu ile recordsetteki'deki tüm alanlar taranır rs.fields recordsetteik alanlar demektir , for each her biri anlamına gelir fld ise size kalmış bir değişken adıdır isterseniz başka adda kullanabilirsiniz
2 - RS(fld.Name) = Controls(fld.Name): fld.Name alanın adıdır diyelim ki TC_No alanındasınız bu durumda
RS("TC_No") = Controls(TC_No ) olur yani alan adı TC_No olan alana, nesne adı (metin kutusu yada açılır kutu adı) TC_No olan metin kutusunun değeri atanır.
3 - Next fld : sonraki alana geçilir

diğer kodun mantığı da aşağı yukarı aynıdır ilkinde doğrudan alanlar içinde dolaşılırken 2. de alan sırasına göre dolaşılır
1 - for x=0 to rs.fields.count-1 : recordsette alan sıralama 0dan başlar o nedenle ilk alanın sırası 0 son alanın sırası ise alan sayısının 1 eksiğidir
2 - rs(x)=controls(rs(x).name) : x. sıradaki alan değerini aynı alan adına sahip nesneden alıyor diyelim ki 0. alanın adı ID, budurumda rs(0) değerini adı rs(x).name ile aynı yani ID olan metin kutusundan alır
 
Dosyanızı çalıştıramadım, benim ofis versiyonum eski, halily kayıt kodunu uyarlıyor, okuma kodunda tam tersini yapacaksınız.
 
Konu Sahibi
aşağıdaki kodlar RS.Open satırının altına yazılabilirHTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
yada
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
kodların açıklamasını yapalım o zaman:
RS.Open kodu ile recordset açıldıktan sonra
1 - For Each fld In RS.Fields: kodu ile recordsetteki'deki tüm alanlar taranır rs.fields recordsetteik alanlar demektir , for each her biri anlamına gelir fld ise size kalmış bir değişken adıdır isterseniz başka adda kullanabilirsiniz
2 - RS(fld.Name) = Controls(fld.Name): fld.Name alanın adıdır diyelim ki TC_No alanındasınız bu durumda
RS("TC_No") = Controls(TC_No ) olur yani alan adı TC_No olan alana, nesne adı (metin kutusu yada açılır kutu adı) TC_No olan metin kutusunun değeri atanır.
3 - Next fld : sonraki alana geçilir

diğer kodun mantığı da aşağı yukarı aynıdır ilkinde doğrudan alanlar içinde dolaşılırken 2. de alan sırasına göre dolaşılır
1 - for x=0 to rs.fields.count-1 : recordsette alan sıralama 0dan başlar o nedenle ilk alanın sırası 0 son alanın sırası ise alan sayısının 1 eksiğidir
2 - rs(x)=controls(rs(x).name) : x. sıradaki alan değerini aynı alan adına sahip nesneden alıyor diyelim ki 0. alanın adı ID, budurumda rs(0) değerini adı rs(x).name ile aynı yani ID olan metin kutusundan alır
kaydederken kodları denedim sorunsuzca kaydedildi hocam. Accesten kayıt sil bul değiştir için bu kodları kullanabiliyorum sanırım.
 
Silme dışında kullanabilirsiniz
Silme için daha basit bir kod var
Şu an bilgisayar olmadığından kodunuz aklımda değil ama diyelim ki con adında bir connection/bağlantı kullanıyorsanız
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
yazmaniz yeterli recordset açmanıza bile gerek yok.
aslinda con.execute yontemiyle ekleme silme ve güncelleme de yapılabilir ama alan türüne göre tırnak ekleme gibi başka ayrıntıları da kontrol etmeniz gerektiğinden şimdilik recordset ile yapma işlemi daha pratik
 
Son düzenleme:
Yalniz bulma işleminden neyi kast ettiğinizi tam anlamadım
Bu yöntem sadece değer atama ve değer alma işlemleri için pratik
 
Temizleme kısmı da aşağıdaki gibi olabilir.
Commandbutton1-2-3 için de ilgili kısma temizle yazarak kısaltılabilir.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
Yalniz bulma işleminden neyi kast ettiğinizi tam anlamadım
Bu yöntem sadece değer atama ve değer alma işlemleri için pratik
Hocam form üzerinde butonlar aracılığıyla ekle, veri çağır, güncelle ve sildirme işlemi yaptırıyorum.
Sizin verdiğiniz kodu ekle için kullandım. Sonuç olumlu. Bu kodunuzu güncelle ve kaydı sil komutları için kullanabilir miyim. Şimdi onları uyarlayacağım yapabilirsem.
 
Konu Sahibi
Güzel oldu ama veri kaydederken aynı sicil kayıtlıysa kaydetmeyi engellemiştik şimdi o denetimi silmişiz. Hem userformda hem veritabanında vardı o denetim nasıl başardım anlamadım.
Adminim sizin kodu uyarlayamadım sanırım. Temizleme yapmadı.
 
Deneyin.
 
Eğer accessteki sütun isimleri ile formdaki kontrol isimlerini birebir aynı isimle yaparsanız şu şekilde çok hızlı ve kod kalabalığı olmadan çalışır.
Önce dosyanızın yedeğini alın. RS.Open kodundan sonra şunları yazın .


HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.


Bunun çalışması için sütun başlıklarını listeleyen şu kodu formda boş bir yere ekleyin.

HTML:
C#:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
Deneyip dönüş yapacağım hocalarım. Zahmet verdik çok teşekkürler.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst