nssj قام بنشر يناير 12, 2021 قام بنشر يناير 12, 2021 قد يكون العنوان مبهماً غير واضح .. لكن بالمثال يتضح الموضوع بإذن الله في المثال المرفق في جدول (الإحالات2): [&] حديث أبي بكرة يأتي (20152) هل بالإمكان أن يكون لهذا الرقم ارتباط تشعبي بحيث إذا ضغطت عليه ينتقل للرقم المطلوب، قياساً على أنه يمكن تلوين هذا الرقم عند اختيار (نص منسق)، لأن هذا مفيد لإدراج أكثر من إحالة في نفس الخانة أحد الإخوة أخبرني أن هذا غير ممكن، وأن كل ما هو مكتوب في حقل واحد يكون ككتلة واحدة لا يمكن تخصيص بعضه بإجراء معين كهذا الإجراء هل هذا كلام نهائي أم يمكن فعل ذلك بطريقة ما وبناء على كلام هذا الأخ تم تصميم جدول الإحالات على أساس أن يكون الرقم المحال عليه في حقل خاص، كما هو في جدول (الإحالات) إحالات.accdb
jjafferr قام بنشر يناير 12, 2021 قام بنشر يناير 12, 2021 منذ ساعه, nssj said: أحد الإخوة أخبرني أن هذا غير ممكن هذا الكلام صحيح ، اذا كان الحقل نص غير منسق 🙂 منذ ساعه, nssj said: هل بالإمكان أن يكون لهذا الرقم ارتباط تشعبي نعم ، عن طريق ان يكون النص منسق بكود HTML ، والذي على اساسه تنقر عليه وتعمل الباقي في الكود (قد لا يكون ببساطة الارتباط التشعبي ، فلم اعمل شيء من هذا سابقا) 🙂 جعفر
محمد أبوعبدالله قام بنشر يناير 12, 2021 قام بنشر يناير 12, 2021 السلام عليكم يمكن استخراج الارقام من النص عن طريقة الدالة التي وضعها استاذنا جعفر في الموضوع التالي 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 تحياتي
jjafferr قام بنشر يناير 13, 2021 قام بنشر يناير 13, 2021 السلام عليكم 🙂 شكرا اخوي ابوعبدالله 🙂 وهاي دالة لإستخراج الرقم من وسط بيانات الحقل 🙂 مثلا ننقر مزدوجا على الرقم 12670 : والنتيجة تفتح لنا النموذج مسند على الرقم اعلاه : . ننادي الدالة هكذا ، بحيث نرسل بيانات الحقل ، والنقطة/المكان اللي تم النقر مزدوجا فيها : 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 2 1
nssj قام بنشر يناير 13, 2021 الكاتب قام بنشر يناير 13, 2021 الأخ الكريم جعفر .. جزاك الله خيرا وأحسن إليك هديتك هذه تتيح لي مرونة وخيارات أكثر في العمل .. فبارك الله فيك ولا تزال التجارب جارية .. والله الموفق وهل هذا الأمر يعني أنه يمكن لرموز خاصة في حقل نصي أن يكون لها ارتباط خاص مع جداول أخرى .. إذا كان الجواب "نعم" فسأوضح المطلوب في موضوع مستقل لزيادة الإيضاح ثم أخي الكريم .. هل أطمع بمرورك على موضوعنا الأول (تحويل جدول من وورد إلى أكسس) لوضع اللمسات النهائية التي تراها مناسبة على هديتك القيمة هناك
jjafferr قام بنشر يناير 13, 2021 قام بنشر يناير 13, 2021 31 دقائق مضت, nssj said: لرموز خاصة في حقل نصي أن يكون لها ارتباط خاص مع جداول أخرى مع مراعاة كلمة "ارتباط" ، فالطريقة اللي توصلنا لها هي الحصول على الرقم المطلوب ، ومن ثم عمل اللي نريده في هذا الرقم ، والذي استخدمناه كمعيار لفتح نموذج آخر ، فالجواب بالطريقة اعلاه ، نعم يمكن ، ولكن لاحظ اننا استخدمنا الارقام فقط (ولو استخدمنا طريقة RegEx لوصلنا للمطلوب بطريقة اسرع ومرونه اكثر 🙂 ) ، فإذا اردت اضافة رموز خاصة وبطريقة معينه ، فالجواب كذلك ، نعم يمكن 🙂 جعفر
nssj قام بنشر يناير 13, 2021 الكاتب قام بنشر يناير 13, 2021 الأخ الكريم جعفر .. هل هذا الإجراء يقتضي ألا يتم تغيير النص في (الإحالات2) إلا من الجدول أو نموذج آخر لأني عندما حاولت أن أغير في النص في النموذج نفسه بإضافة أرقام أخرى أو غير ذلك، خرجت لي رسالة الخطأ التي تخرج عندما تكبس كبسا مزدوجا على غير الرقم، ولم تنتهي المشكلة إلا عندما رجعت إلى الجدول وحذفت الرموز البرمجية التي أضيفت وهل يمكن أن يسهل الأمر أن يجعل الرقم المراد الانتقال إليه بين رموز أو أقواس مخصصة لا تستخدم إلا لهذا الغرض، وليكن مثلاً {} وأعدت رفع الملف بعد جعل الأرقام بين {} إن كان هذا يفيد إحالات2.accdb
jjafferr قام بنشر يناير 14, 2021 قام بنشر يناير 14, 2021 المشكلة ان تنسيق ونمط النموذج والجدول عندك كان غير ، فرجاء استعمال المرفق من الآن 🙂 وكلامنا فقط عن الجدول والنموذج احتمالات2 🙂 ولكي نتفادى رسالة الخطأ ، هكذا ننادي الدالة في الوحدة النمطية: 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 1
nssj قام بنشر يناير 14, 2021 الكاتب قام بنشر يناير 14, 2021 (معدل) 3 ساعات مضت, jjafferr said: المشكلة ان تنسيق ونمط النموذج والجدول عندك كان غير معذرة أخي الكريم .. فهذا ملف تجارب .. وكنت وقتها أجرب ما ذا يعني (مجموعة حيوية) و (لقطة) في خصائص النموذج .. وكنت مسروراً بهذا الاكتشاف 🙂 .. مع أني لم أزل لا أعرف ما الفرق بين (مجموعة حيوية) و (مجموعة حيوية غير متسقة) 🤔 وبارك الله فيك أخي الكريم على هذا التعديل .. فقد أصبح بالإمكان التعديل والحذف والإضافة من خلال النموذج دون مشاكل، لكن لابد من عمل تحديث، أو الخروج من الصفحة والعودة إليها ليتم استيعاب هذه التحديثات والانتقال للرقم .. ولعلك تتكرم بجعل الكود يقوم بهذه الخطوة بنفسه إن أمكن وبخصوص وضع الرقم بين {} .. أنا كنت أستفسر منك إن كان وضع الرقم بين رموز أو أقواس خاصة يسهل العملية أو يجعل الوصول للرقم أفضل وإن تغير النص ذلك أنه يبدو لي أن الدالة تبحث عن الرقم بأن تقوم بعد الأحرف وغيرها، وتحفظ أن الرقم موجود بعد كذا حركة من بداية السطر .. أو شيء من هذا القبيل وبما أنني أحب التفكير معكم بصوت مرتفع قلت في نفسي: لو كان الرقم بين رموز خاصة لا تستخدم في هذا الجدول إلا لهذا الغرض: الإحاطة بالرقم المطلوب لعملية الانتقال .. هل يجعل هذا عمل الكود أفضل إذ يبحث عن هذا الرمز فيصل للرقم مباشرة .. أم أن الأمر ليس كما ظننت ؟؟ تم تعديل يناير 14, 2021 بواسطه nssj
jjafferr قام بنشر يناير 14, 2021 قام بنشر يناير 14, 2021 17 دقائق مضت, nssj said: لكن لابد من عمل تحديث، أو الخروج من الصفحة والعودة إليها ليتم استيعاب هذه التحديثات والانتقال للرقم ما فهمت اي تحديث تتكلم عنه ، ورجاء ، اعطني مثال بالشيء الذي تريده ، فأنا لا افهم المصطلحات !! 19 دقائق مضت, nssj said: {} .. أنا كنت أستفسر منك إن كان وضع الرقم بين رموز أو أقواس خاصة يسهل العملية لو عملت هذا في بداية الامر ، لعملت الكود على هذا الاساس ، اما الآن فلا داعي له ، إلا اذ اردت ان يكون البحث عن اي شيء بين القوسين ، يعني ارقام وحروف مثلا ، او حروف فقط. 21 دقائق مضت, nssj said: يبدو لي أن الدالة تبحث عن الرقم بأن تقوم بعد الأحرف وغيرها الدالة تنطلق من المكان الذي نقرت عليه في السطر ، تنظر الى الوراء الى 10 (ويمكنك تعديله في الكود) حروف ، فأذا وجدت رقم ، تأخذه ، واذا اذا وجدت حرف توقف ، ثم تنظر الى الامام 10 حروف ، فأذا وجدت رقم ، تأخذه وتضيفه الى الارقام السابقة ، واذا اذا وجدت حرف توقف ، جعفر
nssj قام بنشر يناير 14, 2021 الكاتب قام بنشر يناير 14, 2021 14 دقائق مضت, jjafferr said: ما فهمت اي تحديث تتكلم عنه ، ورجاء ، اعطني مثال بالشيء الذي تريده عندما أضفت عبارة (من طريق يونس) ثم كبست على الرقم خرجت الرسالة .. لا بد أولا من (تحديث الكل) أو الخروج من الحقل والعودة إليه لينتقل .. 18 دقائق مضت, jjafferr said: لو عملت هذا في بداية الامر ، لعملت الكود على هذا الاساس لو كنت أعلم أن ذلك ييسر الأمر لأرسلت لك الملف على هذا الأساس 🙂 .. أنا لم أكن أعلم أصلاً أن هذا ممكن .. فأحسن الله إليك
تمت الإجابة jjafferr قام بنشر يناير 15, 2021 تمت الإجابة قام بنشر يناير 15, 2021 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 1
nssj قام بنشر يناير 15, 2021 الكاتب قام بنشر يناير 15, 2021 الأخ الكريم جعفر .. تم المطلوب بحمد الله .. وجزاك الله خيراً
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.