النافذ قام بنشر مايو 28, 2005 قام بنشر مايو 28, 2005 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته،، فلقد سبق وأن سألت عن الحلقة التكرارية في مشاركة سابقة وكان السؤال : كيف لي أن أغير مثلاً حقل درجة الطالب في جدول بإضافة درجة واحدة لكل طالب باستخدام الكود وليس الاستعلام، فأنا أعرف طريقة الاستعلام.ما أريده هو كيف لي أن أستخدم حلقة تكرارية تمر على أول سجل في حقل ما إلى آخر سجل في الجدول .. باستخدام For..Next أو For .. Each .. Next لاني حاولت الوصول إلى Syntax الصحيح ولم أتمكن من ذلك .. فهل من إجابة ؟ و وصل رداً من الأخ مهند وكان : يمكنك فعل ذلك .. بواسطة حلقة Do .. Loopهذا مثال : Dim D as Object<!--QuoteEBegin-->Set D = CurrentDb.OpenRecordset("Students")<!--QuoteEBegin--> With D<!--QuoteEBegin--> Do while not(.EOF)<!--QuoteEBegin--> .Edit<!--QuoteEBegin--> .StudentDegree = .StudentDegree+1<!--QuoteEBegin--> .Update<!--QuoteEBegin--> .MoveNext<!--QuoteEBegin--> Loop<!--QuoteEBegin--> End With<!--QuoteEBegin--> Set D = Nothing وهذا هو رابط المشاركة : http://www.officena.net/ib/index.php?showt...205&hl=do+while سؤالي : كيف لي أن أجعل هذا التأثير في الإضافة على أكثر من حقل ، بمعنى ولتكن لدي عدد مرن من الحقول وأريد إضافة 1 لكل حقل .. ما أقصده كيف لي أن أنفذ حلقة تكرارية أخرى بالعرض على الحقول نفسها صفاُ داخل الحلقة السابقة .. ولقد حاولت باستخدام الحلقة For .. Each .. Next لكن لم استطع الوصول إلى الحل ... أرجو أن يكون الحل مرن بحيث لايعتمد على اسماء الحقول او عددها . وشكرا .
مهند عبادي قام بنشر مايو 29, 2005 قام بنشر مايو 29, 2005 Dim D as Object Set D = CurrentDb.OpenRecordset("Students") With D Do while not(.EOF) .Edit For R = 1 to 5 .field(r) = .field(r)+1 next .Update .MoveNext Loop End With Set D = Nothing
النافذ قام بنشر مايو 30, 2005 الكاتب قام بنشر مايو 30, 2005 أهلا بك أخي مهند وبارك الله لك في مجهوداتك ونفع الله بك .. لكن هل لي بحل أكثر مرونة ولايعتمد على عدد الحقول. وشكرا
مهند عبادي قام بنشر مايو 30, 2005 قام بنشر مايو 30, 2005 أخي الكريم الحل أن تضع أسماء الحقول التي تريد الزيادة في مصفوفة .. كما في هذا الكود : Dim D as Object , FN(5) as string FN(0) = "FieldName1" FN(1) = "FieldName2" . . . . Set D = CurrentDb.OpenRecordset("Students") With D Do while not(.EOF) .Edit For R = 1 to 5 .field(FN(r)) = .field(FN(r))+1 next .Update .MoveNext Loop End With Set D = Nothing
النافذ قام بنشر مايو 30, 2005 الكاتب قام بنشر مايو 30, 2005 أخي مهند .. حتى الآن لم أصل إلى ما أريد .. لأبين لك .. لدي جداول بالأكسل وباستمرار اعمل لها استيراد لأكسس لأنفذ عليها عملية لكل الحقول على كل الصفوف ، أي بكامل الجدول. المشكلة أن هذه الجداول مختلفة في مسميات الحقول وعددها، فمرة يكون عددها 100 حقل ومرات 150 ومرات 50 ، والاسماء تختلف. ولاحظ معي أن عدد الحقول كبير فيصعب كتابتها بالكامل في الكود من جهة أخرى. فأريد حل لايعتمد على اسماء الحقول وعددها، إنما حلقة تكرارية تعمل من اول حقل وحتى نهاية حقل أيا كان العدد. EOF وجد كوداً مشابهاً لما أريد في الـ Help الأكسس لكن اختلفت طريقة الاتصال بقاعدة البيانات وبالتالي هناك فرق في كتابة الكود.. Dim cnn1 As ADODB.Connection Dim rstEmployees As ADODB.Recordset Dim fldLoop As ADODB.Field Dim proLoop As ADODB.Property Dim strCnn As String ' Open connection and recordset. strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=Pubs;User Id=sa;Password=; " Set cnn1 = New ADODB.Connection cnn1.Open strCnn Set rstEmployees = New ADODB.Recordset rstEmployees.Open "employee", cnn1, , , adCmdTable ' Display the attributes of the connection. Debug.Print "Connection attributes = " & _ cnn1.Attributes ' Display the attributes of the Employee table's ' fields. Debug.Print "Field attributes:" For Each fldLoop In rstEmployees.Fields Debug.Print " " & fldLoop.Name & " = " & _ fldLoop.Attributes Next fldLoop
مهند عبادي قام بنشر مايو 31, 2005 قام بنشر مايو 31, 2005 Dim D as Object Set D = CurrentDb.OpenRecordset("Students") With D Do while not(.EOF) .Edit For R = 0 to D.Fields.Count-1 .field(r) = .field(r)+1 next .Update .MoveNext Loop End With Set D = Nothing
النافذ قام بنشر مايو 31, 2005 الكاتب قام بنشر مايو 31, 2005 شكرا أخي مهند .. أتعبتك معي ، لكن احاول أن اجرب الكود .. واعطاني رسالة خطأ .. Run_Time error '438' Object doesn't support this property or method
النافذ قام بنشر مايو 31, 2005 الكاتب قام بنشر مايو 31, 2005 (معدل) أبشرك أخي ، توصلت للخطأ وحله . .fields(r) = .fields(r)+1 فقط اضافة s وشكرا لك .. أتعبتك معي كثيرا ،، لاحرمك الله الأجر .. تم تعديل مايو 31, 2005 بواسطه النافذ
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.