----問題2と解決策
ISO ファイルの内容に加えて、インポートされたテーブルの各レコードには書籍の種類、発行番号、ID 番号も必要です。そのため、TPgCSV はテキスト ファイルのデータに関連するフィールドのみを処理します。 、 、これらのフィールドの内容は自分で追加する必要があります。言うまでもなく、Table の AfterInsert イベントを考えるのは自然なことですが、問題は、Table が DataModule ユニット内にあるため、AfterInsert イベントにパラメータを渡さなければならないことです。同時に、そのような処理はメンテナンスの混乱を引き起こします。ユニット内で発生するイベントは、可能な限りそのユニット内の関数または手順で処理する必要があります。そこで、カレントユニットに処理プロセスを記述し、プログラム実行時にTableのAfterInsertイベントにこの処理を割り当て、インポート完了後に無効化することを考えました。うまくいきますが、それでも面倒です!ほとんどの場合、このような問題に遭遇するので、それをすぐに解決して、このインシデントを要約してみてはいかがでしょうか。
質問 1 と同様に、ここでも AfterInsert のイベント処理プロセスが必要です。これは一目でわかります。
プロシージャ TPgCSV.CSVToDataSet;
始める
…
FDataset.DisableControls;
while (Eof(FFile) ではない) と (FStop ではない) は実行します
始める
//CSVから読み取る
Readln(FFile,RecordString);
//xm4014の修正
割り当て済み(FRegulateString)の場合
FRegulateString(self,RecordString);
// 新しいレコードを追加
試す
FDataset.Append;
//ここに追加する必要があります!
//xm4014の修正
割り当て済み(FAfterInsert)の場合
AfterInsert(self,FDataset);
…
for i:=1 から CountMapItems まで
…
終わり;
同様に、FDataSet のパラメータを渡す必要があるため、ここで新しいイベント宣言とイベント属性を定義する必要があります。宣言コードについては、 Delphi コントロールの使用 (2) (http://www.csdn. net/develop/read_article.asp?id=11855)。
コントロールを再コンパイルした後、AfterInsert イベントにコードを追加して、書籍の種類、発行番号、ID 番号に値を割り当てることができます。
----問題3と解決策
データベースに関する問題は解決されましたが、プログラムではインポートの進行状況を表示するために ProgressBar を使用する必要があり、レコード数を知る必要があります。インポート前の ISO ファイル、つまり RecordCount に似たプロパティですが、TPgCSV にはそのようなプロパティはありません。
次に、このような属性を追加しましょう
//xm4014の修正
プロパティ CSVRecordCount : 整数 読み取り FCSVRecordCount 書き込み FCSVRecordCount デフォルト 0;
値を割り当てる方法は非常に簡単です。ReadLn(F) を使用して ISO ファイルをスキャンし、スキャン数を蓄積します。
重要なのは、この処理をどこで実行するかです。同じファイルに対して、このような作業は 1 回だけ行う必要があります。統計はファイルごとに再計算する必要があるため、ファイル名属性を設定するたびにテキスト ファイルをスキャンできます。
OK、TPgCSVのファイル名属性を見つけます
プロパティ CSVFile: 文字列 FCSVFile 読み取り FCSVFile 書き込み;
いくつかの小さな変更を加えます
新しいプロパティの宣言
プロパティ CSVFile: 文字列 FCSVFile の読み取り SetCSVFile の書き込み;
Ctrl+shift+c を押して SetCSVFile のメソッドコードを次のように記述します。
プロシージャ TPgCSV.SetFCSVFile(const 値: string);
変数
F1:テキストファイル;
iCount:整数;
始める
if FCSVFile<>Value then
始める
FCSVファイル := 値;
//ファイル名が変更されたらすぐに再スキャンし、 FCSVRecordCount の値を変更します。
FileExists(Value) の場合
始める
AssignFile(F1, 値);
リセット(F1);
iCount:=0;
Eof(F1) ではありませんが、
始める
ReadLn(F1);
Inc(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 )