---- المشكلة 2 والحل
بالإضافة إلى المحتوى الموجود في ملف ISO، يحتاج كل سجل في الجدول المستورد أيضًا إلى نوع الكتاب ورقم الإصدار ورقم المعرف. عند إدراج سجل جديد، يقوم TPgCSV بمعالجة الحقول المتعلقة بالبيانات الموجودة في الملف النصي فقط ,يجب إضافة محتوى هذه الحقول بأنفسنا. وغني عن القول أنه من الطبيعي التفكير في حدث AfterInsert في الجدول، ولكن المشكلة هي أن الجدول الخاص بي موجود في وحدة DataModule، ويجب علي تمرير المعلمات إلى حدث AfterInsert. وفي الوقت نفسه، ستتسبب هذه المعالجة في حدوث فوضى في الصيانة، ويجب التعامل مع الأحداث التي تحدث في الوحدة من خلال الوظائف أو الإجراءات في هذه الوحدة قدر الإمكان. لذلك، فكرت في كتابة عملية معالجة في الوحدة الحالية، ثم تخصيص هذه العملية لحدث AfterInsert الخاص بالجدول عند تشغيل البرنامج، ثم تعطيلها بعد اكتمال الاستيراد. إنه يعمل، لكنه لا يزال مزعجًا! وبما أنك ستواجه مثل هذه المشكلة في أغلب الأحيان، فلماذا لا تحلها على الفور وتلخص هذه الحادثة.
تمامًا كما هو الحال مع السؤال 1، ما زلنا بحاجة إلى عملية معالجة الحدث AfterInsert، أين يجب إضافتها هذه المرة؟
الإجراء TPgCSV.CSVToDataSet;
يبدأ
…
FDataset.DisableControls;
بينما (ليس Eof(FFile)) و(ليس FStop) يفعلان ذلك
يبدأ
// اقرأ من ملف CSV
Readln(FFile,RecordString);
// تعديل xm4014
إذا تم تعيينه (FRegulateString) بعد ذلك
FRegulateString(self,RecordString);
// إضافة سجل جديد
يحاول
FDataset.Append;
// يجب إضافتها هنا!
// تعديل xm4014
إذا تم تعيينه (FAfterInsert) بعد ذلك
AfterInsert(self,FDataset);
…
لأني:=1 للقيام بـ CountMapItems
…
نهاية؛
وبالمثل، يجب تعريف إعلانات الأحداث وسماتها الجديدة هنا، لأن معلمات FDataSet تحتاج إلى تمريرها للحصول على رمز الإعلان، يرجى الرجوع إلى استخدام عناصر تحكم دلفي (2) (http://www.csdn. net/develop/read_article.asp?id=11855).
بعد إعادة ترجمة عنصر التحكم، يمكنك إضافة رمز في حدث AfterInsert لتعيين قيم لنوع الكتاب ورقم الإصدار ورقم المعرف.
---- المشكلة 3 والحل
لقد تم الآن حل المشكلات المتعلقة بقاعدة البيانات، ولكن لا تزال هناك مشكلة في العرض. ويتطلب البرنامج استخدام ProgressBar لعرض تقدم عملية الاستيراد. ولتحديد قيمة ProgressBar.Max، أحتاج إلى معرفة عدد السجلات الموجودة ملف ISO قبل الاستيراد، وهو خاصية مشابهة لـ RecordCount ولكن لا توجد مثل هذه الخاصية في TPgCSV.
ثم دعونا نضيف سمة مثل هذا
// تعديل xm4014
الخاصية CSVRecordCount: قراءة عدد صحيح FCSVRecordCount كتابة FCSVRecordCount الافتراضي 0؛
كيفية تعيين قيمة لها؟ الأمر بسيط للغاية. يمكنك استخدام ReadLn(F) لمسح ملف ISO، ومن ثم تجميع عدد عمليات الفحص.
المفتاح هو مكان إجراء هذه المعالجة. ومن الواضح أنه بالنسبة لنفس الملف، يجب إجراء هذا العمل مرة واحدة فقط. وبما أن الإحصائيات تحتاج إلى إعادة حسابها لملفات مختلفة، فيمكننا فحص الملف النصي في كل مرة نقوم فيها بتعيين سمة اسم الملف.
حسنًا، ابحث عن سمة اسم الملف لـ TPgCSV
الخاصية CSVFile: قراءة السلسلة FCSVFile والكتابة FCSVFile؛
قم بإجراء بعض التعديلات الصغيرة
إعلان الملكية الجديدة
الخاصية CSVFile: قراءة السلسلة FCSVFile والكتابة SetCSVFile؛
اضغط على Ctrl+shift+c لكتابة رمز طريقة SetCSVFile كما يلي
الإجراء TPgCSV.SetFCSVFile(قيمة ثابتة: سلسلة);
فار
F1: ملف نصي؛
iCount:عدد صحيح;
يبدأ
إذا كانت قيمة FCSVFile <> إذن
يبدأ
FCSVFile := Value;
// بمجرد تغيير اسم الملف، قم بإعادة المسح وتغيير قيمة FCSVRecordCount.
إذا كان FileExists(Value) إذن
يبدأ
AssignFile(F1, Value);
إعادة تعيين(F1);
iCount:=0;
بينما لا تفعل Eof(F1).
يبدأ
قراءةLn(F1);
شركة(iCount);
نهاية؛
FCSVRecordCount:=iCount;
نهاية؛
نهاية؛
نهاية؛
بعد التجميع، يمكننا استدعاء خاصية CSVRecordCount بأمان للحصول على قيمة السجل قبل عملية الاستيراد:
ProgressBar1.Min :=0;
ProgressBar1.Max:=PgCSV1.CSVRecordCount;
اجتاز البرنامج أعلاه تصحيح الأخطاء ضمن Delphi 6.0/Win98
في هذه المرحلة، انتهيت في الواقع، يمكنني حساب التغييرات التي أجريتها على أصابعي، لكنها ترقية صغيرة تجعلني أشعر براحة أكبر عند استخدامها في المرة القادمة عندما أستخدمه، سأدرك قيمته أكثر فأكثر، وبعد هذا التحليل والتعديل، أحرزت تقدمًا كبيرًا، بضع قطرات أكثر من نصف مغرفة، هاها! تجدر الإشارة إلى أن TPgCSV عبارة عن عنصر تحكم بسيط، ولا يحتوي على علاقات معقدة للغاية ولا يتضمن استدعاء المحتوى الأساسي لـ VCL، لذلك لا داعي للقلق كثيرًا عند تعديله هي علاقة هرمية معقدة للغاية ، عليك أن تفكر جيدًا في كل سطر من التعليمات البرمجية تضيفه أو تعدله، وإلا فقد يؤثر ذلك على الجسم بأكمله، وسيكون من الصعب الرجوع إليه في النهاية، لذلك فإن مبدأ استخدامه الذي ذكرته يعتمد فعليًا على السيطرة على وظائفها الخاصة دون أي تغييرات في المحتوى الموضوعي. لتحقيق حالة القيام بكل ما تريد، يجب على الجميع (بما فيهم أنا) مواصلة العمل الجاد! (المرفق: عنوان تنزيل TPgCSV http://www.internet-bj.com/delphikongjian.asp?id=2 )