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

مطلوب استخراج اسم الجدول من مصدر بيانات صف مربع تحرير


ابوخليل

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

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

اما ان الهمة ضعفت في البحث والمحاولة واما ان المسألة  صعبة فعلا

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

لذا احببت ان يشاركني اخوتي شحذا للهمم وتنشيطا للفكر

المسألة في المرفق ادناه :

يوجد نموذج يشتمل على مربعي تحرير  ، وايضا جدولان

عند النقر المزدوج على اي حقل تظهر رسالة

اريد  ان يظهر في هذه الرسالة : ((((((( اسم الجدول )))))))) الخاص بمصدر بيانات الصف لهذا المربع

فقط .. هذا كل شيء

DatabaseUp8.rar

رابط هذا التعليق
شارك

أسأل الله العظيم لك طول العمر مع حسن العمل مع سلامة البدن يارب 🙂 

 

تفضل عمي @ابوخليل

image.png.5f70796f0e60f76ff26b57c21aca5af7.png

استخدمت هذه الدالة لاستخراج اسم الجدول من جملة ال SQL :

Function ExtractTableNameFromSQL(strSQL As String) As String

    Dim strTableName As String
    
    ' استخرج اسم الجدول من الجملة SQL
    strTableName = Mid(strSQL, InStr(strSQL, "FROM ") + 5) ' يتم استخراج الجزء بعد الكلمة "FROM"
    strTableName = Left(strTableName, InStr(strTableName, ";") - 1) ' يتم استخراج الجزء قبل الفاصلة المنقوطة
    
    ' اعرض اسم الجدول
    ExtractTableNameFromSQL = strTableName
    
End Function

 

DatabaseUp8.rar

  • Like 2
  • Haha 1
رابط هذا التعليق
شارك

معلمي الفاضل وأستاذنا القدير أبو خليل ، بداية ما زلت في قمة الشباب :smile:

وثانياً يسعدني مشاركتك هذا الموضوع

DatabaseUp8.accdb

3 دقائق مضت, Moosak said:

أسأل الله العظيم لك طول العمر مع حسن العمل مع سلامة البدن يارب 🙂 

 

تفضل عمي @ابوخليل

image.png.5f70796f0e60f76ff26b57c21aca5af7.png

استخدمت هذه الدالة لاستخراج اسم الجدول من جملة ال SQL :

Function ExtractTableNameFromSQL(strSQL As String) As String

    Dim strTableName As String
    
    ' استخرج اسم الجدول من الجملة SQL
    strTableName = Mid(strSQL, InStr(strSQL, "FROM ") + 5) ' يتم استخراج الجزء بعد الكلمة "FROM"
    strTableName = Left(strTableName, InStr(strTableName, ";") - 1) ' يتم استخراج الجزء قبل الفاصلة المنقوطة
    
    ' اعرض اسم الجدول
    ExtractTableNameFromSQL = strTableName
    
End Function

 

DatabaseUp8.rar 24.96 kB · 0 downloads

دائماً سبااااااق في الحلول أستاذنا @Moosak 

 

  • Like 3
رابط هذا التعليق
شارك

اقتباس

اما ان الهمة ضعفت في البحث والمحاولة واما ان المسألة  صعبة فعلا

تأكدت (اما) الأولى ... أسأل الله حسن الختام

 

شكرا احبتي لم اتوقع النتيجة بهذه السرعة .. فجزاكم الله خير الجزاء

بالنسبة للحلين فهما يشتركان في فكرة وطريقة استخراج واحدة 

آمل ان تعفوني من اختيار افضل اجابة ... فكل واحدة فريدة بذاتها ، والاختيار يحدده المكان الذي تستخدم فيه

كود الاستاذ موسى جاء بالمختصر المفيد وكود الاستاذ foksh  اخذ بالاحتياطات المحتملة

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

 

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

52 دقائق مضت, ابوخليل said:

كود الاستاذ موسى جاء بالمختصر المفيد وكود الاستاذ foksh  اخذ بالاحتياطات المحتملة

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

رابط هذا التعليق
شارك

49 دقائق مضت, ناقل said:

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

 الكود الحالي يخدم القضية الحالية بعينها 🙂 

