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

هل يمكن لرقم خلال حقل النص أن يكون له ارتباط بحقل آخر


nssj
إذهب إلى أفضل إجابة Solved by jjafferr,

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

قد يكون العنوان مبهماً غير واضح .. لكن بالمثال يتضح الموضوع بإذن الله

في المثال المرفق في جدول (الإحالات2):

[&] حديث أبي بكرة يأتي (20152)

هل بالإمكان أن يكون لهذا الرقم ارتباط تشعبي بحيث إذا ضغطت عليه ينتقل للرقم المطلوب، قياساً على أنه يمكن تلوين هذا الرقم عند اختيار (نص منسق)، لأن هذا مفيد لإدراج أكثر من إحالة في نفس الخانة

 

أحد الإخوة أخبرني أن هذا غير ممكن، وأن كل ما هو مكتوب في حقل واحد يكون ككتلة واحدة لا يمكن تخصيص بعضه بإجراء معين كهذا الإجراء

هل هذا كلام نهائي أم يمكن فعل ذلك بطريقة ما

وبناء على كلام هذا الأخ تم تصميم جدول الإحالات على أساس أن يكون الرقم المحال عليه في حقل خاص، كما هو في جدول (الإحالات)

إحالات.accdb

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

منذ ساعه, nssj said:

أحد الإخوة أخبرني أن هذا غير ممكن

هذا الكلام صحيح ، اذا كان الحقل نص غير منسق 🙂

 

منذ ساعه, nssj said:

هل بالإمكان أن يكون لهذا الرقم ارتباط تشعبي

نعم ، عن طريق ان يكون النص منسق بكود HTML ، والذي على اساسه تنقر عليه وتعمل الباقي في الكود (قد لا يكون ببساطة الارتباط التشعبي ، فلم اعمل شيء من هذا سابقا) 🙂

 

جعفر

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

السلام عليكم

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

Function Seperate_Digits(T)

    If Len(T & "") = 0 Then
        Seperate_Digits = ""
        Exit Function
    End If
    
    For i = 1 To Len(T)
        C = Asc(Mid(T, i, 1))
        Select Case C
            Case 46, 48 To 57
                Which_Letter = Which_Letter & Mid(T, i, 1)
        End Select
    Next i
    
    Seperate_Digits = Which_Letter
    
End Function

الاشكالية اذا كان هناك اكثر من رقم في نفس الحقل كما في مثالك

اقتباس
[&] حديث أبي بكرة يأتي (20152) ومرسل الحسن (32105)

سيتم دمج الرقمين فتكون النتيجة 2015232105

أما في الحقل الذي به رقم واحد

اقتباس
(&) انظر رواية زياد بن أبي المغيرة، أو زياد بن المغيرة عن أبي هريرة 13636

ستكون النتيجة 13626

تحياتي

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

السلام عليكم 🙂

شكرا اخوي ابوعبدالله 🙂

 

وهاي دالة لإستخراج الرقم من وسط بيانات الحقل 🙂

مثلا ننقر مزدوجا على الرقم 12670 :

image.png.1066993bf7a4768d9311e41c5b292144.png

 

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

image.png.7814515903cc32fbb8295bdc61ab718d.png

.

ننادي الدالة هكذا ، بحيث نرسل بيانات الحقل ، والنقطة/المكان اللي تم النقر مزدوجا فيها :

Private Sub EH_DblClick(Cancel As Integer)

    DoCmd.OpenForm "مسند", , , "[Mno]=" & Get_Number(Me.EH, Me.EH.SelStart)
    
End Sub

.

وتقوم هذه الدالة بإرجاع الرقم فقط :

Public Function Get_Number(fld As String, P As Long) As Long

    '
    'fld = Field content
    'P   = Position left mouse was double clicked in the field
    'max_Length = maximun length of numeric field, default is 10
    'C  = the character to check
    'Add_C  = Adds the numeric Characters
    '
    '1. check the characters to the Left        <----|
    '2. check the characters to the Right           |---->
    '
    ' jjafferr
    ' v.1 : 21-01-13
    '
    
    Dim i As Integer
    Dim Add_C As String
    Dim C As String
    Dim max_Length As Integer
    
    max_Length = 10
    
    'Get the numbers on the Left side of the click
    For i = P To (P - max_Length) Step -1
        
        C = Mid(fld, i, 1)
        If IsNumeric(C) Then
            Add_C = C & Add_C
        Else
            Exit For
        End If
        
    Next i
    
    'Debug.Print Add_C
    
    'Get the numbers on the Right side of the click
    P = P + 1
    For i = P To (P + max_Length)
        
        C = Mid(fld, i, 1)
        If IsNumeric(C) Then
            Add_C = Add_C & C
        Else
            Exit For
        End If
        
    Next i
    
    
    Get_Number = CLng(Add_C)
    
