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

كيفية عمل Unbound Sub Form له أكثر من صف


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

بداية أود أن أقول أننى أستخدم الأكس منذ خمسة أعوام

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

وسؤالى ... هل يمكن تصميم نموذج فرعى غير متصل بجدول أو حتى بإستعلام  وله أكثر من صف..

برجاء الرد حتى لو بإيضاح إمكانية الإستحالة..

DB.rar

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

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

ممكن تشرح طريقة انشاء نموذج بالهارد كود كرما وليس امرا !

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

بالتوفيق

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

بالنسبة للأخ جعفر ...

أشكرك أولا ً على مروركم الكريم

 وأود أن أقول أن سبب طلبى هو أننى أأفضل التعامل مع شاشات الأكسس بطريقيتى DAO و ADO نظراً للإمكانيات الهائلة  التى يمتعا بهما فى الأضافة والتعاديل البحث على البيانات

ولدى شاشات كثيره قد قمت بتصميها بتلك الطرق .... ولكن ... كل هذه الشاشات تتعامل مع جدول بيانات واحد فقط 

وبالنسبة للنماذج التى تتعامل مع جدولين من البيانات Form & Sub Form لم أصل إلى تصور معين لربط الجدول بطريقيتى DAO و ADO على الإطلاق 

ويرجع السبب الى أشياء واسباب متعددة المهم أنكم لو قدمت لى يد العون فى هذا المنحى بالنسبة الى سؤالى السالف ذكره ساكون قد قطعت 90 % من الطريق

أتمنى قد أكون قد أوضحت و نتمنى وجود تعاوناً مثمراً بيننا ...

 

 

بالنسبة الى العضو yms12 يوجد مثال مرفق بالفعل لما أريد عمله ...

وشكراً

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

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

هو تصميم شاشة تكون مرتبطه بجدول بيانات بالهارد كود 

وإليكم المثال المرفق .. وهى عبارة عن شاشة لتسجيل بيانات الشيكات بالنسبة لعميل معين عن طريق ADO 

ونقوم بالإضافة والتعديل والحذف والبحث من خلالها ..

 

DB.rar

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

حاولت فهم اسمك ولم استطع مع انه بحروف عربية !

اشكرك اولا على تلبية طلبي وهنا فهمت قصدك بانه عملية ربط النموذح بمصادر البيانات وليس انشاء النموذج !

ونحن اخوة لك انشاءالله اسوة بالاستاذ جعفر ( ساحرهم يا جعفر :wink2:)

وهذه وجهة نظر العضو رمهان في الموضوع :

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

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

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

اخوك رمهان :fff:

 

 

 

 

 

تم تعديل بواسطه رمهان
  • Like 2
رابط هذا التعليق
شارك

وعليكم السلام :smile:

 

الرابط التالي لأحد زملائي القدامى Leigh Purvis ، وفيه العديد من الامثلة:

http://www.databasedevelopment.co.uk/examples.htm

انزل المثال:

unBound.zip

في البرنامج ، اختر اسم اي شخص في القائمة ، ثم انقر على الزر Orders Recordset ،

النموذج الجديد هو هدفك ، هو والنموذج الفرعي ، وانت خبير في كيف النظر في كود Recordset :smile:

 

جعفر

وبالنسبة للنماذج التى تتعامل مع جدولين من البيانات Form & Sub Form لم أصل إلى تصور معين لربط الجدول بطريقيتى DAO و ADO على الإطلاق 

.

برمجة Recordset عبارة عن استعلام ،

واذا اردت ربط اكثر من جدول ، فاعمل استعلام واربط الجداول مثلما شئت ، ولما تحصل على النتائج الصحيحة ، انسخ SQL الاستعلام وضعه في Recordset (انا كسلان ، فما ادوخ راسي في بناء SQL مباشرة :cool:).

 

ونحن اخوة لك انشاءالله اسوة بالاستاذ جعفر ( ساحرهم يا جعفر :wink2:)

اخوك رمهان :fff:

.

أخوي رمهان ، انا بفتح موضوع جديد بس للعزيزين ، حول كيف تسحر الناس بالاكسس ، وان شاء الله ارسل لك الدعوة:wink2:

 

جعفر

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

.

وأخي العزيز ، نموذجك ليس بالكامل unbound ، فعندك مربح التحرير ComboBox متصل بالجدول مباشرة :blink:

 

الطريقة اللي انا عملتها في احد برامجي السابقة كانت كالتالي:

