Alt Formda Otomatik Sıra numarası verme

28/01/2009, 16:21

kusvam

Kendi müşterilerimi takip edeceği veritabani olusturmaya calisiyorum. Müşterilerin temel bilgilerini ana form olarak; ürün hareketlerini ise altform olarak düzenledim (bkz ekteki dosya). Müşterilere ürün gönderdiğimde alt forma işleyeceğim fakat müşterilere ürün gönderdiğimde “SıraNo” bölümü ardaşık şekilde artmasını istiyorum “SıraNo” bölümünü “otomatiksayı” yaptığımda sürekli artıyor ben ise her müşterimde artmasını istiyorum. Bu konuda yardımcı olacak varsa şimdiden teşekkür ederim..
28/01/2009, 17:40

ozanakkaya

Altformda sayıların sıralı olmasını istediğin metin Kutusunun denetim Kaynağına

Kod:
=RowNum([Form])
yaz ve aşağıdaki kodları altforma ekle

Kod:
Public Function RowNum(frm As Form) As Variant
On Error GoTo Err_RowNum
    With frm.RecordsetClone
        .Bookmark = frm.Bookmark
        RowNum = .AbsolutePosition + 1
    End With
Exit_RowNum:
    Exit Function
Err_RowNum:
    If Err.Number <> 3021& Then
        Debug.Print "RowNum() error " & Err.Number & " - " & Err.Description
    End If
    RowNum = Null
    Resume Exit_RowNum
End Function
Function GetLineNumberForm(f As Form)
    Dim rs As Recordset
    Dim frmMain As Form
    Dim frmCur As Form
    Dim strName As String
    Dim IsItSubForm As Boolean
    Dim strFName As String
    On Error Resume Next
    strFName = f.Parent.Name
    IsItSubForm = (Err = 0)
    On Error GoTo Err_GetLineNumber
    If IsItSubForm Then
        Set frmMain = f.Parent.Form
        strName = f.Name
        Set frmCur = frmMain(strName).Form
        Set rs = frmCur.RecordsetClone
    Else
        Set rs = f.RecordsetClone
        Set frmCur = f
    End If
        rs.Bookmark = frmCur.Bookmark
        GetLineNumberForm = rs.AbsolutePosition + 1
Bye_GetLineNumber:
       Set rs = Nothing
       Set frmMain = Nothing
       Set frmCur = Nothing
       Exit Function
Err_GetLineNumber:
       Resume Bye_GetLineNumber
End Function
Function Serialize(qryname As String, keyname As String, keyvalue) As Long
    Dim dbs As Database
    Dim rs As Recordset
    Set dbs = CurrentDb
    On Error GoTo Err_Serialize
    Set rs = dbs.OpenRecordset(qryname, dbOpenDynaset, dbReadOnly)
       On Error GoTo Err_Serialize
         Select Case rs.Fields(keyname).Type

            Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
            DB_DOUBLE, DB_BYTE
               rs.FindFirst "[" & keyname & "] = " & keyvalue

            Case DB_DATE
               rs.FindFirst "[" & keyname & "] = #" & keyvalue & "#"
            Case DB_TEXT
               rs.FindFirst "[" & keyname & "] = '" & keyvalue & "'"
            Case Else
               MsgBox "ERROR: Invalid key field data type!"
         End Select
        Serialize = Nz(rs.AbsolutePosition, 0) + 1
Err_Serialize:
        rs.Close
        dbs.Close
        Set rs = Nothing
        Set dbs = Nothing

End Function
29/01/2009, 09:46

kusvam

sledgeab
uygulamaya formda uyguladım çok zorda olsa başardım Teşekkür ediyorum.. eline sağlık
yalnız tabloya veriler işlenmiyor.. bu sorunu nasıl aşarım.. birde uyulamaya örnek üzerinde yaparsak çok sevinirim..
15/02/2009, 01:34

afil

evet bu kodlar çok işime yaradı ama sıra numaraları tablolara işlenmediği için rapor alırken bu sıra numaraları gelmiyor. bu konuda da yardımcı olursnaız sevinirim.
15/02/2009, 06:24

ozanakkaya

sn afil,
raporda sıra numarasının bulunduğu metin kutusunun denetim kaynağına
Kod:
=1

Geçerli Toplam'a da

Kod:
Tümü Üzerinde
yaz.