End Function

.

 

ولكن ، لم اتمكن من تشغيل هذه الدالة على حقل النص المنسق !!

 

جعفر

1326.إحالات.accdb.zip

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

الأخ الكريم جعفر .. جزاك الله خيرا وأحسن إليك

هديتك هذه تتيح لي مرونة وخيارات أكثر في العمل .. فبارك الله فيك

ولا تزال التجارب جارية .. والله الموفق

وهل هذا الأمر يعني أنه يمكن لرموز خاصة في حقل نصي أن يكون لها ارتباط  خاص مع جداول أخرى .. إذا كان الجواب "نعم" فسأوضح المطلوب في موضوع مستقل لزيادة الإيضاح

ثم أخي الكريم .. هل أطمع بمرورك على موضوعنا الأول (تحويل جدول من وورد إلى أكسس) لوضع اللمسات النهائية التي تراها مناسبة على هديتك القيمة هناك

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

31 دقائق مضت, nssj said:

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

مع مراعاة كلمة "ارتباط" ، فالطريقة اللي توصلنا لها هي الحصول على الرقم المطلوب ، ومن ثم عمل اللي نريده في هذا الرقم ، والذي استخدمناه كمعيار لفتح نموذج آخر ،

فالجواب بالطريقة اعلاه ، نعم يمكن ،

ولكن لاحظ اننا استخدمنا الارقام فقط (ولو استخدمنا طريقة RegEx لوصلنا للمطلوب بطريقة اسرع ومرونه اكثر 🙂 ) ، فإذا اردت اضافة رموز خاصة وبطريقة معينه ، فالجواب كذلك ، نعم يمكن 🙂

 

جعفر

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

الأخ الكريم جعفر .. هل هذا الإجراء يقتضي ألا يتم تغيير النص في (الإحالات2) إلا من الجدول أو نموذج آخر

لأني عندما حاولت أن أغير في النص في النموذج نفسه بإضافة أرقام أخرى أو غير ذلك، خرجت لي رسالة الخطأ التي تخرج عندما تكبس كبسا مزدوجا على غير الرقم، ولم تنتهي المشكلة إلا عندما رجعت إلى الجدول وحذفت الرموز البرمجية التي أضيفت

وهل يمكن أن يسهل الأمر أن يجعل الرقم المراد الانتقال إليه بين رموز أو أقواس مخصصة لا تستخدم إلا لهذا الغرض، وليكن مثلاً {}

وأعدت رفع الملف بعد جعل الأرقام بين {} إن كان هذا يفيد

إحالات2.accdb

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

المشكلة ان تنسيق ونمط النموذج والجدول عندك كان غير ، فرجاء استعمال المرفق من الآن 🙂

وكلامنا فقط عن الجدول والنموذج احتمالات2 🙂

 

 

image.png.78e62a1b6782d29245313d85f6cf2c26.png

 

 

ولكي نتفادى رسالة الخطأ ، هكذا ننادي الدالة في الوحدة النمطية:

Private Sub EH_DblClick(Cancel As Integer)

    Dim lng_Mno As Long
    
    lng_Mno = Get_Number(Me.EH, Me.EH.SelStart)
    
    If lng_Mno = 0 Then
        MsgBox "لم يتم الحصول على رقم"
    
    ElseIf lng_Mno = 1 Then
        MsgBox "لم يتم التعرف على الخطأ"
    
    Else
        DoCmd.OpenForm "مسند", , , "[Mno]=" & lng_Mno
    End If
    
End Sub

.

واصبحت الدالة هكذا :