1. عملت وحدة نمطية كالتالي:

Option Compare Database
Option Explicit

    Dim cnn As New ADODB.Connection
    Dim srstADO As ADODB.Recordset



Public Function ComboRecordset(strCombo As Control, strSQL As String)
    'do the Recordset for the Form's ComboBoxes
    
    'open a connection if the connection is not open
'    If cnn.State <> adStateOpen Then
        Call ConnectSQL(cnn)
'    End If
    
    Set srstADO = New ADODB.Recordset
    With srstADO
        .Source = strSQL
        .ActiveConnection = cnn
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .CursorLocation = adUseClient
        .Open
    End With
    Set strCombo.Recordset = srstADO

    'close the ADO object, once the data are set in the controls
    If srstADO.State = adStateOpen Then
        srstADO.Close
        Set srstADO = Nothing
    End If
    
End Function



Public Function ConnectSQL(cnn)

'Set a global SQL Server connection object
'Stop

On Error GoTo error_handler

    'open a connection if the connection is not open
    'If cnn.State <> adStateOpen Then
    '    Call ConnectSQL(cnn)
    'End If
    If cnn.State = adStateOpen Then
        Exit Function
    End If
    
    
Dim sConnect As String
    Dim BE, BE_File
    BE = "Access"
    If BE = "Access" Then

BE_File = "C:\temp\ABC_BE\ABC_BE2.mdb;"
sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & BE_File
                   
    
    End If  'BE
    
If Not cnn Is Nothing Then
    Set cnn = CreateObject("ADODB.Connection")
    cnn.ConnectionString = sConnect
    cnn.Open
End If

If cnn.Errors.Count > 0 Then
    'hide the error message, as the system still runs ok
    MsgBox "An error occured while attempting to connect to SQL Server BOND:  " & vbCrLf & cnn.Errors(0).Number & vbCrLf & cnn.Errors(0).Description, vbOKOnly, ""
End If

exit_function:
    'Nothing to do here
    Exit Function
    
error_handler:
'    Stop
    MsgBox Err.Number & vbCrLf & Err & ", " & Error$
    'MsgBox Err & ", " & Error$
    Resume exit_function

End Function

.

2. وفي حدث On_Load النموذج ، كان هذا الكود ينادي الوحدة النمطية ، ويملئ ComboBox:

    'set the ComboBoxes Recordsets
    's__Folder_Number
    strSQL = "SELECT DISTINCT Folder_Number FROM tbl_Folders WHERE Folder_Number Is Not Null;"
    Call ComboRecordset(s__Folder_Number, strSQL)
    
    'i__Folder_Year
    strSQL = "SELECT DISTINCT Folder_Year FROM tbl_Folders WHERE Folder_Year Is Not Null;"
    Call ComboRecordset(i__Folder_Year, strSQL)

 

 

للعلم :smile:

 

جعفر

تم تعديل بواسطه jjafferr
  • Like 1
رابط هذا التعليق
شارك

شكراً أخى ولكن هناك ظروف معينة تستدعى الإعتماد على تطبيق معبن

وفقا لظروف العمل وحاجة المشروع ولكننى أرى نماذج على منتديات عالمية ترتقى لإمكانيات لغات البرمجة القوية

من حيث التنفيذ والتطبيق

فالمعيار هنا بحجم المعرفة وليس قدرات الأكسس

وشكراً

لمرورك مرة أخرى

 

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

.

وأخي العزيز ، نموذجك ليس بالكامل unbound ، فعندك مربح التحرير ComboBox متصل بالجدول مباشرة :blink:

 

الطريقة اللي انا عملتها في احد برامجي السابقة كانت كالتالي:

1. عملت وحدة نمطية كالتالي:

Option Compare Database
Option Explicit

    Dim cnn As New ADODB.Connection
    Dim srstADO As ADODB.Recordset



Public Function ComboRecordset(strCombo As Control, strSQL As String)
    'do the Recordset for the Form's ComboBoxes
    
    'open a connection if the connection is not open
'    If cnn.State <> adStateOpen Then
        Call ConnectSQL(cnn)
'    End If
    
    Set srstADO = New ADODB.Recordset
    With srstADO
        .Source = strSQL
        .ActiveConnection = cnn
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .CursorLocation = adUseClient
        .Open
    End With
    Set strCombo.Recordset = srstADO

    'close the ADO object, once the data are set in the controls
    If srstADO.State = adStateOpen Then
        srstADO.Close
        Set srstADO = Nothing
    End If
    
