Skip to main content

AccessTr.neT


Farklı Tablolardaki Veriyi Aynı Forma Çağırmak

Farklı Tablolardaki Veriyi Aynı Forma Çağırmak

Çözüldü #1
Merhaba,

 Periyodik M. dosyasında çalışanların isimlerine göre muayene kaydına gidiyorum (örneğin 2. periyodik myn kayıtları). Bu arayüzle çalışanın (TblPrydkMyn1 ve 2 gibi) diğer muayene kayıtlarını aynı forma (FrmPrydkMyn2) çağırabilir miyiz? Normalde FrmPrydkMyn2 formunu şablon olarak alıp 1. muayene için FrmPrydkMyn1 formu oluşturup özellikler - Veri - Kayıt Kaynağına iki tabloyu ilişkilendirip sql görünümü aşağıdaki gibi olan sorgu oluşturuyorum, 

SQL Code
SELECT TblKayitlar.*, TblPrydkMyn1.*
FROM TblKayitlar LEFT JOIN TblPrydkMyn1 ON TblKayitlar.KimlikNo = TblPrydkMyn1.KimlikNo;
 Ekteki resimde üst taraf kimlik bilgileri (TblKayitlar) alt taraf anamnez bilgileri (TblPrydkMyn2) tutuyor. Resim ve veritabanı ektedir. Teşekkür ederim.
.rar CalisanSgIzlem_MGnes.rar (Dosya Boyutu: 762,17 KB | İndirme Sayısı: 3)
Son Düzenleme: 04/04/2020, 13:31, Düzenleyen: mgunes. (Sebep: İfade değişikliği)
Cevapla
#2
bir form içine iki alt form koyup alt formları birbirine bağlayabilirsiniz
Cevapla
#3
Mantık hatası yaptığınızı düşünüyorum. Bu türden "kişi" ve "ona bağlı işlemler" mantığıyla çalışan program kurgularında, kişi bilgileri bir kez kaydedilir. Bunun için ayrı bir tablo ve ayrı bir "kişi kayıt formu" kullanılır. Daha sonra bu kişi bilgileri bir şekilde çağrılır ve buna bağlı işlemler için bir başka form üzerinde bu kişiye bağlı olarak birden çok işlem yapılır. Siz tablolarda -sanıyorum- böyle bir kurgu oluşturmuşsunuzdur. Ancak form yapınız o şekilde değil. Çünkü bir tc kimlik ya da isme bağlı olarak arama yaptığımda karşıma gelen kişi bilgileri formunda muayene tarihi alanı gördüm. Oysa muayene alanı bilgisi işlemler tablosunda bir çok defalar yapılabilecek kayıtlardan birisi olmalıydı. Bunu çok basit bir plaka-tamir mantığı üzerinden anlatayım. Bu arada acemiler için de faydalı olsun bu yazdıklarım:

Diyelim bir araba tamir servisi yazılımımız var. Bu durumda tıpkı tv kimlik no gibi araba plakası üzerinden yürüyelim.  

1. tablo alanlarımız:
kayıt id değeri, Araç plakası, araç markası, Araç modeli, Araç imal yılı, Aracı sahibi, Araç sahibinin telefonu, Araç sahibinin adresi falan....

Şimdi soruyorum. Bu bilgilerin yer aldığı bir tabloda "aracın arızası, servise giriş tarihi, tamir ücreti" falan gibi bilgiler yer alır mı?Oysa temel bilgiler tablosunda bu bilgiler olmamalı. Bu bilgiler için 2. tablomuza bakalım:

2. tablo alanlarımız:
Araç plakası, Aracın servise geliş tarihi, arıza bilgileri, değişen parçalar, işlem bitiş tarihi, alınacak ücret vs.

Şimdi bu durumda iki tabloyu birbirine bağlamada ortak noktamız araç plakası. Bu araç plakası üzerinden iki tablo arasında bir ilişki kurmalıyız. 

