اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

عاوز يعمل استبدال اتوماتيك عن الاستعلام عن صنف جديد

كما بالصورة انا باستخدام قارئ الباركود 

والنموذج دا للاستعلام فقط عن اسعار الاصنف المتوفرة بالمحل 

عاوز لما الزبوب على الشاشة يضرب الصنف بالبركود ويجي يستعلم عن صنف اخر يتمسح رقم الباركود للصنف الاول وياتى رقم الباركود للصنف الجديد

شكرا مقدما

قثف.PNG

قام بنشر (معدل)

اذا كان النموذج مرتبط مباشرة بالجدول استخدم التالي

DoCmd.GoToRecord , , acNewRec

لكن اذا لم يكن مرتبط بجدول استخدم التالي قبل استدعاء البيانات

[اسم عنصر التحكم أو مربع النص]=Null

 

تم تعديل بواسطه د.كاف يار
  • Like 1
قام بنشر
14 دقائق مضت, 200200ahmed said:

نعم مرتبط مباشرة 

هل هناك طريقة افضل من الربط المباشر حتى نستفيد من الاكواد التى ارسالتها الينا

نعم استعمل الكود التالي

On Error Resume Next 
         ' افراغ الحقول قبل الاستعلام
         [Text1]=Null
         [Text2]=Null
         [Text3]=Null

		' جلب البيانات
    Dim rs As DAO.Recordset  
    Set rs = CurrentDb.OpenRecordset("اسم جدول المنتجات هنا")    
    If Not rs.BOF And Not rs.EOF Then
        rs.MoveFirst                
        While (Not rs.EOF)
         [Text1]=rs.Fields("الباركود")
         [Text2]=rs.Fields("اسم المنتج")
         [Text3]=rs.Fields("السعر")
            rs.MoveNext
        Wend
    End If
    rs.Close
    Set rs = Nothing

 

قام بنشر
14 دقائق مضت, 200200ahmed said:

اين اضع الكود لنتفادى الخطا اخي العزيز

ضغه في حدث بعد التحديث

 

قبل البدء نفذي التالي

- قم بإزالة مصدر السجلات

- قم بإزالة مصدر عنصر التحكم لكل عنصر

 

مرفق لك مثال لذلك 

استدعاء بيانات المنتج.zip

  • Like 1
  • Thanks 1
قام بنشر (معدل)

شكرا للدكتور على المثال
وزيادة في الإثراء ، هذه طريقتي في الوصول للبيانات 
 

Private Sub Product_NO_AfterUpdate()
  Dim rst As DAO.Recordset
  
  On Error Resume Next
    
  Set rst = CurrentDb.OpenRecordset("Products", dbOpenSnapshot)
  With rst
    .FindFirst "Product_NO=" & Me.Product_NO
    If Not .NoMatch Then
      Me.Product_Name = .Fields("Product_Name")
      Me.Product_price = .Fields("Product_price")
      Me.Product_Image.Picture = ""
      Me.Product_Image.Picture = CurrentProject.Path & "\Images\" & .Fields("Product_Image")
    Else
      Me.Product_Name = Null
      Me.Product_price = Null
      Me.Product_Image.Picture = ""
      MsgBox "منتج غير مسجل", vbCritical + vbMsgBoxRight, "تنبيه"
    End If
  End With
  
  rst.Close
  'Set rst = Nothing
End Sub

 

تم تعديل بواسطه Hawiii
  • Like 2
قام بنشر (معدل)

ولاني نسيت أزيل .Fields  حيث لا داعي لها هنا ، هنا أرفق لكم التعديل:
 

Private Sub Product_NO_AfterUpdate()
  Dim rst As DAO.Recordset
  
  On Error Resume Next
    
  Set rst = CurrentDb.OpenRecordset("Products", dbOpenSnapshot)
  With rst
    .FindFirst "Product_NO=" & Me.Product_NO
    If Not .NoMatch Then
      Me.Product_Name = !Product_Name
      Me.Product_price = !Product_price
      Me.Product_Image.Picture = ""
      Me.Product_Image.Picture = CurrentProject.Path & "\Images\" & !Product_Image
    Else
      Me.Product_Name = Null
      Me.Product_price = Null
      Me.Product_Image.Picture = ""
      MsgBox "منتج غير مسجل", vbCritical + vbMsgBoxRight, "تنبيه"
    End If
  End With
  
  rst.Close
  'Set rst = Nothing
End Sub

 

تم تعديل بواسطه Hawiii
  • Like 1
قام بنشر

مشاركة بسيطة مع الاساتذه الكرام

ولكون المطلوب مجرد استعلام عن سعر الصنف ومعلوماته برقم الباركود في نموذج غير مرتبط

فيمكن عملها باستخدم حقل مخصص لقراءة الباركود يتم افراغة مباشرة بعد تنفيذ الكود ليكون جاهز لقراءة باركود اخر

واستخدم دالة DLookup

مع تحميل الحقول المطلوبة في الامر ويمكن اضافة حقول اخرى الى عدد 10 حقول ليكون الكود

On Error GoTo err
Dim x() As String
    A = DLookup("[Product_id] & '|' & [Product_Name] & '|' & [Product_price]", "tbl_2", "[n_w]='" & [tx1] & "'")
    x = Split(A, "|")
    [tx2] = x(1)
    [tx4] = x(0)
    [tx3] = x(2)
    Me.tx1 = Null
    Exit Sub
err:
  MsgBox "رقم الباركود غير صحيح", vbInformation, "تنبيه"
    [tx1] = Null
    [tx2] = Null
    [tx4] = Null
    [tx3] = Null