أيضا ماذا لو كان مصدر الاستعلام جدولين أو أكثر ؟!!

وماذا لو كان هناك شروط في جملة الاستعلام where ؟!!

وماذا لو .... وماذا لو .... ؟؟؟؟؟

هناك احتمالات كثيرة .... 😁

وكل مشكلة ولها حل .. 🙂 

  • Haha 2
رابط هذا التعليق
شارك

9 دقائق مضت, Moosak said:

الكود الحالي يخدم القضية الحالية بعينها 🙂 

أيضا ماذا لو كان مصدر الاستعلام جدولين أو أكثر ؟!!

وماذا لو كان هناك شروط في جملة الاستعلام where ؟!!

وماذا لو .... وماذا لو .... ؟؟؟؟؟

هناك احتمالات كثيرة .... 😁

وكل مشكلة ولها حل .. 🙂 

نعم صحيح ..... ⚘

  • Like 1
رابط هذا التعليق
شارك

مررت الدالة في عملية دوران على ثلاث حقول .. والغريب ان النتيجة 1 من 3 اي انها اعطت قيمة صحيحة في واحدة وباقي القيم تعطي النتيجة جملة sql

مازلت احاول .. ان لم اصل الى نتيجة سوف اضع المثال المناسب

رابط هذا التعليق
شارك

اكتشفت ان السبب من مربعات التحرير نفسها ... بعضها يعطي نتيجة والبعض الآخر يعطي قيمة الاستعلام 

ما زلت احاول اكتشاف الفرق .. 

  • Like 1
رابط هذا التعليق
شارك

تم الوصول الى الخلل

السبب وجود فرز في هذه الاستعلامات  order by  وكان الكود يضيف هذه الزيادة الى الاسم

ثم عمدت الى الاستفادة من الدالتين كليهما

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

Public Function GetTableNameFromComboBox(cbo As ComboBox) As String
  On Error Resume Next
    Dim strTableName As String
    Dim ctl As Control
    Set ctl = cbo
       If Not ctl.RowSourceType = "" And Not ctl.RowSource Like "SELECT*" Then
        Exit Function
     End If
     If ctl.RowSourceType = "Table/Query" Then
    strTableName = Mid(ctl.RowSource, InStr(ctl.RowSource, "FROM ") + 5) ' يتم استخراج الجزء بعد الكلمة "FROM"
    strTableName = Left(strTableName, InStr(strTableName, ";") - 1) ' يتم استخراج الجزء قبل الفاصلة المنقوطة
    ElseIf ctl.RowSourceType = "Value List" Then
        strTableName = "Value List"
    End If
     ' استخرج اسم الجدول من الجملة SQL
     GetTableNameFromComboBox = strTableName
    
End Function

الفضل لله  ثم لكم احبتي  :fff:

والاستدعاء :

GetTableNameFromComboBox(ComboBoxName)

 

  • Like 3
رابط هذا التعليق
شارك

1 ساعه مضت, ابوخليل said:

فعملت خلطة

في لهجتنا الاردنية يقولوا :-

لما الخلِّيط يُخلُط .. إنسى الموضوع 😂

استاذنا ومعلمنا الجليل قدها وقدود ،

 

ما شاء الله عليك 🤗

رابط هذا التعليق
شارك

لم اعمل شيئا فقط ترتيب

ولكن المهم اني بدأت النزول في سلم الآية الكريمة : "" وَمِنكُم مَّن يُرَدُّ إِلَىٰ أَرْذَلِ الْعُمُرِ لِكَيْ لَا يَعْلَمَ بَعْدَ عِلْمٍ شَيْئًا ""

رابط هذا التعليق
شارك

بالنسبة لى سأحقق المطلوب بهذة الدالة

 