Public Function Get_Number(fld As String, P As Long) As Long
On Error GoTo err_Get_Number

    '
    'fld = Field content
    'P   = Position left mouse was double clicked in the field
    'max_Length = maximun length of numeric field, default is 10 on each side = 20 characters
    'C  = the character to check
    'Add_C  = Adds the numeric Characters
    '
    '1. check the characters to the Left        <----|
    '2. check the characters to the Right           |---->
    '
    ' jjafferr
    ' v.1    : 21-01-13  : initial re;ease
    ' v.1.1  : 21-01-14  : added error traping for noe numeric values
    '
    
    Dim i As Integer
    Dim Add_C As String
    Dim C As String
    Dim max_Length As Integer
    
    
    max_Length = 10
    
    'What dose Access Read: -10 to 10 = 20 letters/characters
    'C = Mid(fld, P - max_Length, max_Length) & vbCrLf & Mid(fld, P + 1, max_Length)
    'Debug.Print C
    
    
    'Get the numbers on the Left side of the click
    For i = P To (P - max_Length) Step -1
        
        C = Mid(fld, i, 1)
        If IsNumeric(C) Then
            Add_C = C & Add_C
        Else
            Exit For
        End If
        
    Next i
    'Debug.Print Add_C
    
    
    'Get the numbers on the Right side of the click
    P = P + 1
    For i = P To (P + max_Length)
        
        C = Mid(fld, i, 1)
        If IsNumeric(C) Then
            Add_C = Add_C & C
        Else
            Exit For
        End If
        
    Next i
     
    
    'return the number value
    Get_Number = CLng(Add_C)
    
    
Exit_Get_Number:

    Exit Function
err_Get_Number:

    If Err.Number = 13 Then
        Get_Number = 0
    Else
        Get_Number = 1
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
    Resume Exit_Get_Number
    
End Function

 

جعفر

1326.1.Get Number between text.accdb.zip

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

3 ساعات مضت, jjafferr said:

المشكلة ان تنسيق ونمط النموذج والجدول عندك كان غير

معذرة أخي الكريم .. فهذا ملف تجارب .. وكنت وقتها أجرب ما ذا يعني (مجموعة حيوية) و (لقطة) في خصائص النموذج .. وكنت مسروراً بهذا الاكتشاف 🙂 .. مع أني لم أزل لا أعرف ما الفرق بين (مجموعة حيوية) و (مجموعة حيوية غير متسقة) 🤔

وبارك الله فيك أخي الكريم على هذا التعديل .. فقد أصبح بالإمكان التعديل والحذف والإضافة من خلال النموذج دون مشاكل، لكن لابد من عمل تحديث، أو الخروج من الصفحة والعودة إليها ليتم استيعاب هذه التحديثات والانتقال للرقم .. ولعلك تتكرم بجعل الكود يقوم بهذه الخطوة بنفسه إن أمكن

وبخصوص وضع الرقم بين {} .. أنا كنت أستفسر منك إن كان وضع الرقم بين رموز أو أقواس خاصة يسهل العملية أو يجعل الوصول للرقم أفضل وإن تغير النص

ذلك أنه يبدو لي أن الدالة تبحث عن الرقم بأن تقوم بعد الأحرف وغيرها، وتحفظ أن الرقم موجود بعد كذا حركة من بداية السطر .. أو شيء من هذا القبيل

وبما أنني أحب التفكير معكم بصوت مرتفع قلت في نفسي: لو كان الرقم بين رموز خاصة لا تستخدم في هذا الجدول إلا لهذا الغرض: الإحاطة بالرقم المطلوب لعملية الانتقال .. هل يجعل هذا عمل الكود أفضل إذ يبحث عن هذا الرمز فيصل للرقم مباشرة .. أم أن الأمر ليس كما ظننت ؟؟

تم تعديل بواسطه nssj
رابط هذا التعليق
شارك

17 دقائق مضت, nssj said:

لكن لابد من عمل تحديث، أو الخروج من الصفحة والعودة إليها ليتم استيعاب هذه التحديثات والانتقال للرقم

ما فهمت اي تحديث تتكلم عنه ، ورجاء ، اعطني مثال بالشيء الذي تريده ، فأنا لا افهم المصطلحات !!

 

19 دقائق مضت, nssj said:

{} .. أنا كنت أستفسر منك إن كان وضع الرقم بين رموز أو أقواس خاصة يسهل العملية

لو عملت هذا في بداية الامر ، لعملت الكود على هذا الاساس ، اما الآن فلا داعي له ،

إلا اذ اردت ان يكون البحث عن اي شيء بين القوسين ، يعني ارقام وحروف مثلا ، او حروف فقط.

 

21 دقائق مضت, nssj said:

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

الدالة تنطلق من المكان الذي نقرت عليه في السطر ،

تنظر الى الوراء الى 10 (ويمكنك تعديله في الكود) حروف ، فأذا وجدت رقم ، تأخذه ، واذا اذا وجدت حرف توقف ،

ثم تنظر الى الامام 10 حروف ، فأذا وجدت رقم ، تأخذه وتضيفه الى الارقام السابقة ، واذا اذا وجدت حرف توقف ،

 

