tablo değerlerini kontrol

16/05/2012, 15:06

accessman

iyi günler
bir tablomuz var
içinde tarihler ve izlemler vs var
bu tablotu mantıksal olarak kontrol etmemeiz lazım
nasıl mı
bir tarihteki mesela canlı bebek sayısı
daha önce olan bir tarihdeki canlı bebek sayısından az olmamalı
aynı olabilir ama fazla olmamalı
şöyle düşünelim
bir kadının izleminde toplam gebelik sayısı geçen sene 4 ise
bu sene 4 veya daha fazla olmalı
bunu nasıl kontrol edebiliriz
yani tarihe bakacak izlem değerine bakacak
aynı izlem aynı kişi için daha önce daha büyük değer girilmiş mi bakacak
tabiki bunu 500 hastanın toplam 2500 izlemi için yapacak
bir diğer ifadeyle
bir kişi için bir alandaki değer
daha önceki tarihlerde
daha küçük girilmiş mi bakacak
eğer girilmişse hastanın tc nosunu ve ilgili kaydı bir tabloya ekleyecek

izlem.rar

bir döngü hastaları tc no ya göre tarayacak
bir döngü izlem tarihlerine göre tarayacak
işlemde önceki veya sonraki izlemdeki değeri karşılaştıracak
Kod:
Private Sub Komut0_Click()
On Error Resume Next
Dim kim, ne As String
Dim sor, bul As String

Dim rs As New ADODB.Recordset
Dim ds As New ADODB.Recordset

sor = "SELECT kadin_izlem.Kimlikno FROM kadin_izlem ORDER BY kadin_izlem.Kimlikno;"
rs.Open sor, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

    rs.MoveFirst
    kim = rs.Fields("Kimlikno")

    
bul = "SELECT kadin_izlem.Kimlikno, kadin_izlem.YapilmaTar, kadin_izlem.CanliDogum FROM kadin_izlem WHERE (((kadin_izlem.Kimlikno)= kim)) ORDER BY kadin_izlem.YapilmaTar;"
ds.Open bul, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
    
    ds.MoveFirst
    ne = ds.Fields("Kimlikno")
        
    'rs.Update
    ds.Close
    rs.Close
End Sub
bu kodda nerede yanlışlık var
birinci döngüde elde ettiğim ki değeri msgboxda hastanın tc sini veriyor
ama ikinci Sql sorgusunda kriter olarak görmüyor
bul sorgu dizesinde kim değerini nasıl kullanabilirim
16/05/2012, 17:31

mk70

Sayın accessman,
Tablonuzdaki kayıtlı kişi aynı kişi ise (ki öyle gibi görünüyor) kişi bilgileri tablosu ile izleme bilgileri tablosunu ayırmanız gerekmektedir. Bu bilgileri sorguda birleştirip sorgulamayı sorgu üzerinden yapmalısınız.
Ben çalışmanızı bu hale getirdim gerisi üstadlara kalıyor...


izlem1.rar
16/05/2012, 17:34

accessman

ilginiz için teşekkürler
16/05/2012, 19:45

accessman

çözümü ekliyorum
biraz zor oldu benim için ama güzel oldu
Kod:
Private Sub Komut0_Click()
On Error Resume Next
Dim sor, bul As String

Dim tc, tcE As String
Dim yt, ytE As Date
Dim tg, tgE As Integer
Dim ilerle As Integer
Dim hatasay As Integer

Dim rs As New ADODB.Recordset
sor = "SELECT kadin_izlem.Kimlikno, kadin_izlem.YapilmaTar, kadin_izlem.ToplamGebelik, kadin_izlem.CanliDogum, kadin_izlem.OluDogum, kadin_izlem.YasayanCocuk, kadin_izlem.OlenCocuk, kadin_izlem.DusukSayi, kadin_izlem.ZorlaDusuk FROM kadin_izlem ORDER BY kadin_izlem.Kimlikno, kadin_izlem.YapilmaTar;"
rs.Open sor, CurrentProject.Connection, adOpenDynamic, adLockOptimistic

    rs.MoveFirst
ilerle = 1
hatasay = 0
Do
    
If ilerle <> 1 Then
    If tcE = rs.Fields("Kimlikno") Then
        If ytE < rs.Fields("YapilmaTar") Then
            If tgE > rs.Fields("ToplamGebelik") Then
            
            
            Dim ds As New ADODB.Recordset
            ds.Open "hatali", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
            ds.AddNew
            ds.Fields("Kimlikno") = rs.Fields("Kimlikno")
            ds.Fields("YapilmaTar") = rs.Fields("YapilmaTar")
            ds.Fields("YapilmaTarE") = ytE
            ds.Fields("ToplamGebelik") = rs.Fields("ToplamGebelik")
            ds.Fields("ToplamGebelikE") = tgE
            ds.Update
            ds.Close
            Set ds = Nothing
              
              
            End If
        End If
    End If
End If

    tcE = rs.Fields("Kimlikno")
    ytE = rs.Fields("YapilmaTar")
    tgE = rs.Fields("ToplamGebelik")

    rs.MoveNext
ilerle = ilerle + 1
Loop Until rs.EOF

    
    rs.Close
    
End Sub
16/05/2012, 19:55

C*e*l*o*y*c*e

örnegin kendisinide son haliyle ekleseydiniz keşke
17/05/2012, 11:50

accessman

tc numaraları ile uğraşmak istemedim