Sub GetTableName(cbo As ComboBox)
    
    ' Check if the query is empty
    If cbo.RowSource = "" Then
        MsgBox "No specific query for this combo box", vbExclamation, "Warning"
        Exit Sub
    End If

    ' Check if the query contains the word "FROM"
    If InStr(1, cbo.RowSource, "FROM ", vbTextCompare) = 0 Then
        MsgBox "The query does not contain the word 'FROM'", vbExclamation, "Warning"
        Exit Sub
    End If
    
    ' Check if the query contains a comma before the word "FROM"
    Dim fromIndex As Integer
    fromIndex = InStr(1, cbo.RowSource, "FROM ", vbTextCompare)
    If InStr(1, Mid(cbo.RowSource, 1, fromIndex - 1), ";") > 0 Then
        MsgBox "Invalid query, it contains a comma before 'FROM'", vbExclamation, "Warning"
        Exit Sub
    End If
    
    ' Get the full text of the query
    Dim queryText As String
    queryText = cbo.RowSource

    ' Find the position of "FROM" in the query
    Dim startIndex As Integer
    startIndex = InStr(1, queryText, "FROM ", vbTextCompare) + Len("FROM ")

    ' Find the position of the semicolon after the table name
    Dim endIndex As Integer
    endIndex = InStr(startIndex, queryText, ";")

    ' Get the table name
    Dim tableName As String
    tableName = Mid(queryText, startIndex, endIndex - startIndex)

    ' Remove extra spaces
    tableName = Trim(tableName)

    MsgBox "Table Name: " & tableName, vbInformation, "Table Information"
End Sub

 

رابط هذا التعليق
شارك

36 دقائق مضت, ابو جودي said:

بالنسبة لى سأحقق المطلوب بهذة الدالة

 

 الف هلا استاذ محمد

دالة متكاملة جميلة

بما ان ثلاثة من الخبراء الافاضل شاركوا في الحل .. لذا بقي نقطة او تكة بسيطة 

وهي عندما يكون الاستعلام مفروز فالكود يجلب اسم الجدول ونوع الفرز

في المرفق ادناه نموذجين وضعت فيهما الدالاات اعلاه

المطلوب اختيار اي واحد من النماذج والتعديل عليه بحيث يظهر اسم الجدول فقط

 

 

DataUp1.rar

رابط هذا التعليق
شارك

تفضل معلمي الفاضل :fff: ، مشاركتي الجانبية

---------------------------

استأذنك استاذي foksh  في التعديل لاضافة الدالة هنا من اجل تكون قريبة لطلاب العلم

Public Function GetTableNameFromComboBox(cbo As ComboBox) As String
    On Error Resume Next
    Dim strTableName As String
    Dim ctl As Control
    Set ctl = cbo
    If Not ctl.RowSourceType = "" And Not ctl.RowSource Like "SELECT*" Then
        Exit Function
    End If
    If ctl.RowSourceType = "Table/Query" Then
        Dim queryParts As Variant
        queryParts = Split(ctl.RowSource, "FROM ")
        If UBound(queryParts) > 0 Then
            strTableName = queryParts(1)
            strTableName = Left(strTableName, InStr(strTableName, ";") - 1)
            If InStr(strTableName, "ORDER BY") > 0 Then
                strTableName = Left(strTableName, InStr(strTableName, "ORDER BY") - 1)
            End If
        End If
    ElseIf ctl.RowSourceType = "Value List" Then
        strTableName = "Value List"
    End If
    GetTableNameFromComboBox = Trim(strTableName)
End Function

 

DataUp1.accdb

 

 

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

22 دقائق مضت, ابوخليل said:

المطلوب اختيار اي واحد من النماذج والتعديل عليه بحيث يظهر اسم الجدول فقط

 

هاك الجواب يا سيدي 🙂 :

Public Function GetTableNameFromComboBox(cbo As ComboBox) As String
  On Error Resume Next
    Dim strTableName As String, x As Integer, y As String
    Dim ctl As Control
    Set ctl = cbo
       If Not ctl.RowSourceType = "" And Not ctl.RowSource Like "SELECT*" Then
        Exit Function
     End If
     If ctl.RowSourceType = "Table/Query" Then
    strTableName = Mid(ctl.RowSource, InStr(ctl.RowSource, "FROM ") + 5)
        For x = 1 To Len(strTableName)
            If Mid(strTableName, x, 1) = ";" Or Mid(strTableName, x, 1) = " " Then GoTo NextStep
            y = y & Mid(strTableName, x, 1)
        Next
NextStep:
        strTableName = y
    ElseIf ctl.RowSourceType = "Value List" Then
        strTableName = "Value List"
    End If
     
     GetTableNameFromComboBox = strTableName
    
End Function