End Function



Public Function ConnectSQL(cnn)

'Set a global SQL Server connection object
'Stop

On Error GoTo error_handler

    'open a connection if the connection is not open
    'If cnn.State <> adStateOpen Then
    '    Call ConnectSQL(cnn)
    'End If
    If cnn.State = adStateOpen Then
        Exit Function
    End If
    
    
Dim sConnect As String
    Dim BE, BE_File
    BE = "Access"
    If BE = "Access" Then

BE_File = "C:\temp\ABC_BE\ABC_BE2.mdb;"
sConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=" & BE_File
                   
    
    End If  'BE
    
If Not cnn Is Nothing Then
    Set cnn = CreateObject("ADODB.Connection")
    cnn.ConnectionString = sConnect
    cnn.Open
End If

If cnn.Errors.Count > 0 Then
    'hide the error message, as the system still runs ok
    MsgBox "An error occured while attempting to connect to SQL Server BOND:  " & vbCrLf & cnn.Errors(0).Number & vbCrLf & cnn.Errors(0).Description, vbOKOnly, ""
End If

exit_function:
    'Nothing to do here
    Exit Function
    
error_handler:
'    Stop
    MsgBox Err.Number & vbCrLf & Err & ", " & Error$
    'MsgBox Err & ", " & Error$
    Resume exit_function

End Function

.

2. وفي حدث On_Load النموذج ، كان هذا الكود ينادي الوحدة النمطية ، ويملئ ComboBox:

    'set the ComboBoxes Recordsets
    's__Folder_Number
    strSQL = "SELECT DISTINCT Folder_Number FROM tbl_Folders WHERE Folder_Number Is Not Null;"
    Call ComboRecordset(s__Folder_Number, strSQL)
    
    'i__Folder_Year
    strSQL = "SELECT DISTINCT Folder_Year FROM tbl_Folders WHERE Folder_Year Is Not Null;"
    Call ComboRecordset(i__Folder_Year, strSQL)

 

 

للعلم :smile:

 

جعفر

ممكن المرفق اخي جعفر ! طبعا راح اغير مكان القاعدة حسب المسار الذي بالكود !

لانه انا شايف الدالة ConnectSQL() بتنادي نفسها اذا الكنكشن مغلق ! وخلق الكائن وفتحه ياتي بعد مناداة الدالة ! فهنا هل سيتم تنفيذ باقي جسم الدالة خصوصا انها تتطلب تمرير الكائن cnn  وهو لسا لم تسند له القيم !!

 

مشكور

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

 

1. ممكن المرفق اخي جعفر ! طبعا راح اغير مكان القاعدة حسب المسار الذي بالكود !

 

2. لانه انا شايف الدالة ConnectSQL() بتنادي نفسها اذا الكنكشن مغلق ! وخلق الكائن وفتحه ياتي بعد مناداة الدالة ! فهنا هل سيتم تنفيذ باقي جسم الدالة خصوصا انها تتطلب تمرير الكائن cnn  وهو لسا لم تسند له القيم !!

 

1. والله أخوي رمهان البرنامج ليس بالكامل ، ومشتت ، وصار لي 7 سنوات ما لمسته ، فما اتذكر ايش وضعه :blink:

2. انا فتحت الاتصال من كود النموذج الاساسي بمناداة الدالة 

Call ConnectSQL(cnn)

 

جعفر

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

ماتشيلشي هم اخوي جعفر ! :biggrin:

وانبه فقط على ان السؤال يختلف عن ماشاركة به !! ليس السؤال عملية استخدام مكتبات ال ado !

"وسؤالى ... هل يمكن تصميم نموذج فرعى غير متصل بجدول أو حتى بإستعلام  وله أكثر من صف."

المراد سجلات اكتب فيها زي مااحب زي الاكسل او زي الداتا قريد بالفيجول او msflexgrid  في الفي بي زمان ! وبدون استناد على جدول او استعلام !

تحياتي

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

ماتشيلشي هم اخوي جعفر ! :biggrin:

وانبه فقط على ان السؤال يختلف عن ماشاركة به !! 1. ليس السؤال عملية استخدام مكتبات ال ado !

2. "وسؤالى ... هل يمكن تصميم نموذج فرعى غير متصل بجدول أو حتى بإستعلام  وله أكثر من صف."

