----ปัญหาที่ 2 และวิธีแก้ไข
นอกเหนือจากเนื้อหาในไฟล์ ISO แต่ละระเบียนในตารางที่นำเข้ายังต้องมีประเภทหนังสือ หมายเลขฉบับ และหมายเลข ID เมื่อแทรกระเบียนใหม่ TPgCSV จะประมวลผลเฉพาะฟิลด์ที่เกี่ยวข้องกับข้อมูลในไฟล์ข้อความเท่านั้น , ,จำเป็นต้องเพิ่มเนื้อหาของฟิลด์เหล่านี้ด้วยตัวเอง ไม่จำเป็นต้องพูดว่า เป็นเรื่องปกติที่จะนึกถึงเหตุการณ์ AfterInsert ใน Table แต่ปัญหาคือตารางของฉันอยู่ในหน่วย DataModule และฉันต้องส่งพารามิเตอร์ไปยังเหตุการณ์ AfterInsert! ในเวลาเดียวกัน การประมวลผลดังกล่าวจะทำให้เกิดความสับสนวุ่นวายในการบำรุงรักษา เหตุการณ์ที่เกิดขึ้นในหน่วยควรได้รับการจัดการโดยฟังก์ชันหรือขั้นตอนในหน่วยนี้ให้มากที่สุด ดังนั้นฉันจึงคิดที่จะเขียนกระบวนการประมวลผลในหน่วยปัจจุบัน จากนั้นกำหนดกระบวนการนี้ให้กับเหตุการณ์ AfterInsert ของ Table เมื่อโปรแกรมกำลังทำงาน จากนั้นจึงปิดการใช้งานหลังจากการนำเข้าเสร็จสิ้น มันใช้งานได้ แต่ก็ยังลำบากอยู่! เนื่องจากคุณจะพบปัญหาดังกล่าวในกรณีส่วนใหญ่ ทำไมไม่ลองแก้ไขในทันทีและสรุปเหตุการณ์นี้ไว้
เช่นเดียวกับคำถามที่ 1 เรายังต้องการกระบวนการจัดการเหตุการณ์ AfterInsert ในครั้งนี้ คุณสามารถดูได้อย่างรวดเร็ว:
ขั้นตอน TPgCSV.CSVToDataSet;
เริ่ม
-
FDataset.DisableControls;
ในขณะที่ (ไม่ใช่ Eof (FFile)) และ (ไม่ใช่ FStop) ทำ
เริ่ม
//อ่านจาก CSV
Readln(FFile,RecordString);
//การแก้ไขของ xm4014
ถ้าได้รับมอบหมาย (FRegulateString) แล้ว
FRegulateString(ตนเอง,RecordString);
//เพิ่มบันทึกใหม่
พยายาม
FDataset.ผนวก;
//ควรเพิ่มที่นี่!
//การแก้ไขของ xm4014
ถ้าได้รับมอบหมาย (FAfterInsert) แล้ว
AfterInsert(ตนเอง,FDataset);
-
สำหรับ i:=1 ถึง CountMapItems ทำ
-
จบ;
ในทำนองเดียวกัน จำเป็นต้องกำหนดการประกาศเหตุการณ์ใหม่และคุณลักษณะของเหตุการณ์ที่นี่ เนื่องจากจำเป็นต้องส่งผ่านพารามิเตอร์ของ FDataSet สำหรับรหัสการประกาศ โปรดดูที่ การใช้ตัวควบคุม Delphi (2) (http://www.csdn. net/develop/read_article.asp?id=11855)
หลังจากคอมไพล์ตัวควบคุมใหม่แล้ว คุณสามารถเพิ่มโค้ดในเหตุการณ์ AfterInsert เพื่อกำหนดค่าให้กับประเภทหนังสือ หมายเลขฉบับ และหมายเลขประจำตัว
----ปัญหาที่ 3 และวิธีแก้ไข
ปัญหาเกี่ยวกับฐานข้อมูลได้รับการแก้ไขแล้ว แต่ยังมีปัญหาในการแสดงผลอยู่ โปรแกรมต้องใช้ ProgressBar เพื่อแสดงความคืบหน้าในการนำเข้า ไฟล์ ISO ก่อนที่จะนำเข้านั่นคือคุณสมบัติที่คล้ายกับ RecordCount แต่ไม่มีคุณสมบัติดังกล่าวใน TPgCSV
จากนั้นมาเพิ่มแอตทริบิวต์เช่นนี้
//การแก้ไขของ xm4014
คุณสมบัติ CSVRecordCount : จำนวนเต็มอ่าน FCSVRecordCount เขียน FCSVRecordCount เริ่มต้น 0;
จะกำหนดค่าให้ได้อย่างไร มันง่ายมาก คุณสามารถใช้ ReadLn(F) เพื่อสแกนไฟล์ ISO แล้วสะสมจำนวนการสแกน
สิ่งสำคัญคือจะต้องดำเนินการประมวลผลที่ใด แน่นอนว่าสำหรับไฟล์เดียวกัน งานดังกล่าวจะต้องทำเพียงครั้งเดียวเท่านั้น เนื่องจากต้องมีการคำนวณสถิติใหม่สำหรับไฟล์ต่างๆ เราจึงสามารถสแกนไฟล์ข้อความได้ทุกครั้งที่เราตั้งค่าแอตทริบิวต์ชื่อไฟล์
ตกลง ค้นหาแอตทริบิวต์ชื่อไฟล์ของ TPgCSV
คุณสมบัติ CSVFile: สตริงอ่าน FCSVFile เขียน FCSVFile;
ทำการปรับเปลี่ยนเล็กน้อย
ประกาศทรัพย์สินใหม่
คุณสมบัติ CSVFile: สตริงอ่าน FCSVFile เขียน SetCSVFile;
กด Ctrl+shift+c เพื่อเขียนโค้ดวิธีการของ SetCSVFile ดังนี้
ขั้นตอน TPgCSV.SetFCSVFile (ค่า const: string);
var
F1:ไฟล์ข้อความ;
iCount: จำนวนเต็ม;
เริ่ม
ถ้า FCSVFile<>Value แล้ว
เริ่ม
FCSVFile := ค่า;
//ทันทีที่เปลี่ยนชื่อไฟล์ ให้สแกนอีกครั้งและเปลี่ยนค่าของ FCSVRecordCount
ถ้า FileExists(Value) แล้ว
เริ่ม
AssignFile(F1, ค่า);
รีเซ็ต(F1);
iCount:=0;
ในขณะที่ Eof(F1) ไม่ทำ
เริ่ม
อ่านเลน(F1);
Inc(iCount);
จบ;
FCSVRecordCount:=iCount;
จบ;
จบ;
จบ;
หลังจากการคอมไพล์ เราสามารถเรียกคุณสมบัติ CSVRecordCount ได้อย่างปลอดภัยเพื่อรับค่าบันทึกก่อนการดำเนินการนำเข้า:
ProgressBar1.Min :=0;
ProgressBar1.Max:=PgCSV1.CSVRecordCount;
โปรแกรมข้างต้นผ่านการดีบักภายใต้ Delphi 6.0/Win98
เมื่อถึงจุดนี้ ฉันทำเสร็จแล้ว จริงๆ แล้วฉันสามารถนับการเปลี่ยนแปลงที่ฉันทำบนนิ้วของฉันได้ แต่มันเป็นการอัพเกรดเล็กน้อยที่ทำให้ฉันรู้สึกสบายใจที่จะใช้มันอีกครั้ง คราวหน้าใช้แล้วจะรู้คุณค่าของมันมากขึ้นเรื่อยๆ และหลังจากวิเคราะห์ ดัดแปลง ก็คืบหน้าไปมาก หยดไปเกินครึ่งสกู๊ป 555 ควรชี้ให้เห็นว่า TPgCSV เป็นการควบคุมที่เรียบง่าย มันไม่มีความสัมพันธ์ที่ซับซ้อนมากและไม่เกี่ยวข้องกับการเรียกเนื้อหาหลักของ VCL ดังนั้นจึงไม่จำเป็นต้องกังวลมากเกินไปเมื่อแก้ไขมันเมื่อมีซอร์สโค้ดเข้ามาเกี่ยวข้อง เป็นความสัมพันธ์แบบลำดับชั้นที่ซับซ้อนมาก คุณต้องคิดให้รอบคอบเกี่ยวกับโค้ดทุกบรรทัดที่คุณเพิ่มหรือแก้ไข ไม่เช่นนั้น อาจส่งผลกระทบต่อทั้งเนื้อหา และสุดท้ายจะย้อนกลับได้ยาก ดังนั้น หลักการใช้ที่ผมกล่าวถึงจริงๆ จึงขึ้นอยู่กับ ควบคุมการทำงานของตนเองโดยไม่มีการเปลี่ยนแปลงเนื้อหาสาระใดๆ เพื่อให้บรรลุถึงสถานะของการทำสิ่งที่คุณต้องการ ทุกคน (รวมถึงฉันด้วย) จะต้องทำงานหนักต่อไป! (เอกสารแนบ: ที่อยู่ดาวน์โหลด TPgCSV http://www.internet-bj.com/delphikongjian.asp?id=2 )