Ara Geçiş İçin Kullanılması Gereken Tablo Mu?, Sorgu Mu? Yoksa Başka Birşey Mi?

07/05/2024, 19:55

aydin5353

Değerli hocalarım herkese merhabalar. Çalışmam için nasıl bir yol izlemem gerektiği hususunda fikirlerinize ihtiyacım var.

Resimde de gösterdim. Aslında Ana işlemim bu şekilde. Ancak bir konuda sorun yaşıyorum. Onun çözümü için sizlerden yardım istiyorum.

A Tablosunda veriler mevcut. Bu veriler asla değiştirilemez ve dokunulamaz. Yalnızca İlişkiler kısmından bu verilerden faydalanabilirim. (Burdaki kayıtlar farklı takip ettiğim işlerle alakalıdır.)

Örneğin: A tablosunda bir ilçeye ait lokanta isimleri mevcut.
             B Listbox' da bu lokantaları görüyorum ve Vba yardımıyla C kısmındaki metin kutularına taşıyorum. 
             C kısmında D tablosuna ait başka metin kutusu alanları da var. Kayıt işlemini yapınca D tablosunda verileri kaydediyorum. Sonrası tabi sorgu vb. işlemler sorun yok.

Sorun ve İstediğim Şey = (B Kısmı) Listbox' dan C kısmına aktarım yaptığımda Listbox' dan bu kayıt düşmeli. En son tüm kayıtlar bittiğinde ekleyeceğim buton ile tekrardan listbox' a verileri A tablosundan çekebilmem. 

Düşüncelerim.
1- Listbox' dan aktarılan kaydı silecek bir yöntem olabilir ancak A tablosuna zarar vermemem gerekir. 
2- A tablosu ile Listbox arasında farklı bir tablo oluşturarak (örneğin X tablosu) verileri X tablosundan çekip, listbox daki veriler bittiğinde Vba ile A tablosundan X tablosuna aktarım yapmak.
3- Belki Sql ile listbox' a veriler aktarılıp, silinip sonrasında güncelleştirme sorgusu yapılarak tekrar geri getirilebilir. Ancak hiç bilgim olmadığı için burası tamamen kafamda uydurma. 


Bu hususta nasıl bir yöntem izlemem gerekir. En doğru yöntemi bilsem ona göre çalışmamı şekillendiririm.
09/05/2024, 11:44

atoykan

Listboxa A tablosundan verileri yüklediniz ve textboxlara bu listboxa göre değerleri getirdiniz ve işlemleriniz sonrası D tablosuna kaydettiniz. Yapmak istediğiniz Listboxtan seçim yaptığınız ve D tablosuna kaydınıza esas olan kayıdın Listbox verilerinde görüntülenmemesi ancak kayıt kaynağı A tablosunda bu verinin saklanmaya devam etmesi doğru mu?

Şayet anladığım doğru ise listboxa A tablosundaki verileri bir sorgu ile alıyorsunuz, seçtiğiniz kaydın idsini foreign key olarak kullanarak D tablosuna kayıt ederseniz listboxın veri sorgusunda D tablosundaki foreign key idleri hariç olarak sorgunuzu düzenlediğinizde, kaydetme işlemi sonrasında listboxı requery ettiğin takdirde seçtiğiniz kayıt listboxta görüntülenmeyecek ancak, A tablosunda kayıt olarak yer almaya devam edecek, D tablosunda da gerekli işlemleri yapılmış kayıt olarak bulunmaya devam edecektir.
10/05/2024, 22:48

aydin5353

Hocam sorumu doğru anladınız ancak bir kısmını anlatamamış olabilirim.

A Tablosundan Listbox' a veriyi aldık. Listbox' daki veriler her seçim sonrasında yok olacak, taa ki hepsi yok olana kadar. Hepsi yok olduğunda tekrardan yükleme yapılacak.

Yok olan verileri ise sırasıyla metin kutuları ve D tablosuna aktarmış olacağız. 

Cevabınızı okudum ancak tam anlayamadığım husus var. "D tablosuna kayıt ederseniz listboxın veri sorgusunda D tablosundaki foreign key idleri hariç olarak sorgunuzu düzenlediğinizde, kaydetme işlemi sonrasında listboxı requery ettiğin takdirde seçtiğiniz kayıt listboxta görüntülenmeyecek" Bu kısımdan anladığım kadarıyla 1 kez seçilip kaydedilen kayıtlar Listbox' dan düşülerek gösterilecek.

Ama A tablosundaki bir kaydın D tablosunda birden fazla kaydı olabileceğinden tüm kayıtlar bitip listbox yenilendiğinde bu sorgu çalışmayacak. 

Bir prototip geliştirdim kendimce. A tablosu ile D tablosu arasında Aratablo oluşturup, verileri oraya aktarıp, ordan gelen kayıtları seçerek aktarıp, sonrasında silme suretiyle eksiltiyorum. Tabi farklı kod yapıları kullanırken sitedeki listbox ile yapılabilen uygulamaları inceledim. Sanırsam ekte göndereceğim örnek üzerinden sorunumu çözebileceğim. Teşekkürler.
11/05/2024, 10:54

atoykan

Listboxa işlemler tamamdıktan sonra bir buton ile A tablosundan tekrar tüm verileri almak istediğinizi belirtmişsiniz o kısmı ben atlamışım kusura bakmayın. Ancak bu işlem için de yardımcı bir tabloya ihtiyacınız yok, butona tıklandığında listbox.rowsource özelliğini kullanarak A tablosundaki tüm verileri alacak sorguyu atayabilir böylece A tablosundaki tüm kayıtları yeniden görüntüleyebilirsiniz. D tablosuna kayıt kriterlerinizi sorgunuzda kriterler olarak kullanarak listboxta verilerin görüntülenmesini ayarlayabilirsiniz.
12/05/2024, 01:12

aydin5353

Teşekkürler hocam. rowsource hakkında en ufak bilgim yoktu. Sorun çözülmüştür. Saygılar sunarım
12/05/2024, 17:24

atoykan

Rica ederim, iyi çalışmalar.