المراد سجلات اكتب فيها زي مااحب زي الاكسل او زي الداتا قريد بالفيجول او msflexgrid  في الفي بي زمان ! وبدون استناد على جدول او استعلام !

تحياتي

.

وعليكم السلام اخي رمهان:smile:

1. الـ Recordset يكون باستخدام  ADO او DAO ، فلذلك الامثلة حسب طلب السؤال :smile:

2. انا افتكرت الموضوع مثلك ، ولكن لما الاخ نكرو مانسر شرح الموضوع بشكل اكبر ، فارفقت له رابط بنفس الفكرة (طبعا حسب فهمي للموضوع):smile:

 

جعفر

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

السلام عليكم

شكرا جزيلا لكل من الإخوة جعفر و رمهان على التعاون غير العادى

وعفواً لتأخرى فى الرد

حقيقة سأركز على المثال الأكثر من رائع الأ وهو "" Unbound""" 

لأننى لم افهم جيداً المناقشات حول الوحدة النمطية الموضحه سلفاً نظراً لظهور ما كتب فى المتاقشات بشكل غير سليم  

لمشكلة ما فى تحرير النصوص

المهم 

ما أود قوله فبما يخص المثال أنه مثال به قصور حيث أنه يستلزم للتسجيل فى النموذج الفرعى تسجيل العميل اولأ 

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

وهذا الأمر لا يتناسب تماماً مع ما أريد عمله حيث سأستبدل بدلا من العميل فى مشروعى رقم عرض أمر التوريد ثم المنتجات الخاصه به فى النموذج الفرعى 

وبناءأ عليه مرفق لكم مثال لى نموذج ونموذج فرعى المراد التسجيل فيهما وربطهما ولكن ليس بطريقة " Wizard "" 

 

DB.rar

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

اخي الكريم

اسمك وماهناه قنا ماشي مش مهم !

لكن

رداً لعرش الكرك

 

ايش معناها لو تكرمت ! ومن هو الكرك ! ترى فقط نريد معلومات والا احنا مقدرين خصوصيات كل شخص !

تحياتي

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

سأقول لك يا أخى هى ليست خصوصيات

" النكرومانسر" هو شخص يعمل بإستحضار روح شخص ميت

وقد علمته من رواية قديمة كنت قد قرأتها منذ فترة ... واستغربت الإسم فأطلقته على نفسى فى منتداكم..

أما بالنسبة لعبارة "رداً لعرش الكرك " هى مقتبسه من الفيلم المصرى الناصر صلاح الدين 

عن مقولة لأحد ممثليه " كوباً من الماء لعرش الكرك"

بس دى الحكاية ...

 

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

مشكور والله اخي على سعة صدرك اولا !

ثانيا : نعود للموضوع : حسب فهمي فالموضوع اخذ اكثر مفهوم :

1. هل انشاء نموذج به اسطر وبدون الاستناد على جدول او استعلام

2. هل انشاء نموذج رئيسي وربطه بالفرعي عن طريق مكتبات ال ado  او dao

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

بالتوفيق

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

هذا بعينه هو المطلوب

"2. هل انشاء نموذج رئيسي وربطه بالفرعي عن طريق مكتبات ال ado  او dao"

 

اخي نكرو

تمام ! الآن وضحت الصورة !

ولكن الاستاذ جعفر ما عاد بين هنا ! مع العلم انوقع ان له خبرة في هذا السيناريو والذي انا لا اوؤيده الا مع التعامل مع قواعد سيرفرية مثل sql server  وهذا لاحظناه في تعليقات الكود المرفق من اخوي جعفر في المشاركة رقم 10 !  

انا لي وجهة نظر في الموضوع اخ نكرو : اريدك ان تذكر لماذا لجأت لهذا السيناريو ؟ ماهي العيوب في وضع النموذج يرتبط بجدول اواستعلام مباشر ؟ ماهي الاشياء التي احتجتها وافتقدها الربط المباشر وتوجد في الربط بالمكتبات ! 

لانني اريدك ان تفهم الية الاكسس بعمق في التعامل مع البيانات !

تحياتي

 

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

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

أخي نكرو مانسر

 

اول شئ يجب ان تفعله عند استخدام Recordset لتعبئة البيانات الجداول ، هو حذف العلاقات بين الجداول ، حيث انك ستتحكم بجميع الحقول والسجلات برمجيا ، وبدون اخطاء (انت تتكلم عن برمجة قواعد البيانات / اكسس في اعلى درجاتها :rol: ، فلا مجال لأخطاء المبتدئين هنا :wink2:)

 

حقيقة سأركز على المثال الأكثر من رائع الأ وهو "" Unbound""" 

 

