اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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


إذهب إلى أفضل إجابة Solved by أ / محمد صالح,

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

السلام عليكم

 

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

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

علما بانهم حوالى 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