الاستعلام في الصورة 👇 باستخدام جهاز الباركود

 

khalid22133.gif

  • Like 2
  • Thanks 1
قام بنشر (معدل)

جميل الأخ خالد ، معلومة جديدة لي ، ولأول مرة أتعرف على هذه الطريقة في استخدام دالة DLookup ، لعلها مستجدة في الإصدارات الجديدة.
ليتك استخدمت نفس أسماء الحقول لتكون المقارنة أسهل وأكثر فائدة للمبتدئين.

تم تعديل بواسطه Hawiii
تصحيح أخطاء مطبعية
  • Like 2
قام بنشر

ياهلا باستاذنا الغالي هاوي

هذه الطريقة تعمل من الاصدار 2003

وسبق ان اشار لها الاستاذ جعفر عام 2015

اقتباس

 

 

41 دقائق مضت, Hawiii said:

ليتك استخدمت نفي أسماء الحقول لتكون المقارنة أسهل وأكثر فائدة للمبتدئين

هي نفس الاسماء

 A = DLookup("[Product_id] & '|' & [Product_Name] & '|' & [Product_price]", "tbl_2", "[n_w]='" & [tx1] & "'")
    x = Split(A, "|")
لو تلاحظ قسمنا نتيجة اي حسب موقعها من
 "|"
Product_id = x(0)
Product_Name = x(1)
Product_price = x(2)

تقريبا نفس فكرة القائمة المنسدلة عندما نحملها بقيمة عدة حقول ونستدعيها في النموذج

مع فارق ان القائمة مبنية على استعلام وهنا تم استخدام متغير لتحميل الحقول بواسطة DLookup ثم استخدام الحقول المحملة وفقا لموقع كل منها من "|"

Me.tx1 = Me.c_2.Column(0)
Me.tx2 = Me.c_2.Column(1)
Me.tx3 = Me.c_2.Column(2)

تحياتي لك

  • Like 1
  • Thanks 1
قام بنشر

شكرا لك أخ خالد ، أكيد شرحك مو لي 😃
ملخص الفكرة للمبتدئين : 
هو تجميع لعدة قيم حقول في متغير نصي واحد وهو هنا باسم (A) عن طريق البحث بدالة DLookup
ثم نجري عملية عكسية بتفكيك قيمة المتغير النصي إلى عدة قيم وتخزينها في مصفوفة وهي هنا باسم (x) عن طريق دالة Split
 

  • Like 1
قام بنشر
14 دقائق مضت, Hawiii said:

شكرا لك أخ خالد ، أكيد شرحك مو لي 😃

ههههههه

اكيد استاذنا الفاضل الشرح للمبتدئين وكنت بكتبها في الرد السابق ولكني نسيت والله

 

  • Like 1
قام بنشر (معدل)

المثال نفسه جمعت فيه ثلاث الطرق السابقة وأضفت عليه رابعة بعد الإستفادة من الطريقة الثالثة طريقة الأستاذ خالد
يعني المثال فيه أربع طرق الآن 
 

Private Sub Product_NO_AfterUpdate()
  'Hawiii
  Dim rst As DAO.Recordset
  Dim flds As Variant
  Dim fldsArray
  Dim fld As Field
  Dim count As Integer

  On Error Resume Next
  
  '-------------------------------------
  Const tableName As String = "Products"
  Const fldsKey As String = "Product_NO"
  '-------------------------------------
  
  Set rst = CurrentDb.OpenRecordset(tableName, dbOpenSnapshot)
  With rst
    For Each fld In .Fields
      If fld.Name <> fldsKey Then
        count = count + 1
        flds = flds & IIf(count > 1, "] & '|' & [", "[") & fld.Name
        'If count = 10 Then Exit For
      End If
    Next fld
    flds = flds & "]"
    '--------------------------
    flds = DLookup(flds, tableName, fldsKey & "=" & Me(fldsKey))
    If IsNull(flds) Then GoTo fldsClear
    fldsArray = Split(flds, "|")
    '--------------------------
    count = -1
    For Each fld In .Fields
      If fld.Name <> fldsKey Then
        count = count + 1
        Me(fld.Name) = fldsArray(count)
        Me(fld.Name).Picture = ""
        Me(fld.Name).Picture = CurrentProject.Path & "\Images\" & fldsArray(count)
        'If count = UBound(fldsArray) Then Exit For
      End If
    Next fld
  End With
  rst.Close
  Exit Sub
  '--------------------------

fldsClear:
  For Each fld In rst.Fields
    If fld.Name <> fldsKey Then
      Me(fld.Name) = Null
      Me(fld.Name).Picture = ""
    End If
  Next fld
  rst.Close
  MsgBox "منتج غير مسجل", vbCritical + vbMsgBoxRight, "تنبيه"

End Sub

 

 

استدعاء بيانات المنتج_3.rar

تم تعديل بواسطه Hawiii
  • Like 1
قام بنشر (معدل)
4 ساعات مضت, kha9009lid said:

ويمكن اضافة حقول اخرى الى عدد 10 حقول

الحقيقة لم أجد أي مرجع يذكر موضوع هذا العدد وأنا أضفت حقول أكثر من عشرة للتجربة ولم أجد أي رسالة خطأ في الكود.

تم تعديل بواسطه Hawiii
  • Like 1
قام بنشر

اخي خالد  واخي هاوى شكرا لكم ايضا علي الاهتمام والمشاركة واتمنى من اخى خالد التطبيق علي مثال ورفعة واكون شاكر لك 

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information