Formlar arası veri aktarımı

1 2
27/12/2009, 01:49

ozanakkaya

Sn. Hayri16,

1- Listeye clicklediğimizde liste kutusu geçici olarak kayboluyor.
liste kutusu güncellendiği sırada msgbox açıldığı için veriler kayboluyor.

2- Listede gezinirken hasta veritanabında kayıtlı olmayan hastanın (bilgilerini kaynaktan almayan ) alanları başka kayıtlardan geliyor. Tüm alanlar dolu gözüküyor.

Dlookuplardan kurtulmanız için uygulamanızı düzenledim ama eklediğim sadece örnek, eksik yanları tamamlansınız diye düşünmüştüm. Ekteki düzenlenmiş halidir.

3- Öğrenmek amacıyla aşağıda eklediğiniz kodun ne iş yaptığını sorabilir miyim?

bahsettiğiniz kod liste kutusu tıklandığında liste kutusundaki veriye göre kayıt bulup forma aktarır. Siz formun kayıt kaynağına tablo belirlemişsiniz, İlk açıldığında formda 1. kayıt açılıyor ama siz Dlookup ile sürekli 1. kaydı değiştiriyordunuz.
1. mesajınızda belirriğiniz sorunun kaynağı buydu.
Alıntı:2- Eğer işlem yapmadan çıkış seçeneği kullanılırsa bu kez "kaynakliste" adındaki listede (formu tasarım görünümünde açıp tekrar çalıştırıldığında) son hasta kaydımızın birebir kopyası üretiliyor.
birebir kopya oluşturmuyor, sürekli ilk kaydı değiştiriyordunuz.
Bu kod sihirbaz yardımıyla oluşturulan bir kod.
27/12/2009, 01:51

ozanakkaya

(27/12/2009, 00:19)Hayri16 yazdı: Sayın sledgeab;
Sorunu şimdilik erteledim. Şöyle geçici bir çözüm buldum. Bir form daha yaptım. Eğer hasta yoksa sadece yeni kayıt yapılabilen forma, eğer varsa ve bilgileri eksikse sadece güncelleme yapılabilen forma gönderdim. İleride tekrar dönüp üzerinde değerlendirme yapacağım. Her şey için sonsuz teşekkürler.

ilk eklediğim örnekte sorun varmı bilmiyorum ama son eklediğim örnekte böyle bir sorun yok. aynı form üzerinden ekleme ve güncelleme yapılabiliyor.

Kod:
strSQL = "SELECT * FROM TBL_HASTA_BILGI "
Set rstkayit = New ADODB.Recordset
rstkayit.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
With rstkayit
.Find "[kaynakno]=" & Me.kaynakno
If Not rstkayit.EOF Then
.Fields("tc_no") = Me.htcno
.Fields("kaynakno") = Me.kaynakno
.Fields("adi") = Me.hadi
.Fields("soyadi") = Me.hsoyadi
.Fields("mah_koy_id") = Me.mahkoykutu.Column(0)
.Fields("adres") = Me.hadres
.Fields("tlf") = Me.htlf
.Fields("SGK_id") = Me.sgkkutu
.Fields("SGK_durum_id") = Me.sgkdurumkutu.Column(0)
.Fields("SGK_sicil") = Me.hsicil
.Update
MsgBox "GEÇERLİ KAYIT GÜNCELLENDİ"

Else
.AddNew
.Fields("tc_no") = Me.htcno
.Fields("kaynakno") = Me.kaynakno
.Fields("adi") = Me.hadi
.Fields("soyadi") = Me.hsoyadi
.Fields("mah_koy_id") = Me.mahkoykutu.Column(0)
.Fields("adres") = Me.hadres
.Fields("tlf") = Me.htlf
.Fields("SGK_id") = Me.sgkkutu
.Fields("SGK_durum_id") = Me.sgkdurumkutu.Column(0)
.Fields("SGK_sicil") = Me.hsicil
.Update
MsgBox "YENİ KAYIT EKLENDİ"
End If
End With
27/12/2009, 02:59

Hayri16

Sayın sledgeab;
Programı inceliyorum. Eğer sizin için sakıncası yoksa tek tek gidebilir miyiz? Çünkü Access bilgim bu kadar yoğunluğu kaldıramaz.
"1- Listeye clicklediğimizde liste kutusu geçici olarak kayboluyor.
liste kutusu güncellendiği sırada msgbox açıldığı için veriler kayboluyor."
Önce buradan başlayalım. Sanırım aşağıdaki kod bu güncelleme işini yapıyor.
Kod:
Private Sub kaynakliste_AfterUpdate()
On Error GoTo hata:

Dim rs As Object

Set rs = Me.Recordset.Clone
  rs.FindFirst "[Kimlik] = " & Str(Nz(Me![kaynakliste], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark

hata:     Exit Sub
End Sub
Şimdi size komik veya çok basit gelebilir ama anlamam açısından:
1- Genelde bu tür kodları kullanırken "option compare database" in altında
"Public rstkayit As ADODB.Recordset
Public intCount As Integer
Dim strSQL As String"
benzeri tanımları yapılıyordu. Yapmayınca hata alıyordum. Siz "rs" kullanmanıza rağmen hata vermiyor neden?
2-"dim rs as object" ile nasıl bir veri türü tanımı yapıyoruz?
3-"Set rs = Me.Recordset.Clone" satırı o recordset'in bir kopyasını mı alıyor?
4-" Str(Nz(Me![kaynakliste], 0))" ifadesiyle kaynakliste sayısal değerini kontrol ediyoruz.Nz ile boş ise 0 olsun diyoruz. Ama sonuçta str ile karakter değere çeviriyoruz. Sonra "kimlik" adındaki otomatik sayı değeriye karşılaştırıyoruz. Neden sayı ile karakter değişkenleri karşılaştırıldığında burada tür hatası vermiyor?
5-" If Not rs.EOF Then Me.Bookmark = rs.Bookmark" burada dosya sonu değilse "me.bookmark=rs.bookmark" la ne demek istiyoruz?
6- me.metin2 ile metin2 arasında ne fark vardır?Neden "me" kullanılır?
7-listenin geçici kaybolmaması için yukarıdaki kodu işlevini yitirmeyecek şekilde başka hangi yordama yazabiliriz?
Allah kolaylık versin. Umarım sorularımla size bıkkınlık vermemişimdir.
Saygılarımla...
1 2