![]() |
|
مشكلات شائعة عند التعامل مع جداول أو الاستعلامات باستخدام الاتصال ado - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي و التعامل مع قواعد البيانات (https://delphi4arab.net/forum/forumdisplay.php?fid=23) +--- الموضوع : مشكلات شائعة عند التعامل مع جداول أو الاستعلامات باستخدام الاتصال ado (/showthread.php?tid=4734) |
مشكلات شائعة عند التعامل مع جداول أو الاستعلامات باستخدام الاتصال ado - kachwahed - 20-11-2012 السلام عليكم ورحمة الله في هذا الموضوع سنتعرض إن شاء الله لبعض المشكلات الشائعة عند التعامل مع جداول أو الاستعلامات باستخدام الاتصال ADO في جل هذه المحاولات سنستخدم البراميترات الديناميكية ADO وهو محور هذا الموضوع: Properties-Dynamic ADO PHP كود : http://msdn.microsoft.com/en-us/library/windows/desktop/ms680834%28v=vs.85%29.aspx الإشكال الأول: رسالة الخطأ عند محاولة التعديل على بيانات تم تعديلها منذ آخر قراءة رسالة الخطأ (إنجليزي): Row cannot be located for updating. Some values may have been chenged since it was last read رسالة الخطأ (فرنسي): La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture. السبب: في الواقع هناك عدة أعراض تؤدي إلى حدوث هذا الخلل، تلخصها عبارة: محاولة تعديل بيانات تم تعديلها منذ آخر قراءة، من أمثلة ذلك: التعامل مع حقول الترقيم التلقائي AutoNum، حقول محسوبة على مستوى قاعدة البيانات Computed Column، حقل يحمل قيمة افتراضية Default Value ، استخدام Trigger ربما ! الحل: قد تجد في بعض المراجع/المنتديات حلا باستخدام إعادة استرجاع البيانات Refresh أو شيئا مثل ذلك غير أن معظم هذه الحلول قد تأثر على سرعة التجاوب مع المستخدم خاصة مع جداول كبيرة نسبيا. الحل باستخدام برامتر Update Resync بتغيير سلوك التعديل على الجدول، هل يتبع بإعادة التزامن Resync أم لا وعلى أي نطاق؟ مثال: لدي جدول يحتوي حقل يحمل قيمة افتراضية عند إضافة سجل Record في هذا الجدول لن أشاهد هذه القيمة، وإذا حاولت تعديلها سأحصل على رسالة الخطأ البعض يحاول عمل Requery/Refresh لكن الجدول كبير مما قد يؤثر على الكفاءة، إذن Refresh للسطر الحالي Recordset.Resync(adAffectCurrent, adResyncAllValues) قد يعمل في بعض الحالات، لكنه يؤدي إلى مزالق أخرى... الحل -من الأحسن- أن نخبر ADO بإعادة جلب البيانات عند كل: تعديل/إضافة/تغير قيمة الحقل التلقائي: PHP كود : procedure TForm1.ADODataSet1AfterOpen(DataSet: TDataSet);القيمة الافتراضية للبرامتر Update Resync هي adResyncAutoIncrement فقط. الحدث المناسب هنا عند فتح الجدول OnAfterOpen. هذه الطريقة تعمل فقط على وضع الاتصال: CursorLocation := clUseClient في المرفق الأول مثال حقول يحمل قيمة افتراضية في جدول Access 2007 وصالح مع حقول حسابي Computed Column على SQL Server. يتبع... |