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

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

قام بنشر

السلام عليكم 

كما هو معلوم عند استخدام جملة ال SQl فى استدعاء والعمل على سجلات جدول ما فاننا نستخدم كود مثل هذا

dim M As Recordset
Set m = CurrentDb.OpenRecordset("TabelName",DBOpenDynaset)
with M 
.AddNew
!Field1 = me.Field1
!Field2 = me.Field2
.UpDate
End With

وسؤالى الآن هو أننى أحاول القيام باختصار هذا الكود على النحو التالى لكثرة الحقول التى سيتم ذكرها بالكود أولا وثانيا للحاجة لوضع هذه الكود بوحدة نمطية لاستدعائها عند الحاجة

dim M As Recordset
Set m = CurrentDb.OpenRecordset("TabelName",DBOpenDynaset)
For Each control in me.controls
	with M 
	.AddNew
	!control.name = me.control.name
	.Update
	.MoveNext
	End With
Next

ولكن للأسف يحدث خطأ لعدم قبول !!!!!!! لاسم المغير الذى بعدها 

فهل هنالك حيلة ما لتفادى هذه المشكلة وجزاكم الله خيرا

 

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

و عليكم السلام

اخي العزيز ابو عبد الله

 

هناك طريقة بالكود التالي :

Public Function abc(frm As Variant) As Form
Dim rs As dao.Recordset
Dim I As Integer
 
Set rs = CurrentDb.OpenRecordset("tbl1")
With rs
    .AddNew
    For I = 1 To 3
        .Fields("Fld" & CStr(I)) = frm("txtField" & CStr(I))
    Next I
    .Update
End With
rs.Close
Set rs = Nothing
End Function

لاحظ بأن الطريقة تعتمد على توحيد اسماء الحقول  ( fld ) و لكن باضافة رقم متزايد يبدأ من 1   .. و كذلك اسماء مربعات النصوص (txtField)

الحلقة التكرارية تبدأ من 1 و تنتهي بعدد مربعات النصوص لديك

ارجو ان يكون هو المطلوب

 

للمعلومية : هذا الحل ليس بإستخدام sql كما ذكرت اخي ابو عبد الله و انما باستخدام DAO

و ممكن الحاق البيانات  باستخدام sql  بالكود التالي :

DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tbl1 ( fld1, fld2, fld3 )SELECT [forms]![frm1]![txtField1] , " & _
 "[forms]![frm1]![txtField2] , [forms]![frm1]![txtField3] ;"
DoCmd.SetWarnings True

تفضل مثال على ذلك

 

بالتوفيق

 

test.rar

تم تعديل بواسطه يوسف أحمد
  • Thanks 1
  • 4 weeks later...
قام بنشر
في 11/8/2017 at 01:32, يوسف أحمد said:

تم التعديل حسب المطلوب ارجو ان يكون هو المطلوب

جزاك الله خيرا وبارك الله لكم

آسف جدا لتأخرى بالرد ولكن كانت لدى مشكلة فى الاتصال بالشبكة

في 11/7/2017 at 23:53, أبو عبدالله الحلوانى said:

ماذا لو أن عناصر التحكم لها نفس أسماء الحقول بالجدول

ولكنى كنت أقصد بهذا  مثلا أن الجدول مكون من حقول كهذه

ID - Test - set

وكذلك هى أسماء مربعات النص على الفورم.

 

قام بنشر

أهلا بك أستاذي عبدالله

فكرة سليمة ومنطقها صحيح.. لكن المشكلة في الإيعاز.. استخدم هذه الشفرة

ملاحظة:  ليس كل عناصر التحكم في النموذج تعيد بيانات ولذلك يجب وضع شرط لتقيدها

Sub ADD_NEW()
  Dim M As DAO.Recordset
  Dim C As Control
  Set M = CurrentDb.OpenRecordset("Employees", dbOpenDynaset)
  M.AddNew
  For Each C In Detail.Controls
    If C.ControlType = acTextBox Then
      M(C.Name) = C.Value
    End If
  Next
  M.Update
End Sub

 

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

السلام عليكم 

الله الله ياسلام عليك أستاذى @أبو إبراهيم الغامدي  جزاك الله خيرا وأحسن اليك

وهذا تطبيق بسيط للفكرة لاثراء الموضوع (تم اضافة شفرتكم بعد تعديل بسيط فى موديل عام يمكن استدعائه من أكثر من فورم ويتعامل مع أكثر من جدول فى آن واحد )  وهذا نموذج بسيط للفكرة أضفته على مرفق أستاذنا يوسف لجمع أطراف الموضوع جميعا فى مرفق واحد

 

test.rar

في 11/7/2017 at 03:00, يوسف أحمد said:

للمعلومية : هذا الحل ليس بإستخدام sql كما ذكرت اخي ابو عبد الله و انما باستخدام DAO

أشكر أستاذنا يوسف أحمد على هذه المعلومة القيمة (طبعا أنا مجرد هاوى لذى مثل هذه المعلومات القيمة تغيب عنا كثيرا)

أرجو من الادارة تعديل عنوان الموضوع الى 

هل يمكن استخدام ! مع متغير بدلا من اسم الحقل باستخدام DAO

وجزاكم الله خيرا 

تمت الفائدة والحمد لله

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.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information