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

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

قام بنشر

السلام عليكم

 

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

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

علما بانهم حوالى 6 قواعد بيانات

 For r = 2 To 18 'Sheets("Settings").[B18].End(xlUp).Row

    DBFullName = Application.ActiveWorkbook.Path & "\" & Sheets("Settings").Cells(r, "B").Value '"\Database#01.accdb"
    
    ' Open the connection
    Set Connection = New ADODB.Connection
    Connect = "Provider=Microsoft.ACE.OLEDB.12.0;"
    Connect = Connect & "Data Source=" & DBFullName & ";"
    Connection.Open ConnectionString:=Connect

    Set Recordset = New ADODB.Recordset
    
    With Recordset
    
'   Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "# ORDER BY [fdName4]"
    Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "#"
    
   
      '  Source = "SELECT * FROM Table2 WHERE [fdName2] BETWEEN " & startdt & " AND " & stopdt & " ORDER BY [fdName2]"
        .Open Source:=Source, ActiveConnection:=Connection

        For Col = 0 To Recordset.Fields.Count - 1
          '  Range("A2").Offset(0, Col).Value = Recordset.Fields(Col).Name
        Next

        Range("A5").Offset(1, 0).CopyFromRecordset Recordset
    
    
    End With
    
'//------------------------End Conditioanl 1 -------------------------------------------
    
    Next r
    
    
  '  ActiveSheet.Columns.AutoFit
    Set Recordset = Nothing
    Connection.Close
    Set Connection = Nothing

End If

 

قام بنشر

ينبغي علينا أولا فهم الكود الخاص بك أخي الكريم

معنى الكود أنك تبتصل ب 17 قاعدة بيانات جميعها باسم Database#01.accdb وموجودة في 17 مجلد اسم المجلد هو الخلايا من b2 إلى b18

ثم تستعلم من قاعدة البيانات وتضع ناتج الاستعلام في نفس الخلية a6

هل فهمي للكود صحيح؟

وما المطلوب تصحيحه ؟

قام بنشر

image.png.7b0e715eb4e5b39af3a5eb5a16e2ba32.png

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

ما اريدة ان يتم فتح قواعد اليانات بالترتيب واحدة بعد الاخرى وجلب النتجية بناءا على تاريخ محدد من والى

 

 

تظر النتيجة بالشيت المسمى Find 

image.png.91e81aba266fc0235a72523034e09fa6.png

  • أفضل إجابة
قام بنشر
في ٢٦‏/٦‏/٢٠٢١ at 20:48, A L M A I S T R O said:
Range("A5").Offset(1, 0).CopyFromRecordset Recordset

المشكلة في هذا الجزء الذي ينسخ محتويات الاستعلام ويضعها في الخلية A6 في الشيت الحالي

وحسب كلامك ينبغي معرفة آخر صف في شيت find ثم النسخ بعده 

sheets("find").range("a" & sheets("find").range("a" & rows.count).end(xlup).row + 1). CopyFromRecordset Recordset

بالتوفيق 

قام بنشر

الف شكر ... تمت بنجاح

ا/محمد صالح ... لى سؤال اخر لو تسمحلى

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

بحيث اقدر اخلى المستخدم يبحث برقم الهاتف ورقم الفاتورة

علما بان اسم الحقل الخاص برقم الفاتورة اسمه fdname1

واسم الحقل الخاص برقم الموبايل fdname16

وسيتم فى ورقة الاكسيل كتابة رقم الفاتورة فى الخلية مثلا A1

ورقم الموبايل فى الخلية A

وفى حالة كانت الخلية A1 و A2 فارغه

يجعل البحث كما هو بين التاريخين

Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# And #" & stopdt & "# "
قام بنشر

جرب هذا الاستعلام

Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# And #" & stopdt & "#" & IIf([A1] = "" And [A2] = "", "", " And ([fdName4] = " & [A1] & " Or [fdName16] = " & [A2] & ")") & ";"

 

قام بنشر

وضعت هذا الاستعلام كما ذكرت

        mobi = Sheets("Find").Range("G1")
      invois = Sheets("Find").Range("G2")
 

 

        Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "#" & _
       IIf(mobi = "" And invois = "", "", " AND ([fdName16] = " & mobi & " OR [fdName1] = " & invois & ")") & ";"
 

علمان بان الخلية G1 هى رقم الموبايل

والخلية G2 هى رقم الفاتورة .. ولكن لا تعطى اى نتائج

image.png.e3a0e45d9b97cc507f91bfba286ae115.png

قام بنشر

عدم إعطاء اي نتائج لها احتمالات كثيرة منها:

* عدم وجود نتائج فعلا في قاعدة البيانات تنطبق عليها هذه الشروط. 

* احتمال وجود اختلاف في نوع البيانات بين الحقول في الأكسس والخلايا في اكسل. 

فإذا كانت الحقول في الأكسس نصية فيجب احاطتها بعلامتين تنصيص. 

بالتوفيق 

قام بنشر

لما خليته يبحث عن شرط واحد فقط اشتغل

 

         Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "#" & _
        IIf([inv] = "", "", " AND ([fdName1] = " & [inv] & ")") & ";"

 

حقل الموبايل فى الاكسيس نصى

وحقل الفاتورة فى الاكسيس رقمى

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

ا/محمد صالح

ما ظبتت معى

 

 

   Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# And #" & stopdt & "#" & _
 IIf("G1" = "" And [G2] = "", "", " And ([fdName16] = " & "G1" & " Or [fdName1] = " & [G2] & ")") & ";"

يرجى المساعدة

تم تعديل بواسطه A L M A I S T R O
قام بنشر

اقصد إحاطة القيم بعلامتين تنصيص وليس اسم الحقل 

Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "#" & _
       IIf(mobi = "" And invois = "", "", " AND ([fdName16] = '" & mobi & "' OR [fdName1] = " & invois & ")") & ";"
 

لو ارفقت مثالا كان أفضل من كل هذا الشغل النظري الذي لا يفيد

قام بنشر

ظبطت معى لكن توجد مشكلة واحدة

اريد ان يكون البحث سواء برقم الهاتف او برقم الفاتورة غير مرتبطين ببعض

 

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

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

 

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

 

انا بشكر تعبك معايا والله بس متعشم خير

قام بنشر
Source = "SELECT * FROM Table2 WHERE [fdName4] BETWEEN #" & startdt & "# AND #" & stopdt & "#" & _
   IIf(mob = "", "", " AND [fdName16] = '" & mob & "'") & IIf(inv = "", "", " And [fdName1] = " & inv) & ";"

تم تعديل شرط إذا كان أحد الخليتين فارغا وإعادة صياغة الاستعلام

قام بنشر

انا اسف لتعبك معايا

 

عند البحث بالموبايل والفاتورة معا تأتى النتيجة مطبوطة تمام

وعند البحث بالموبايل فقط تأتى ايضا مظبوطة تماما

 

ولكن عند البحث برقم الفاتورة فقط لا تأتى اى نتائج

 

 

قام بنشر

عندي يعمل بصورة ممتازة

ربما بسبب  أنه حينما يكون رقم الموبايل فارغا فالمتغير mob يساوي 0 وبهذا لا يتحقق الشرط

فالصواب حذف الصفر المضاف قبل متغير الموبايل

mob = Sheets("Find").Range("G1").Value

وجعل تنسيق الخلية G1 نص text حتى يقبل الصفر في البداية

وهذا ما قمت به عندي من البداية

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