image.png.a48cf75ce11edfc340f71399775c7fe7.png

DataUp1.rar

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

مشاركتى مع الاستاذ @Moosak :biggrin:

Sub ExtractTableNameFromRowSource(cbo As ComboBox)
    ' Check if RowSource is not empty
    If cbo.rowSource = "" Then
        MsgBox "RowSource is empty", vbExclamation, "Warning"
        Exit Sub
    End If
    
    ' Extract table name from RowSource
    Dim tableName As String
    tableName = GetTableNameFromRowSource(cbo.rowSource)
    
    ' Remove trailing semicolon if exists
    If Right(tableName, 1) = ";" Then
        tableName = Left(tableName, Len(tableName) - 1)
    End If
    
    ' Display the table name without additional message
    MsgBox tableName, vbInformation, "Table Information"
End Sub

Function GetTableNameFromRowSource(rowSource As String) As String
    ' Find the part that starts with "FROM" in RowSource
    Dim fromIndex As Integer
    fromIndex = InStr(1, rowSource, "FROM ", vbTextCompare)
    
    ' Make sure the word "FROM" is in RowSource
    If fromIndex = 0 Then
        MsgBox "RowSource does not contain the word 'FROM'", vbExclamation, "Warning"
        Exit Function
    End If
    
    ' Extract the part of the text that contains the table name after "FROM"
    Dim tableNamePart As String
    tableNamePart = Mid(rowSource, fromIndex + Len("FROM "))
    
    ' Find the position of the first space or semicolon after the table name
    Dim delimiterIndex As Integer
    delimiterIndex = InStr(1, tableNamePart, " ")
    
    ' Check for semicolon and remove it
    Dim semicolonIndex As Integer
    semicolonIndex = InStr(1, tableNamePart, ";")
    
    ' Check for "ORDER BY" and remove it
    Dim orderByIndex As Integer
    orderByIndex = InStr(1, tableNamePart, "ORDER BY", vbTextCompare)
    
    If delimiterIndex > 0 Then
        ' If a space is found, extract the part before it
        GetTableNameFromRowSource = Trim(Left(tableNamePart, delimiterIndex - 1))
    ElseIf orderByIndex > 0 Then
        ' If "ORDER BY" is found, extract the part before it
        GetTableNameFromRowSource = Trim(Left(tableNamePart, orderByIndex - 1))
    End If

End Function

 

 

المرفق ..

 

 

 

 

DatabaseUp8.rar

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

ما شاء الله لا قوة الا بالله .. اكتمل العقد 

وانطبق علي المثل : اذا تريده يحتار  خليه يختار  :blink:

حقيقة اجاباتكم تفتح الشهية للاستمرار بطرح الاسئلة :biggrin:

بارك الله فيكم  وأحسن اليكم ووهبكم الذرية الصالحة ورزقكم من حيث لا تحتسبون

  • Haha 2
رابط هذا التعليق
شارك

7 دقائق مضت, ابوخليل said:

حقيقة اجاباتكم تفتح الشهية للاستمرار بطرح الاسئلة :biggrin:

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

نتضرع فقط الى الله عزوجل ان يجعلنا عند حسن ظنكم وان لا يحعلنا نقصر معكم

فمهما قدم اليكم كل طلاب العلم ما يملكون لن يوفيكم هذا حقكم مثقال ذرة

  • Thanks 1
رابط هذا التعليق
شارك

1 ساعه مضت, ابوخليل said:

وانطبق علي المثل : اذا تريده يحتار  خليه يختار  :blink:

وحتى تزيد الحيره :biggrin: :yes:

اعتمدت فى هذا الكود على تعريف متغير نصى ليتعامل مه الكلمات المحجوزة 
 

keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;"


والتعديلات كاملة تكون



Sub ExtractTableNameFromRowSource(cbo As ComboBox)
    
    ' Check if RowSource is not empty
    If cbo.rowSource = "" Then
        MsgBox "RowSource is empty", vbExclamation, "Warning"
        Exit Sub
    End If
    
    ' Extract table name from RowSource
    Dim tableName As String
    tableName = GetTableNameFromRowSource(cbo.rowSource)
    
    ' Remove trailing semicolon if exists
    If Right(tableName, 1) = ";" Then
        tableName = Left(tableName, Len(tableName) - 1)
    End If
    
    ' Display the table name without additional message
    MsgBox tableName, vbInformation, "Table Information"
