----Проблема 2 и решение
В дополнение к содержимому файла ISO для каждой записи в импортированной таблице также требуется тип книги, номер выпуска и идентификационный номер. При вставке новой записи TPgCSV обрабатывает только поля, связанные с данными в текстовом файле. , ,Содержимое этих полей необходимо добавить самостоятельно. Разумеется, вполне естественно думать о событии AfterInsert в таблице. Но проблема в том, что моя таблица находится в модуле DataModule, и мне нужно передать параметры событию AfterInsert. В то же время такая обработка приведет к хаосу в обслуживании. События, происходящие в модуле, должны в максимально возможной степени обрабатываться функциями или процедурами этого модуля. Итак, я подумал написать процесс обработки в текущем модуле, а затем назначить этот процесс событию AfterInsert таблицы при запуске программы, а затем отключить его после завершения импорта. Это работает, но все равно хлопотно! Поскольку вы столкнетесь с такой проблемой в большинстве случаев, почему бы не решить ее сразу и не инкапсулировать этот инцидент.
Как и в вопросе 1, здесь нам по-прежнему нужен процесс обработки событий AfterInsert. Куда его добавить на этот раз? Это сразу видно:
ПРОЦЕДУРА TPgCSV.CSVToDataSet;
начинать
…
Фдатасет.Дисаблеконтролс;
while (не Eof(FFile)) и (не FStop) делают
начинать
//читаем из 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 можно добавить код для присвоения значений типу книги, номеру выпуска и идентификационному номеру.
----Проблема 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(const Value: string);
вар
F1: Текстовый файл;
iCount: целое число;
начинать
если FCSVFile<>Значение, то
начинать
FCSVFile := Значение;
//Как только имя файла будет изменено, повторно просканируем и изменяем значение FCSVRecordCount.
если FileExists(значение), то
начинать
НазначитьФайл(F1, Значение);
Сброс (F1);
iCount:=0;
пока не Eof(F1) делать
начинать
ЧитатьLn(F1);
Инк(iCount);
конец;
FCSVRecordCount:=iCount;
конец;
конец;
конец;
После компиляции мы можем безопасно вызвать свойство CSVRecordCount, чтобы получить значение записи перед операцией импорта:
ПрогрессБар1.Мин:=0;
ProgressBar1.Max:=PgCSV1.CSVRecordCount;
Вышеуказанная программа прошла отладку под Delphi 6.0/Win98.
На данный момент я в основном закончил. Фактически, я могу пересчитать изменения, которые я внес, но это всего лишь такое небольшое обновление, которое заставляет меня чувствовать себя более комфортно, используя его. снова в следующий раз. Когда я буду использовать его, я буду осознавать его ценность все больше и больше, и после такого анализа и модификаций я добился большого прогресса, на несколько капель больше половины мерной ложки, ха-ха! Следует отметить, что TPgCSV — это простой элемент управления. Он не имеет очень сложных связей и не требует вызова основного содержимого VCL, поэтому нет необходимости слишком беспокоиться при его изменении, когда задействован исходный код. это очень сложная иерархическая связь , вам нужно тщательно продумывать каждую строку кода, которую вы добавляете или изменяете, иначе это может повлиять на все тело, и в конечном итоге будет сложно вернуться назад. Поэтому упомянутый мной принцип использования на самом деле основан на . контролировать свои функции без каких-либо изменений в их содержательном содержании. Чтобы достичь состояния делать все, что хочешь, каждый (включая меня) должен продолжать упорно трудиться! (Приложение: адрес загрузки TPgCSV http://www.internet-bj.com/delphikongjian.asp?id=2 )