----문제 2 및 해결책
ISO 파일의 내용 외에도 가져온 테이블의 각 레코드에는 새 레코드를 삽입할 때 텍스트 파일의 데이터와 관련된 필드만 처리됩니다. , ,이 필드의 내용은 직접 추가해야 합니다. 말할 필요도 없이 Table의 AfterInsert 이벤트를 생각하는 것은 당연합니다. 그러나 문제는 내 테이블이 DataModule 유닛에 있고 AfterInsert 이벤트에 매개 변수를 전달해야 한다는 것입니다. 동시에, 그러한 처리는 유지 관리 혼란을 야기할 수 있습니다. 유닛에서 발생하는 이벤트는 가능한 한 이 유닛의 기능이나 절차에 의해 처리되어야 합니다. 그래서 현재 유닛에 처리 프로세스를 작성하고, 프로그램이 실행 중일 때 Table의 AfterInsert 이벤트에 이 프로세스를 할당하고, 가져오기가 완료된 후에는 비활성화하자는 생각을 했습니다. 작동하지만 여전히 문제가 많습니다! 대부분의 경우 이러한 문제에 직면하게 되므로 즉시 해결하고 이 사건을 요약해 보는 것은 어떨까요?
질문 1과 동일합니다. 여기서는 AfterInsert 이벤트 처리 프로세스가 필요합니다. 이번에는 어디에 추가해야 할까요?
PROcedure TPgCSV.CSVToDataSet;
시작하다
…
FDataset.DisableControls;
while (Eof(FFile) 아님) 및 (FStop 아님) do
시작하다
//CSV에서 읽기
Readln(FFile,RecordString);
//xm4014의 수정
할당된 경우(FRegulateString) 다음
FRegulateString(self,RecordString);
//새 레코드 추가
노력하다
FDataset.Append;
//여기에 추가해야 합니다!
//xm4014의 수정
할당된 경우(FAfterInsert) 다음
AfterInsert(self,FDataset);
…
i:=1에서 CountMapItems가 수행하는 작업
…
끝;
마찬가지로 FDataSet의 매개변수를 전달해야 하므로 여기에서 새로운 이벤트 선언과 이벤트 속성을 정의해야 합니다. 선언 코드는 Delphi 컨트롤 사용(2) (http://www.csdn. net/develop/read_article.asp?id=11855).
컨트롤을 다시 컴파일한 후 AfterInsert 이벤트에 코드를 추가하여 책 유형, 발행 번호 및 ID 번호에 값을 할당할 수 있습니다.
----문제 3 및 해결책
이제 데이터베이스와 관련된 문제가 해결되었습니다. 하지만 여전히 표시 문제가 있습니다. 프로그램에서 가져오기 진행률을 표시하려면 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(const 값: 문자열);
var
F1:텍스트파일;
iCount:정수;
시작하다
FCSVFile<>값이면
시작하다
FCSV파일 := 값;
//파일 이름이 변경되는 즉시 재검색하여 FCSVRecordCount 값을 변경합니다.
FileExists(값)이면
시작하다
AssignFile(F1, 값);
재설정(F1);
아이카운트:=0;
Eof(F1)이 아닌 동안
시작하다
ReadLn(F1);
Inc(아이카운트);
끝;
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 )