1. ما أود قوله فبما يخص المثال أنه مثال به قصور حيث أنه يستلزم للتسجيل فى النموذج الفرعى تسجيل العميل اولأ 

2. ثم تسجيل ما يتعلق بالعميل من بيانات فتعامل البيانات فى النوذج الفرعى كبيانات معدله ولا يمكن الإضافة عليها الا بعد القيام بإضافة عميل جديد أولا 

وهذا الأمر لا يتناسب تماماً مع ما أريد عمله حيث سأستبدل بدلا من العميل فى مشروعى رقم عرض أمر التوريد ثم المنتجات الخاصه به فى النموذج الفرعى 

3. وبناءأ عليه مرفق لكم مثال لى نموذج ونموذج فرعى المراد التسجيل فيهما وربطهما ولكن ليس بطريقة " Wizard "" 

 

DB.rar

هذا بعينه هو المطلوب

"3. هل انشاء نموذج رئيسي وربطه بالفرعي عن طريق مكتبات ال ado  او dao"

.

1. هذا غير صحيح ، فالبيانات في النموذج الفرعي مفصولة ، ولا يتم حفظ البيانات (سواء المعدلة او السجلات الجديدة) إلا اذا ضغطت على الزر Save ،

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

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

2. البرنامج بحاجة الى كتابة رقم العميل (او امر التوريد) في الجدول ، فانت حر في طريقة اعطائه الرقم كما تحب (ولا يجب ان يكون رقم العميل من النموذج الرئيسي) ، فتستطيع ان تجعل له حقل في النموذج الفرعي وتملئه كما تملئ بقية الحقول ،

3. انت لا تحتاج الى علاقة بين النموذج الرئيسي والنموذج الفرعي ، فانت الذي تحدد اي بيانات / سجلات للنموذج الرئيسي ، واي بيانات للنموذج الفرعي ،

نحن بحاجة الى ربط النموذج الفرعي بالنموذج الرئيسي بحقل او اكثر ، فقط لتصفية السجلات في النموذج الفرعي على اساس بيانات النموذج الرئيسي ، بينما في حالتك ، فانت لا تصفي البيانات ، وانما تضيفها على كيفك :cool:

 

لهذا ، فالمرفق Unbound متكامل :rol:

 

اخي نكرو

تمام ! الآن وضحت الصورة !

4. ولكن الاستاذ جعفر ما عاد بين هنا ! مع العلم انوقع ان له خبرة في هذا السيناريو والذي انا لا اوؤيده الا مع التعامل مع قواعد سيرفرية مثل sql server  وهذا لاحظناه في تعليقات الكود المرفق من اخوي جعفر في المشاركة رقم 10 !  

5. انا لي وجهة نظر في الموضوع اخ نكرو : اريدك ان تذكر لماذا لجأت لهذا السيناريو ؟ ماهي العيوب في وضع النموذج يرتبط بجدول اواستعلام مباشر ؟ ماهي الاشياء التي احتجتها وافتقدها الربط المباشر وتوجد في الربط بالمكتبات ! 

لانني اريدك ان تفهم الية الاكسس بعمق في التعامل مع البيانات !

أخي الاستاذ رمهان 

4. الميزة قي التعامل مع السجلات / البيانات بطريقة Recordset ومكتبات ado doa :

  • يجعل البرنامج خفيف ، حيث لا تاخذ من الجداول إلا السجل المطلوب ، بدل ان تأتي بالجدول كاملا الى النموذج ، ثم تصفيه في النموذج (باستخدام Form Filter مثلا) ،
  • لا يعمل ضغط على القاعدة الخلفية (الجداول) ، وبهذه الطريقة تكسر حاجز الـ 15-25 شخص الذين يستطيعون استخدام البرنامج قبل ان يبدأ البرنامج بالبطئ ، فبهذه الطريقة لا حدود لعدد الاشخاص الذين يستطيعون استخدام البرنامج في شبكة ،
  • اذا اضفت على الجداول حقلين ، حقل للرقم التلقائي ، وحقل للتاريخ (لاحظ جميع برامجي ، فانا اضيف هذين الحقلين في كل جدول) ، فيمكن ان تغير خلفية الجداول بدل عن الاكسس ، تستطيع ان تستعمل SQL server او My SQL ، او خلفية اخرى ، وبدون اي تغييرات تُذكر ،
  • اذا تعلمت التعامل مع السجلات بهذه الطريقة ، فانت قريب جدا من برمجة ado.NET :wink2:

