Skip to main content

AccessTr.neT


Formlar arası veri aktarımı

Formlar arası veri aktarımı

Çözüldü #7
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.
.rar sled_RECETE2003.rar (Dosya Boyutu: 492,02 KB | İndirme Sayısı: 48)
Cevapla
Çözüldü #8
(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

Cevapla
Çözüldü #9
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...
Hayri16, 12-11-2009 tarihinden beri AccessTr.neT üyesidir.
Son Düzenleme: 27/12/2009, 03:00, Düzenleyen: Hayri16.
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da