End Sub

Function GetTableNameFromRowSource(rowSource As String) As String
    ' Define reserved keywords
    Dim keywords As String
    keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;"

    ' Find the part that starts with "FROM" in RowSource
    Dim fromIndex As Integer
    fromIndex = InStr(1, rowSource, "FROM ", vbTextCompare)
    
    ' Make sure the word "FROM" is in RowSource
    If fromIndex = 0 Then
        MsgBox "RowSource does not contain the word 'FROM'", vbExclamation, "Warning"
        Exit Function
    End If
    
    ' Extract the part of the text that contains the table name after "FROM"
    Dim tableNamePart As String
    tableNamePart = Mid(rowSource, fromIndex + Len("FROM "))
    
    ' Check for reserved keywords and remove them
    Dim keywordIndex As Integer
    keywordIndex = InStr(1, tableNamePart, keywords, vbTextCompare)
    
    ' Find the position of the first space, semicolon, or keyword after the table name
    Dim delimiterIndex As Integer
    delimiterIndex = IIf(keywordIndex > 0, keywordIndex, _
                       IIf(InStr(1, tableNamePart, " ") > 0, InStr(1, tableNamePart, " "), _
                       IIf(InStr(1, tableNamePart, ";") > 0, InStr(1, tableNamePart, ";"), Len(tableNamePart) + 1)))
    
    ' If a space, semicolon, or keyword is found, extract the part before it
    GetTableNameFromRowSource = Trim(Left(tableNamePart, delimiterIndex - 1))
End Function




طيب ما الفروق بين فكرة استاذ موسى وافكاارى المعقدة

الطريقتان تقومان بالمهمة المطلوبة ولكن بطرق مختلفة.

الافضلية تعتمد على احتياجات البرنامج الخاص بك وتفضيلاتك الشخصية. إليك بعض الملاحظات:

الكفاءة والأداء:
فكرة الاستاذ @Moosak 
 (GetTableNameFromComboBox)  تستخدم تعبيرات شرطية لفحص نوع RowSourceType وتقوم بتفحص الـ "FROM" وتقوم بإزالة الأحرف الزائدة.

فكرتى  (GetTableNameFromRowSource) تحتوي على عدد قليل من الخطوات وتقوم بفحص كلمة FROM في الاستعلام واستخراج الجدول المرتبط بها. كما تقوم بإزالة أي مفتاح آخر (مثل "ORDER BY") وباقى الكلمات المجدوزة..... الخ

نفس الكفاءة ونفس الاداء

 

القابلية للقراءة والصيانة:

 

فكرة الاستاذ @Moosak  قد تكون أقل وضوحًا بسبب الاستخدام المكثف للتعبيرات الشرطية.
بعكس فكرتى تكون أكثر وضوحًا في فهم الخطوات بسبب استخدام التعليقات والتسميات :tongue2: .


المرونة وإعادة الاستخدام:

فكرة الاستاذ @Moosak  تقوم بكل شيء في نطاق واحد دون استخدام دوال فرعية
فكرتى تحتوي على دالة فرعية (GetTableNameFromRowSource) يمكن استخدامها بشكل مستقل لأغراض أخرى إذا لزم الأمر .
يعنى ممكن تكون أفكارى معقدة وقت كتابة الكود ولكن أحاول أن أكون ضاحب نظرة مستقبلية عند محاولة الانتفاع منه .
 

وفى الاخير يا والدى الحبيب من الجيد أن تختار الدالة التي تلبي أفضل احتياجات مشروعك وتفضيلاتك الشخصية .

 

 

ولكن انا لو مكانك اعبى المكتبة بمرفق الاستاذ @Moosak لانه الاجمل:biggrin::wink2:

  • Haha 1
رابط هذا التعليق
شارك

59 دقائق مضت, ابو جودي said:

وحتى تزيد الحيره :biggrin: :yes:

اعتمدت فى هذا الكود على تعريف متغير نصى ليتعامل مه الكلمات المحجوزة 
 

keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;"