Buraya kadar olan şeyleri sizin zaten bildiğinizi ve uyguladığınızı düşünüyorum. Sıkıntı formlar konusunda. Bir form yapıp Araç bilgilerini kaydedeceğiz, daha sonra işlemler tablosunu açıp kaydettiğimiz o plaka üzerinden alt işlemleri kaydedeceğiz. Bu sırada araçla ilgili kalıcı bilgiler sadece görünecektir. Onları tekrar kaydetmek veya değiştirmek mümkün olmamalıdır. 

İşte sizin sıkıntılı olan kısmınız burası. Bu dengeyi iyi kurmanız lazım.
Cevapla
#4
Sayın accessman ve mehmetdemiral görüşlerinizi ilettiğiniz için teşekkür ederim, önerilerinizden yararlanıyorum. Alt form işlemleri örneklerini inceliyorum. Açıklamanıza ilişkin örnek uygulama sunarsanız deneme yaparım. 

Öte yandan şöyle bir yöntem keşfettim; isme göre arama comboboxunun yanına muayene seçimi adlı bir açılan kutu yerleştirip örnekte 3 periyodik muayene için satır kaynak türünü değer listesi yapıp
kayıt ara tıklama olayına yazdım:
SQL Code
Private Sub Kyt_Ara_Pmf_Click()

Dim MynSec, KydGtr As String
KydGtr = "[TblKayitlar]![KimlikNo]=[Forms]![FrmAnaSyf]![ISMEGOREARAMA]&[Forms]![FrmAnaSyf]![KimlikNoileArama]"

If Me.MynSec = "2. Muayene" Then
DoCmd.OpenForm "FrmPrydkMyn2", , , KydGtr
DoCmd.Close acForm, Me.Name

ElseIf Me.MynSec = "1. Muayene" Then DoCmd.OpenForm "FrmPrydkMyn1", , , KydGtr
DoCmd.Close acForm, Me.Name

ElseIf Me.MynSec = "3. Muayene" Then DoCmd.OpenForm "FrmPrydkMyn3", , , KydGtr
DoCmd.Close acForm, Me.Name

End If
End Sub


İyi çalışmalar.
Cevapla
#5
Yapmaya çalıştığım; önceki senaryodan farklı olarak  formu iki alana bölmek; üst ve alt alan (alt formlarla). Üst alanda - değişmeyen alanda - kişi kayıt bilgileri yer alacak, verileri Kişi Kayıt tablosundan(TblKayitlar) alacak. Alt alanda ise verileri anamnez (TblPrydkMyn1, TblPrydkMyn2 vs.) tablosundan alacak. Alt alana konulan açılan kutu ile seçime  bağlı olarak 1. veya 2. muayene gelecek. Amacım bunu, muayene kayıtları için ayrı formlar oluşturmadan alt alandaki şablon forma tablodan (TblPrydkMyn) verilerin çağrılmasıdır. (Örneğim sayın mehmetdemiral' ın dediği gibi buna uygun değil).
Fakat;
(05/04/2020 04:09)mehmetdemiral Adlı Kullanıcıdan Alıntı: ...kişi bilgileri formunda muayene tarihi alanı gördüm.

muayene tarihi alanı kişi bilgileri tablosunda değil, TblPrydkMyn tablosundadır.

Bana kazandırdığınız yeni ufuklarla bu kurguyu oluşturdum. Teşekkürler.
Son Düzenleme: 05/04/2020, 22:09, Düzenleyen: mgunes.
Cevapla
#6
Merhaba, bu tablo yapısı ile kullanılabilecek tek yöntem örneğinize uygulanmıştır.
.rar CalisanSagligiIzlem_MGnes_sld.rar (Dosya Boyutu: 94,86 KB | İndirme Sayısı: 7)
"Boş Örnek Eklerim, Yapıp Verirler" demeyin, örneğinizi hazırlayın.
Komplike kod talebiniz var ise İletişim bağlantısından bize ulaşın. 
Cebelleşmezsen Öğrenemezsin. 
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da