

 طريقه الاستخدام
Private Sub cmdSave_Click()
On Error GoTo Err_CmdSave_Click

     If TestData= True Then
       UpdateMaster Me.Form, "Licens" 
      Else
         MsgBox eMSG, , Pname
     End If


Exit_CmdSave_Click:
    Exit Sub

Err_CmdSave_Click:
    MsgBox Err.Description
    Resume Exit_CmdSave_Click
End Sub


التحقق من الحقول
Function TestData(frm As Form) As Boolean
 'false --- error some data required not filled up
 'اذا  في قيمه اذا افحص الحقل لتحقق من القيمه TAG  افحص 
 ' مثال TAG
 ' TAG="لم تدخل تاريخ الرخصة"
 ' سوف يقوم البرنامج بعرض الرساله المحموله بالتاق (TAG)
Dim ctl As Control


On Error GoTo Err_TestData

  For Each ctl In frm.Controls
 'combo box او   text box اذا كان الكونترول  
      If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
' tag  هل توجد قيمه في 
       If ctl.Tag <> "" Then
        ' اذا يجب التحقق من قيمه هذا الحقل
          If (IsNull(ctl.Value) Or ctl.Value = "" Or ctl.Value = 0) Then
             '   tag اذا القيمه غير موجوده ضع رساله الماخوذه من 
             MsgBox ctl.Tag, vbExclamation, Pname
             TestData = False
             Exit Function
          End If
       End If 'tag
      End If
  Next ctl
  TestData = True
Exit_TestData:
     Exit Function
Err_TestData:
    MsgBox Err.Description
    TestData = False
    Resume Exit_TestData
End Function

Function UpdateMaster(frm As Form, RemoteTbl as String) as boolean

Dim rst As Recordset
Dim rstRemote As Recordset
Dim vTemp1 As Variant
Dim ThisLicenNo As Long
Dim StartTime As Single
Dim TryNo  As Integer
Dim dbs As DAO.Database
Dim fldname As String
Dim fldLoop As Field

TryNo = 0
    vTemp1 = DMax("[LicenNo]", RemoteTbl)
    If IsNull(vTemp1) Then  vTemp1=1
    ThisLicenNo = vTemp1 + 1

    Set dbs = CurrentDb
    Set rstRemote = dbs.OpenRecordset(RemoteTbl)

    If Not rstRemote.Updatable Then
       MsgBox "لا استطيع الوصول الى ملف البيانات الرئيسي .فضلا تحقق من الشبكه"
       rstRemote.Close
       dbs.Close
       Set rstRemote = Nothing
       Set dbs = Nothing
       UpdateMaster=False
       Exit Function
    End If
 
Retry:
 
 If TryNo = 3 Then
       MsgBox "لا استطيع الوصول الى ملف البيانات الرئيسي .فضلا تحقق من الشبكه"
      rstRemote.Close
      dbs.Close
      Set rstRemote = Nothing
      Set dbs = Nothing
      UpdateMaster=False
      Exit Function
 End If
 
On Error GoTo 0

rstRemote.AddNew

'قم بتسجيل  الرقم هذا وحجزه 
rstRemote![LicenNo] = ThisLicenNo     
'  الان ضع النموذج المرسل 
Set rst = frm.RecordsetClone
rst.MoveFirst        
              For Each fldLoop In rst.Fields
                     ' ممكن اختصار الكود ولكن وضعت  هذا لتوضيح فقط
                      fldname = fldLoop.name
                      'ID هو رقم  ألي  
                      If (fldname <> "ID" And fldname <> "LicenNo") Then
                           '  نقوم  بنسخ القيمه الموجوده بالنموذج الى الجدول المربوط  في الخادم
                           rstRemote.Fields(fldname) = rst.Fields(fldname).Value
                      End If
              Next fldLoop
' بعض الحقول  اللتي لاتوجود بالنموذج وتحتاج تسجيلها بجدول المربوط
rstRemote!UserNameX = Forms!Switchboard.UserName.Caption
rstRemote!TimeStamp = Now

rstRemote.Update

' الان قم بعرض رقم التسجيل في النموذج
frm.LicenNo = ThisLicenNo  ' if seccesssfully show it

Set rstRemote = Nothing
Set rst = Nothing
dbs.Close
Set dbs = Nothing
UpdateMaster=True
Exit Function


' هنا اذا حدث خطاء بالاتصال بالشبكه احتاج ان انتظر عده ثواني والمحاوله مره اخرى لان
'ممكن يكون احد المستخدمين يحاول ان يضيف  سجل جديد 
Retry_Err:
  TryNo = TryNo + 1
  StartTime = Timer
  ' wait 5 seconds then retry
  Do While Timer < StartTime + 5
   DoEvents
  Loop
  Resume Retry
    
End Function