5. وانا اضيف صوتي لصوتك ، لمعرفة السبب :rol:

 

 

جعفر

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

حبيبي ورفيق دربي جعفر

استسمح في الرد من وجهة نظري 

اول شئ يجب ان تفعله عند استخدام Recordset لتعبئة البيانات الجداول ، هو حذف العلاقات بين الجداول ، 

:angry:

  • يجعل البرنامج خفيف ، حيث لا تاخذ من الجداول إلا السجل المطلوب ، بدل ان تأتي بالجدول كاملا الى النموذج ، ثم تصفيه في النموذج (باستخدام Form Filter مثلا) ، 

كذلك النموذج اذا مصدره استعلام او جملة استعلام اخذت من الجدول ما احتاج ! ولنعلم انها في الاصل تتحول ل  dao recordset !

لا يعمل ضغط على القاعدة الخلفية (الجداول) ، وبهذه الطريقة تكسر حاجز الـ 15-25 شخص الذين يستطيعون استخدام البرنامج قبل ان يبدأ البرنامج بالبطئ ، فبهذه الطريقة لا حدود لعدد الاشخاص الذين يستطيعون استخدام البرنامج في شبكة ،

 اعتقد هنا تركنا اهم مايميز الاكسس في التعامل مع الشبكة كاغلاق السجلات المحمود والمتشائم ! وكذلك في البيانات اللحظية مثلا لو كنت ايبع من صنف اليس مهم لحظيا مشاركة مع المستخدمين  ؟!

  • اذا اضفت على الجداول حقلين ، حقل للرقم التلقائي ، وحقل للتاريخ (لاحظ جميع برامجي ، فانا اضيف هذين الحقلين في كل جدول) ، فيمكن ان تغير خلفية الجداول بدل عن الاكسس ، تستطيع ان تستعمل SQL server او My SQL ، او خلفية اخرى ، وبدون اي تغييرات تُذكر ،

هنا لاتعليق : الكود واحد لمصادر متغيره!

  • اذا تعلمت التعامل مع السجلات بهذه الطريقة ، فانت قريب جدا من برمجة ado.NET :wink2:

ال ado  اتت مع الاصدار 2000 ! وكان هدفها محاكات قواعد البيانات السيرفرية !

هناك الاجراءات المخزنة ! هناك جداول دوال القيمة ! محاولة لانشاء بيئة اتصال native !  محاولة انشاء مايسمى disconnected data !

ولكن مع ado.net   اتت كاملة ل disconnected data  وبالكائن العجيب dataset ! ولكن هي تستخدم ado داخليا !

يمكن كررت محاولة ! نعم هي ميكروسوفت تحاول تقليد التقنيات الاخرى !

توصيات:

1. عندما تريد انشاء كائنات في الذاكرة فان التحكم بها صعبا من خلال المستخدم فاترك الاكسس يتحكم اكثر ! ادارة الذاكرة ليست بحجم البيانات فقط !

2. يجب ان نعرف ان الاكسس نفيسه يتخاطب مع jet بهذه المكتبات فلماذا تكرر السيناريو ! هل تجاكر الاكسس ؟!

3. اعتقد ان استخدام ال ado  بالتحديد ل :

  • التخاطب مع قواعد البيانات السيرفرية لتشغيل الاجراءات المخزنة فهي ميزة كبيرة والا لم تستفد من القواعد السيرفرية  غير حجم البيانات! فاالاكسس يستخدم الاستعلام التمريري العقيم في التعامل هنا !
  • اذا كنت اريد اتعامل مع بيئة منفصلة ! يعني اسحب البيانات واتعامل معها ثم ارجعها للسيرفر ! 
  •   انشاء تركيبة recordset  كجدول مؤقت ومن الصفر وربطه بالنموذج !  
  • استخدام الوظائف الكثيرة والمفيدة بل واختلاف الميزات مع شبيهتها في ال dao   مثل  recordset.move   تعطي موقع التحرك وكم اتحرك! 

 

اخيرا اعيد ماكتبت في البدء

وهذه وجهة نظر العضو رمهان في الموضوع :

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

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

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

اخوك رمهان :fff:

 

 هذا واتمنى ان اثرينا الموضوع 

تحياتي:fff:

 

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

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.

×
×
  • اضف...

Important Information