الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كود يفتح ملف في الذاكرة وتعديل قيمة معينة في حقل

مغلق
بدأه ahmed7573 في 12 يناير 2008 · 3 رد · 761 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخواتي الأعزاء

ارجو المساعدة في كود يفتح ملف في الذاكرة

بحيث نستطيع أن نبحث عن قيمة معينة في حقل ونعدلها إلى قيمة أخرى

هذا والسلام عليكم ورحمة الله وبركاته

بارك الله فيكم

#2

السلام عليكم اخي الكريم

يفضل ارفاق ملف كمثال للفكرة حتي يتمكن الاخوة بالمنتدي من تقديم كل المساعدة

وللبدئ فى البحث قبل ارفاق ملف ممكن تبحث فى التالي :

الدالة العبقرية DlookUp

حيث تقوم بفتح جدول او استعلام وفقا لشروط معينة وترجع بقيمة حقل بسجل معين

الكود OpenRecordset

يقوم بنفس ما تقوم DlookUp ولكن الناتج ممكن يكون مجموعو سجلات كما هناك اساليب للتحرك بين هذه السجلات بالذاكرة وذلك اجراء اختبارات IF او اي اجراءات وايضا يمكنك التعديل عليها

ممكن تكتب RecordSet بمحرر الفيجوال بيسك ثم تحدد الكلمة واضغط F1 للحصول علي امثلة حول هذا الموضوع

اخوك فى الله

Microsoft Certified DataBase Administrator MCDBA

#3

السلام عليكم ورحمة الله وبركاته

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

Dim DBC As Database

Dim cs As Recordset

Dim SQL As String

Dim SQL1 As String

Dim SQL2 As String

Dim DBPH As String

Dim DBPH2 As String

DBPH = CurrentProject.FullName

DBPH2 = ""

DBPH2 = Left(DBPH, InStrRev(DBPH, "\")) & "data.mdb"

Set DBC = OpenDatabase(DBPH2)

Set cs = DBC.OpenRecordset("cs141000", DB_OPEN_TABLE)

SQL = "UPDATE cs141000 SET cs141000.per_ind=0 " & _

"WHERE (((cs141000.per_ind)is null));"

SQL1 = "UPDATE cs141000 SET cs141000.res_ind=0 " & _

"WHERE (((cs141000.res_ind)is null));"

SQL2 = "UPDATE cs141000 SET cs141000.ser_ind=0 " & _

"WHERE (((cs141000.ser_ind)is null));"

If MsgBox("åá ÊÑíÏ ÊÕáíÍ ÈíÇäÇÊ ãßÊÈ ÇáÕÍÉ", _

vbCritical + vbYesNo, _

"ÊÍÐíÑ") = vbYes Then

DoCmd.SetWarnings False

DoCmd.RunSQL SQL

DoCmd.RunSQL SQL1

DoCmd.RunSQL SQL2

End If

End Sub

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

أخوكم أبو حسين

#4

هوا بصراحة أنا لدي فكرة بسيطة جداً وهو إستخدام ADODB.Recordset دون الإتصال مع أي مصدر للبيانات كذاكرة مؤقتة ، وعند إغلاق البرنامج ينتهي كافة المعلومات الموجودة بالـ Rs التابعة لمكتبة ADO .

أنظر المثال التالي :

Option Explicit
''Import from references --> Microsoft ActiveX Data Object 2.X Library
Dim Rs As New ADODB.Recordset

Private Sub Command1_Click()
	Dim I As Long
	''3- عرض محتويات الذاكرة.
	For I = 1 To Rs.RecordCount - 1
		MsgBox Rs!fld1 & ":  " & Rs!fld2
		Rs.MoveNext
	Next
	Rs.MoveFirst
End Sub

Private Sub Form_Load()
	''1- بدلاًمن إرتباطة بقاعدة بيانات Recordset بناء أمر الـ.
	Rs.Fields.Append "fld1", adBigInt
	Rs.Fields.Append "fld2", adVarChar, 50
	Rs.Open
	''2- Reordset إدراج مجموعة من السجلات في ذاكرة الـ.
	Rs.AddNew: Rs!fld1 = 1: Rs!fld2 = "Ahmed"
	Rs.AddNew: Rs!fld1 = 2: Rs!fld2 = "Usif"
	Rs.AddNew: Rs!fld1 = 3: Rs!fld2 = "Sara"
	Rs.AddNew: Rs!fld1 = 4: Rs!fld2 = "Mahmod"
	Rs.AddNew: Rs!fld1 = 5: Rs!fld2 = "Farag"
	Rs.AddNew: Rs!fld1 = 6: Rs!fld2 = "Ashraf"
	Rs.Update
	Rs.MoveFirst
End Sub

لاحظ في المثال السابق إستخدمت ذاكرة الـ Rs كذاكرة مؤقتة مما تسبب في إضافة مجموعة من البيانات أثناء تحميل النافذة Form_Load !!!

كما أنه يمكنك إجراء حفظ لمحتويات الـ Rs في مسار معين كما لي :

Rs.Sava App.Path & "\Data.rs"

ويمكنك أيضاً اللجوء الي البيانات المحفوظة بالملف Data.rs أثناء فتح النافذة بدلاً من بناء السجل أثناء عملية التحميل ، أنظر المثال التالي :

قم بتغيير هذا الكود من Form_Load :

''1- بدلاًمن إرتباطة بقاعدة بيانات Recordset بناء أمر الـ.
Rs.Fields.Append "fld1", adBigInt
Rs.Fields.Append "fld2", adVarChar, 50
Rs.Open

الي الشكل التالي :

	On Error Resume Next
	''1- بدلاًمن إرتباطة بقاعدة بيانات Recordset بناء أمر الـ.
	If (Dir(App.Path & "\Data.rs") <> "") Then
		''في حالة وجود بيانات قديمة مخزنة علي مشغل السواقة يتم فتحها.
		Rs.Open App.Path & "\Data.rs"
		''في حالة أن هذا الملف ملف وهمي أو حدوث أي خطأ أثناء التحميل يتم.
			''الذهاب الي عملية الإنشاء اليدوي.
		If (Err.Number <> 0) Then Err.Number = 0: GoTo OpenRs
	Else
OpenRs:
		''في حالة عدم وجود بيانات مسجلة علي مشغل السواقة يتم إنشاء السجل من جديد.
		Rs.Fields.Append "fld1", adBigInt
		Rs.Fields.Append "fld2", adVarChar, 50
		Rs.Open
	End If

أما بالنسبة للـ Recordset التابع لمكتبة DAO فبصراحة أنا لديا معلومات أساسية عنها وليست كما بهذه الإمكانيات !!

أتمني أن يكون هذا ما تطلبة

بالتوفيق

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

هذا الموضوع مغلق.

مواضيع مشابهة