وفى الاخير يا والدى الحبيب من الجيد أن تختار الدالة التي تلبي أفضل احتياجات مشروعك وتفضيلاتك الشخصية .

 

 

مع ان حاجتي في الوقت الحاضر  تقتصر على ORDER BY

ومن دون شرح الفروقات  فقد وفيت وكفيت 

فعملك الاخير هذا لا ينتطح فيه كبشان :wallbash: 

FROM  WHERE  GROUP BY  HAVING    ORDER BY;

والاستاذ موسى يفصل  على قدر  الحاجة يعني ما فيه اسراف:Rules:   

23 ساعات مضت, Moosak said:

 الكود الحالي يخدم القضية الحالية بعينها 🙂 

أيضا ماذا لو كان مصدر الاستعلام جدولين أو أكثر ؟!!

وماذا لو كان هناك شروط في جملة الاستعلام where ؟!!

وماذا لو .... وماذا لو .... ؟؟؟؟؟

هناك احتمالات كثيرة .... 😁

وكل مشكلة ولها حل .. 🙂 

 

  • Like 1
  • Haha 1
رابط هذا التعليق
شارك

20 دقائق مضت, ابوخليل said:

والاستاذ موسى يفصل  على قدر  الحاجة يعني ما فيه اسراف:Rules:   

في 30‏/12‏/2023 at 18:04, Moosak said:

يعلم الله كم احب انا الاستاذ @Moosak :yes: ولكن اهز الورد  :fff: ظللت اهز و اهز واهز

ولكن مثل ما ينحكى يا جبل ما يهزك ريح 

  • Like 1
رابط هذا التعليق
شارك

منذ ساعه, ابو جودي said:

وحتى تزيد الحيره :biggrin: :yes:

اعتمدت فى هذا الكود على تعريف متغير نصى ليتعامل مه الكلمات المحجوزة 
 

keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;"


والتعديلات كاملة تكون



Sub ExtractTableNameFromRowSource(cbo As ComboBox)
    
    ' Check if RowSource is not empty
    If cbo.rowSource = "" Then
        MsgBox "RowSource is empty", vbExclamation, "Warning"
        Exit Sub
    End If
    
    ' Extract table name from RowSource
    Dim tableName As String
    tableName = GetTableNameFromRowSource(cbo.rowSource)
    
    ' Remove trailing semicolon if exists
    If Right(tableName, 1) = ";" Then
        tableName = Left(tableName, Len(tableName) - 1)
    End If
    
    ' Display the table name without additional message
    MsgBox tableName, vbInformation, "Table Information"
End Sub

Function GetTableNameFromRowSource(rowSource As String) As String
    ' Define reserved keywords
    Dim keywords As String
    keywords = "FROM;WHERE;GROUP BY;HAVING;ORDER BY;"

    ' Find the part that starts with "FROM" in RowSource
    Dim fromIndex As Integer
    fromIndex = InStr(1, rowSource, "FROM ", vbTextCompare)
    
    ' Make sure the word "FROM" is in RowSource
    If fromIndex = 0 Then
        MsgBox "RowSource does not contain the word 'FROM'", vbExclamation, "Warning"
        Exit Function
    End If
    
    ' Extract the part of the text that contains the table name after "FROM"
    Dim tableNamePart As String
    tableNamePart = Mid(rowSource, fromIndex + Len("FROM "))
    
    ' Check for reserved keywords and remove them
    Dim keywordIndex As Integer
    keywordIndex = InStr(1, tableNamePart, keywords, vbTextCompare)
    
    ' Find the position of the first space, semicolon, or keyword after the table name
    Dim delimiterIndex As Integer
    delimiterIndex = IIf(keywordIndex > 0, keywordIndex, _
                       IIf(InStr(1, tableNamePart, " ") > 0, InStr(1, tableNamePart, " "), _
                       IIf(InStr(1, tableNamePart, ";") > 0, InStr(1, tableNamePart, ";"), Len(tableNamePart) + 1)))
    
    ' If a space, semicolon, or keyword is found, extract the part before it
    GetTableNameFromRowSource = Trim(Left(tableNamePart, delimiterIndex - 1))
End Function




طيب ما الفروق بين فكرة استاذ موسى وافكاارى المعقدة

الطريقتان تقومان بالمهمة المطلوبة ولكن بطرق مختلفة.