جعفر

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

14 دقائق مضت, jjafferr said:

ما فهمت اي تحديث تتكلم عنه ، ورجاء ، اعطني مثال بالشيء الذي تريده

055.jpg.1898a537add3eac58f53c23e1965d00e.jpg

عندما أضفت عبارة (من طريق يونس) ثم كبست على الرقم خرجت الرسالة .. لا بد أولا من (تحديث الكل) أو الخروج من الحقل والعودة إليه لينتقل ..

18 دقائق مضت, jjafferr said:

لو عملت هذا في بداية الامر ، لعملت الكود على هذا الاساس

لو كنت أعلم أن ذلك ييسر الأمر لأرسلت لك الملف على هذا الأساس 🙂 .. أنا لم أكن أعلم أصلاً أن هذا ممكن .. فأحسن الله إليك

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

  • أفضل إجابة
10 ساعات مضت, nssj said:

عندما أضفت عبارة

تم حل هذه الاشكالية بالمرفق الجديد ،

فيصبح حدث النقر المزدوج في الحقل:

Private Sub EH_DblClick(Cancel As Integer)

    Dim lng_Mno As Long

    'send the "UnSaved Text" (to retain the text position as is), and the click position to the Function Get_Number
    'to retrieve the number clicked on
    lng_Mno = Get_Number(Me.EH.Text, Me.EH.SelStart)

    'once the Function returns the value, examin it
    If lng_Mno = 0 Then
        MsgBox "لم يتم الحصول على رقم"
    
    ElseIf lng_Mno = 1 Then
        MsgBox "لم يتم التعرف على الخطأ"
    
    Else
        DoCmd.OpenForm "مسند", , , "[Mno]=" & lng_Mno
    End If
    
End Sub

 

والدالة في الوحدة النمطية:

Option Compare Database
Option Explicit

Public Function Get_Number(fld As String, P As Long) As Long
On Error GoTo err_Get_Number

    '
    'fld = Field content
    'P   = Position left mouse was double clicked in the field
    'max_Length = maximun length of numeric field, default is 10 on each side = 20 characters
    'C  = the character to check
    'Add_C  = Adds the numeric Characters
    '
    '1. check the characters to the Left        <----|
    '2. check the characters to the Right           |---->
    '
    ' jjafferr
    ' v.1    : 21-01-13  : initial re;ease
    ' v.1.1  : 21-01-14  : added error traping for noe numeric values
    '
    
    Dim i As Integer
    Dim Add_C As String
    Dim C As String
    Dim max_Length As Integer
    
    
    max_Length = 10
    
    'What dose Access Read: -10 to 10 = 20 letters/characters
    'C = Mid(fld, P - max_Length, max_Length) & vbCrLf & Mid(fld, P + 1, max_Length)
    'Debug.Print C
    
    
    'Get the numbers on the Left side of the click
    For i = P To (P - max_Length) Step -1
        
        C = Mid(fld, i, 1)      'loop through the characters one at a time
        If IsNumeric(C) Then    'test the character to our condition
            Add_C = C & Add_C   'passed the condition, Concatenat it
        Else
            Exit For            'did NOT pass the condition, get out of the loop
        End If
        
    Next i
    'Debug.Print Add_C
    
    
    'Get the numbers on the Right side of the click
    P = P + 1
    For i = P To (P + max_Length)
        
        C = Mid(fld, i, 1)
        If IsNumeric(C) Then
            Add_C = Add_C & C
        Else
            Exit For
        End If
        
    Next i
     
    
    'Convert the concatenated string to Long, and
    'return the number value
    Get_Number = CLng(Add_C)
    
    
Exit_Get_Number:

    Exit Function
err_Get_Number:

    If Err.Number = 13 Then
        Get_Number = 0
    
    ElseIf Err.Number = 5 Then
        Get_Number = 1
    
    Else
        Get_Number = 1
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
    'don't break the code, so Resume by exiting from the Function
    Resume Exit_Get_Number
    
End Function

 

 

 

10 ساعات مضت, nssj said:

لو كنت أعلم أن ذلك ييسر الأمر

انا لم اقل هذا ، وإنما قلت 

 

10 ساعات مضت, jjafferr said:

و عملت هذا في بداية الامر ، لعملت الكود على هذا الاساس ، اما الآن فلا داعي له ،

إلا اذ اردت ان يكون البحث عن اي شيء بين القوسين ، يعني ارقام وحروف مثلا ، او حروف فقط.

 

جعفر

1326.2.Get Number between text.accdb.zip

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

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