----Masalah 2 dan solusinya
Selain konten dalam file ISO, setiap record dalam tabel yang diimpor juga memerlukan jenis buku, nomor penerbitan, dan nomor ID. Oleh karena itu, saat memasukkan record baru, TPgCSV hanya memproses field yang terkait dengan data dalam file teks , ,Isi kolom ini perlu kita tambahkan sendiri. Tentu saja, wajar untuk memikirkan acara AfterInsert di Tabel. Tetapi masalahnya adalah Tabel saya ada di unit DataModule, dan saya harus meneruskan parameter ke acara AfterInsert. Pada saat yang sama, pemrosesan seperti itu akan menyebabkan kekacauan pemeliharaan. Peristiwa yang terjadi di suatu unit harus sebisa mungkin ditangani oleh fungsi atau prosedur di unit tersebut. Jadi, saya berpikir untuk menulis proses pemrosesan di unit saat ini, dan kemudian menetapkan proses ini ke acara AfterInsert pada Tabel saat program sedang berjalan, dan kemudian menonaktifkannya setelah impor selesai. Berhasil, tapi tetap saja merepotkan! Karena Anda akan menghadapi masalah seperti itu dalam banyak kasus, mengapa tidak menyelesaikannya sekaligus dan merangkum kejadian ini.
Sama seperti pertanyaan ke 1, disini kita masih memerlukan proses penanganan event AfterInsert. Dimanakah yang harus ditambahkan kali ini?
Prosedur TPgCSV.CSVToDataSet;
mulai
…
FDataset.DisableControls;
while (bukan Eof(FFile)) dan (bukan FStop) lakukan
mulai
//baca dari CSV
Readln(FFile,RecordString);
//modifikasi xm4014
jika Ditugaskan(FRegulateString) lalu
FRegulateString(diri,RecordString);
//tambahkan catatan baru
mencoba
FDataset.Tambahkan;
//Harus ditambahkan di sini!
//modifikasi xm4014
jika Ditugaskan(FAfterInsert) lalu
AfterInsert(mandiri,FDataset);
…
untuk i:=1 hingga CountMapItems lakukan
…
akhir;
Demikian pula, deklarasi peristiwa baru dan atribut peristiwa perlu didefinisikan di sini, karena parameter FDataSet perlu diteruskan. Untuk kode deklarasi, lihat penggunaan kontrol Delphi (2) (http://www.csdn. net/develop/read_article.asp?id=11855).
Setelah mengkompilasi ulang kontrol, Anda dapat menambahkan kode di acara AfterInsert untuk menetapkan nilai pada jenis buku, nomor terbitan, dan nomor ID.
---- Masalah 3 dan solusinya
Masalah yang melibatkan database kini telah terpecahkan. Namun masih ada masalah tampilan. Program ini memerlukan penggunaan ProgressBar untuk menampilkan kemajuan impor file ISO sebelum diimpor, yaitu properti yang mirip dengan RecordCount. Tetapi tidak ada properti seperti itu di TPgCSV.
Kalau begitu mari tambahkan atribut seperti ini
//modifikasi xm4014
properti CSVRecordCount : bilangan bulat baca FCSVRecordCount tulis FCSVRecordCount default 0;
Bagaimana cara memberikan nilai padanya? Ini sangat sederhana. Anda dapat menggunakan ReadLn(F) untuk memindai file ISO, dan kemudian mengumpulkan jumlah pemindaian.
Kuncinya adalah di mana melakukan pemrosesan ini. Tentunya, untuk file yang sama, pekerjaan tersebut hanya perlu dilakukan satu kali. Karena statistik perlu dihitung ulang untuk file yang berbeda, kita dapat memindai file teks setiap kali kita menyetel atribut nama file.
Oke, cari atribut nama file TPgCSV
properti CSVFile: string baca FCSVFile tulis FCSVFile;
Buat beberapa modifikasi kecil
deklarasi properti baru
properti CSVFile: string baca FCSVFile tulis SetCSVFile;
Tekan Ctrl+shift+c untuk menulis kode metode SetCSVFile sebagai berikut
prosedur TPgCSV.SetFCSVFile(Nilai const: string);
var
F1:File Teks;
iHitungan: bilangan bulat;
mulai
jika FCSVFile<>Nilai lalu
mulai
File FCSV := Nilai;
//Segera setelah nama file diubah, pindai ulang dan ubah nilai FCSVRecordCount.
jika FileExists(Nilai) maka
mulai
AssignFile(F1, Nilai);
Atur Ulang (F1);
iHitungan:=0;
sementara bukan Eof(F1) lakukan
mulai
BacaLn(F1);
Inc(iHitungan);
akhir;
FCSVRecordCount:=iCount;
akhir;
akhir;
akhir;
Setelah kompilasi, kita dapat memanggil properti CSVRecordCount dengan aman untuk mendapatkan nilai rekaman sebelum operasi impor:
Bilah Kemajuan1.Min :=0;
ProgressBar1.Max:=PgCSV1.CSVRecordCount;
Program di atas lolos debugging di Delphi 6.0/Win98
Pada titik ini, saya pada dasarnya sudah selesai. Sebenarnya, saya dapat menghitung perubahan yang telah saya buat dengan jari saya. Tapi itu hanya peningkatan kecil yang membuat saya merasa lebih nyaman untuk menggunakannya lagi lain kali. Saat saya menggunakannya, saya akan semakin menyadari nilainya. Dan setelah analisis dan modifikasi seperti itu, saya telah membuat banyak kemajuan, beberapa tetes lebih dari setengah sendok, haha! Perlu dicatat bahwa TPgCSV adalah kontrol sederhana. Ia tidak memiliki hubungan yang sangat rumit dan tidak melibatkan pemanggilan konten inti VCL, jadi tidak perlu terlalu khawatir saat memodifikasinya adalah hubungan hierarki yang sangat kompleks , Anda perlu memikirkan dengan hati-hati setiap baris kode yang Anda tambahkan atau modifikasi, jika tidak, hal itu dapat mempengaruhi keseluruhan tubuh, dan pada akhirnya akan sulit untuk kembali lagi. Oleh karena itu, prinsip penggunaan yang saya sebutkan sebenarnya didasarkan pada mengontrol fungsinya sendiri tanpa perubahan apa pun dalam konten substantif. Untuk mencapai keadaan melakukan apapun yang Anda inginkan, semua orang (termasuk saya) harus terus bekerja keras! (Lampiran: Alamat unduhan TPgCSV http://www.internet-bj.com/delphikongjian.asp?id=2 )