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

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

قام بنشر

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

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

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

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

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

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

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

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

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

DatabaseUp8.rarFetching info...

قام بنشر

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

 

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

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.rarFetching info...

  • Like 2
  • Haha 1
قام بنشر

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

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

DatabaseUp8.accdbFetching info...

  في 30‏/12‏/2023 at 13:39, 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

Expand  

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

 

  • Like 3
قام بنشر
  اقتباس

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

Expand  

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

 

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

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

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

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

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

 

  • Like 2
  • Thanks 1
قام بنشر
  في 30‏/12‏/2023 at 14:22, ابوخليل said:

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

Expand  

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

قام بنشر
  في 30‏/12‏/2023 at 15:16, ناقل said:

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

Expand  

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

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

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

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

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

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

  • Haha 2
قام بنشر
  في 30‏/12‏/2023 at 16:04, Moosak said:

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

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

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

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

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

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

Expand  

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

  • 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
قام بنشر
  في 30‏/12‏/2023 at 18:03, ابوخليل said:

فعملت خلطة

Expand  

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

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

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

 

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

قام بنشر

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

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

قام بنشر

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

 

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

 

قام بنشر
  في 31‏/12‏/2023 at 09:26, ابو جودي said:

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

 

Expand  

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

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

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

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

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

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

 

 

DataUp1.rarFetching info...

قام بنشر

تفضل معلمي الفاضل :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.accdbFetching info...

 

 

  • Like 1
  • Thanks 1
قام بنشر
  في 31‏/12‏/2023 at 10:22, ابوخليل said:

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

 

Expand  

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

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.rarFetching info...

  • 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.rarFetching info...

  • Like 1
  • Thanks 1
قام بنشر

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

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

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

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

  • Haha 2
قام بنشر
  في 31‏/12‏/2023 at 12:32, ابوخليل said:

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

Expand  

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

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

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

  • Thanks 1
قام بنشر
  في 31‏/12‏/2023 at 12:32, ابوخليل said:

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

Expand  

وحتى تزيد الحيره :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
قام بنشر
  في 31‏/12‏/2023 at 14:28, ابو جودي said:

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

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

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

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

 

 

Expand  

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

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

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

FROM  WHERE  GROUP BY  HAVING    ORDER BY;

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

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

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

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

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

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

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

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

Expand  

 

  • Like 1
  • Haha 1
قام بنشر
  في 31‏/12‏/2023 at 15:45, ابوخليل said:

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

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

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

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

  • Like 1
قام بنشر
  في 31‏/12‏/2023 at 14:28, ابو جودي 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:

Expand  

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

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

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

  • Haha 1
قام بنشر
  في 31‏/12‏/2023 at 16:04, Moosak said:

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

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

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

Expand  

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

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

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

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

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

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

قام بنشر
  في 31‏/12‏/2023 at 16:07, ابو جودي said:

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

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

Expand  

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

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