الافضلية تعتمد على احتياجات البرنامج الخاص بك وتفضيلاتك الشخصية. إليك بعض الملاحظات:

الكفاءة والأداء:
فكرة الاستاذ @Moosak 
 (GetTableNameFromComboBox)  تستخدم تعبيرات شرطية لفحص نوع RowSourceType وتقوم بتفحص الـ "FROM" وتقوم بإزالة الأحرف الزائدة.

فكرتى  (GetTableNameFromRowSource) تحتوي على عدد قليل من الخطوات وتقوم بفحص كلمة FROM في الاستعلام واستخراج الجدول المرتبط بها. كما تقوم بإزالة أي مفتاح آخر (مثل "ORDER BY") وباقى الكلمات المجدوزة..... الخ

نفس الكفاءة ونفس الاداء

 

القابلية للقراءة والصيانة:

 

فكرة الاستاذ @Moosak  قد تكون أقل وضوحًا بسبب الاستخدام المكثف للتعبيرات الشرطية.
بعكس فكرتى تكون أكثر وضوحًا في فهم الخطوات بسبب استخدام التعليقات والتسميات :tongue2: .


المرونة وإعادة الاستخدام:

فكرة الاستاذ @Moosak  تقوم بكل شيء في نطاق واحد دون استخدام دوال فرعية
فكرتى تحتوي على دالة فرعية (GetTableNameFromRowSource) يمكن استخدامها بشكل مستقل لأغراض أخرى إذا لزم الأمر .
يعنى ممكن تكون أفكارى معقدة وقت كتابة الكود ولكن أحاول أن أكون ضاحب نظرة مستقبلية عند محاولة الانتفاع منه .
 

وفى الاخير يا والدى الحبيب من الجيد أن تختار الدالة التي تلبي أفضل احتياجات مشروعك وتفضيلاتك الشخصية .

 

 

ولكن انا لو مكانك اعبى المكتبة بمرفق الاستاذ @Moosak لانه الاجمل:biggrin::wink2:

الحبيب والرفيق الجميل @ابو جودي  😊 دخلتني في منافسة أنا غير مستعد لها .. وجئتني على حين غرة 😂 لااااااااااا .. وبعد أنت الحكم !!! 😜

ولكن أيش رايك تعمل لنا منافسة شريفة وتفتح موضوع منفصل يكون فيه تحدي معين .. ومدة تنفيذ محددة ( علشان يمدينا نذاكر كويس 😁 ) ويكون عمنا @ابوخليل هو الحكم 😎؟؟

قلت أيييييييييييه ؟؟ 😏

  • Haha 1
رابط هذا التعليق
شارك

7 دقائق مضت, Moosak said:

الحبيب والرفيق الجميل @ابو جودي  😊 دخلتني في منافسة أنا غير مستعد لها .. وجئتني على حين غرة 😂 لااااااااااا .. وبعد أنت الحكم !!! 😜

ولكن أيش رايك تعمل لنا منافسة شريفة وتفتح موضوع منفصل يكون فيه تحدي معين .. ومدة تنفيذ محددة ( علشان يمدينا نذاكر كويس 😁 ) ويكون عمنا @ابوخليل هو الحكم 😎؟؟

قلت أيييييييييييه ؟؟ 😏

هههههههههه لسه احكى يا جبل ما يهزك ريح

ولكن يبدو ..
هههههههههههههههههههههههههههههه  ......   والله اشتجنا

انا بس لاقيتك ساكت قلت فى نفسى لا اسكت الله لك حسا يا استاذ @Moosak

وكان لازم ولابد وحتما نهز الورد يا ورد :fff:

بس جت على راسى :')

استاذى الجليل ومعملى القدير و والدى الحبيب الاستاذ @ابوخليل  تصدر لك ودافع عنك وزعق لى :Rules:

رابط هذا التعليق
شارك

10 دقائق مضت, ابو جودي said:

هههههههههه لسه احكى يا جبل ما يهزك ريح

ولكن هههههههههههههههههههههههههههههه  ......   والله اشتجنا

أما أنا الفكرة ضربت في راسي وسنبدأها إن شاء الله .. خليك مستعد 😏💪🏻

رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information