المشاركات : 1,252
المواضيع 170
:
: 1,500
الإنتساب : Jul 2009
جزاك الله خيرا على الرد و المتابعة.
أنا أقصد ، مادمت تقوم بجميع العمليات داخل القاعدة البيانات (الإجراءات المخزنة) ، هل Transaction تكون داخل الإجراء أم بواسطة دلفي؟
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
الTransactionتكون للبرنامج الذي استدعى الProcedure
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
المشاركات : 1,252
المواضيع 170
:
: 1,500
الإنتساب : Jul 2009
سؤال آخر لو سمحت ،
فيما يتعلق بحماية الجداول .
كيف تقوم بمنع المستخدم من التعديل أو الحذف لسجل مشغول من طرف مستخدم آخر.
بمعنى آخر :
![[صورة: 896724069.png]](http://www7.0zz0.com/2018/06/20/21/896724069.png)
كيف يمكن منع المستخدم
Delphi4Us من الدخول على هذا الملف المشغول و التحديث عليه أو الحذف له ؟
كحل أولي ، أضفت حقلا في الجدول الرئيسي اسمه used من نوع shortint له قيميتن 0 أو 1 ،
فعندما يدخل المستخدم أبو معاذ للتعديل على الملف رقم 1 ، أقوم بتغيير قيمة الحقل used من 0 (القيمة الافتراضية) إلى 1 ،
وعندما يريد المستخدم
Delphi4Us الدخول على الملف رقم 1 ، لا يمكنه فعل شيء سوى المعاينة.
أرجو أن تكون الفكرة واضحة.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
المشاركات : 421
المواضيع 77
:
: 195
الإنتساب : Dec 2008
(02-06-2018, 12:33 AM)mobile كتب : وعليكم السلام ورحمة الله وبركاته
ساحاول فهم البرنامج الذي ارسله لك الاستاذ عبد العزيز واعود ان شاء الله .هو برنامج جيد اقى استحسان الكثير من الناس وانت تعرف الاستاذ عبد العزيز سهامه لا تخطئ في الانتقاء لذلك راجع البرنامج واستعن بالله ثم بموقع قاموي المعاني لترجمة مصطلحات البرنامج لانه فرنسي
وعليكم السلام هل ممكن البرنامج
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
بالنسبة الى التعديل على جدول مفتوح لم افكر فيه الان في قاعدة بيانات فايربيرد لان المنظومة التي اجهزها لا تعمل على شبكة .
هناك قواعد بيانات مثل AbsoluteDatabase فيها هذه الخاصية فهي تخبرك ان السجل الذي تحاول فتحه مفتوح للتعديل ولا يمكنك الولوج اليه .
هذا الباب طويل ، هناك حسب ما قرات طرق عديدة
ولكن فكرت مرة وقلت كل مستخدم ينقر زر تعديل ويكون بحالة تعديل يتم تسجيل ذلك السجل بجدول ما ، بحيث اذا اردت انت ان تنقر على زر تعديل يتم قراءة ذلك الجدول اذا وجد اسمه منعك حتى يخرج الشخص الاخر من حالة التعديل بالنقر على الغاء او حفظ .
فكرة عابرة من الرائد فكري .
او ربما يمكن استخدام الـ events في فايربيرد فعندما يحدث تغيير في البيانات يتم تحديث البيانات عند الجميع الذين يفتحون هذا السجل مع رسالة تخبرك ان البيانات قد تغيرت فكرة عابرة ايضا من الرائد فكري .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 1,252
المواضيع 170
:
: 1,500
الإنتساب : Jul 2009
21-06-2018, 04:50 AM
(آخر تعديل لهذه المشاركة: 21-06-2018, 04:52 AM بواسطة أبو معاذ.)
[quote pid='45797' dateline='1528918700']
[/quote]
السلام عليكم ،
من فضلك ما هي المكونات المستعملة للحصول على هذا الجمال في الفورم؟
جزاك الله خيرا.
إقتباس :Delphi4Us يبدوا انني بصدد الحصول على ابن جديد ، ارجوا ان يكون ولدا صالحا ومباركا .
اسأل الله أن ينبته نباتا حسنا ، و يجعله من الصالحين المصلحين.
اللهم آمين.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
المشاركات : 3,703
المواضيع 101
:
: 579
الإنتساب : Feb 2008
(20-06-2018, 07:08 PM)أبو معاذ كتب : كيف تقوم بمنع المستخدم من التعديل أو الحذف لسجل مشغول من طرف مستخدم آخر.
حاول تغيير طريقة التفكير، إنسى مسالة المنع، قاعدة البيانات هي التي تحدد ذلك
حاول مطالعة ما تجد من توثيق عن Firebird وكيف يعمل خاصة الTransaction
(20-06-2018, 07:08 PM)أبو معاذ كتب : كحل أولي ، أضفت حقلا في الجدول الرئيسي اسمه used من نوع shortint له قيميتن 0 أو 1 ،
فعندما يدخل المستخدم أبو معاذ للتعديل على الملف رقم 1 ، أقوم بتغيير قيمة الحقل used من 0 (القيمة الافتراضية) إلى 1 ،
الحل غير ناجع، تابع لماذا
1- أبو معاذ اتصل بالقاعدة ونفذ استعلام مثلا select جدول ما، هنا Transaction تبقى Active يعني لم تقم بCommit او Rollback (طبعا هنا كلام اخر حول المكون المستخدم في الاتصال فبعض منها فرضا يكون autocommit يعني يستدعي Commit بعد كل عملية )
2- Delphi4Us اتصل بالقاعدة ونفذ استعلام مثلا select لنفس الجدول السابق او جدول اخر وله ايضا Transaction
3- أبو معاذ اتصل بالقاعدة ونفذ استعلام وقالم بتغيير قيمة الحقل used من 0 (القيمة الافتراضية) إلى 1 ومن المفروض يقوم بCommit
حتى هنا الحقل used بالنسبة لDelphi4us لا يزال 0
Delphi4Us يستطيع مشاهدة التغيير فقط في حال الTransaction التي قام بها كانت بعد Commit التعديل لTransaction الاخرى.
هل فهمت حتى الان ؟
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
المشاركات : 1,252
المواضيع 170
:
: 1,500
الإنتساب : Jul 2009
(21-06-2018, 09:09 AM)B.M.AbdelAziZ كتب : (20-06-2018, 07:08 PM)أبو معاذ كتب : كيف تقوم بمنع المستخدم من التعديل أو الحذف لسجل مشغول من طرف مستخدم آخر.
حاول تغيير طريقة التفكير، إنسى مسالة المنع، قاعدة البيانات هي التي تحدد ذلك
حاول مطالعة ما تجد من توثيق عن Firebird وكيف يعمل خاصة الTransaction
(20-06-2018, 07:08 PM)أبو معاذ كتب : كحل أولي ، أضفت حقلا في الجدول الرئيسي اسمه used من نوع shortint له قيميتن 0 أو 1 ،
فعندما يدخل المستخدم أبو معاذ للتعديل على الملف رقم 1 ، أقوم بتغيير قيمة الحقل used من 0 (القيمة الافتراضية) إلى 1 ،
الحل غير ناجع، تابع لماذا
1- أبو معاذ اتصل بالقاعدة ونفذ استعلام مثلا select جدول ما، هنا Transaction تبقى Active يعني لم تقم بCommit او Rollback (طبعا هنا كلام اخر حول المكون المستخدم في الاتصال فبعض منها فرضا يكون autocommit يعني يستدعي Commit بعد كل عملية )
2- Delphi4Us اتصل بالقاعدة ونفذ استعلام مثلا select لنفس الجدول السابق او جدول اخر وله ايضا Transaction
3- أبو معاذ اتصل بالقاعدة ونفذ استعلام وقالم بتغيير قيمة الحقل used من 0 (القيمة الافتراضية) إلى 1 ومن المفروض يقوم بCommit
حتى هنا الحقل used بالنسبة لDelphi4us لا يزال 0
Delphi4Us يستطيع مشاهدة التغيير فقط في حال الTransaction التي قام بها كانت بعد Commit التعديل لTransaction الاخرى.
هل فهمت حتى الان ؟
جزاك الله خيرا أخي عبد العزيز ،
ربما لم يكن سؤالي واضحا .
![[صورة: 168394819.png]](http://www8.0zz0.com/2018/06/21/13/168394819.png)
في الصورة أعلاه بها قائمة الملفات (maitre/detail) إذا ضغطت على رقم الملف تلاحظ محتوى الملف في dbgrid اسفله.
فرضا أن أبو معاذ دخل إلى الملف رقم 1 للتعديل أو الطباعة.
ودخل الأخ Delphi4Us إلى نفس الملف لحذفه ،
كيف ستكون العملية.
الحل الذي وجدته هو انشاء جدول اسمه ملفاتي به رقم الملف فقط ،
عندما يقوم أبو معاذ بالدخول إلى الملف رقم 1 مثلا ، ادخل رقم الملف في الجدول ملفاتي .
إذا أراد Delphi4Us الدخول إلى الملف ، أقوم باستعلام بسيط على الجدول ملفاتي هل الملف المطلوب مشغول أو لا ؟
إذا كان مشغول ، Delphi4Us لا يمكنه الدخول على الملف للتعديل أو الحذف ، فقط للاطلاع أو الطباعة.
عندما يخرج أبو معاذ من الملف رقم 1 ، أقوم بحذف قيمته في جدول ملفاتي.
أرجو أن تكون الفكرة واضحة.
هل من اقتراح آخر.؟
جزاكم الله خيرا.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
المشاركات : 975
المواضيع 50
:
: 218
الإنتساب : Feb 2008
21-06-2018, 12:12 PM
(آخر تعديل لهذه المشاركة: 21-06-2018, 12:28 PM بواسطة S.FATEH.)
السلام عليكم اخ ابو معاذ كل هذه الامور هي من خصائص قاعدة البيانات سابحث ان شاء الله لاني اتذكر اني قرأت مثل هذه الامور
اخ ابو معاذ اعتقد ان طريقة انشاء حقل و تغيير القيمة خاطئة
لكن في المستقبل في حالة اردت استخدام Flags او كما فعلت انت FireBird يوفر RDB$SET_CONTEXT و
RDB$GET_CONTEXT
تقوم بوضع متغير و تغيره بالـRDB$SET_CONTEXT ثم تقرأه بالـ RDB$GET_CONTEXT
كمثال من برنامجي
كود :
rdb$set_context('USER_TRANSACTION', 'VENTE_FLAG1', 1);
VENTE_FLAG1 اسم المتغير 1 هي القيمة
للقراءة
كود :
AS
declare variable i d_integer;
begin
select rdb$get_context('USER_TRANSACTION', 'VENTE_FLAG1') from rdb$database into :i;
if (i = 1) then Exit;
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
كل من 1 user says قال شكرا ل S.FATEH على المشاركة المفيدة1 user says Thank You to S.FATEH for this post
• أبو معاذ
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
21-06-2018, 12:45 PM
(آخر تعديل لهذه المشاركة: 21-06-2018, 03:25 PM بواسطة Delphi4Us.)
بالنسبة الى السكين أخ ابو معاذ سبق وقلت ما هو في موضوع اخر .
المكونات هي BusinessSkinForm طبعا مع تدخلات أخرى فهي معها برنامج لتحرير السكين والذي هو عبارة عن مجموعة صور ، لن تجد سكين جاهز يلبي او يعطيك المنظور او الشكل الذي تريده لا بد وان فيه شئ لن ترضى عنه وهنا يمكن التدخل وتغيير هذا
وهناك ادوات هي من برمجتي او من تصميمي وسبق ان طرحتها في موضوع سابق مثل Tab-page الذي يظهر في الصورة الى الركن العلوي ناحية اليسار حيث العلاوات والدرجات والمصرف
ولا اسرار فيه ابدا مجموعة Panel مع بعض الصور والازرار والتبديل بينها
عندما تراه تعجب به او بهذه المكونات وعندما ترى الكود المصدري ستجدها عبارة عن صور يتم التبديل بينها وربما ستضحك من طريقة تصميمها
اذكر عندما ظهر ويندوز المرئي اول مرة قلت لشخص ان كل ما تراه عبارة عن صور .
الازرار والنوافذ والقوائم كلها صور .
حدق مندهشا ومبديا اعتراضه وقال : ماذا تقول كيف تكون صور فقط ...؟
لم يستطيع ان يتخيل الامر .
فكل السكين والادوات ماهي الا صور وازرار و Panel فقط وهذه الاخيرة ما هي الا صور اختر الصورة الصحيحة
والخط ايضا من تعديلي الخاص .
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم