Понадобилось мне иипользовать dbf, в инете нашел пример, сильно переделывать не стал. В свой проект добавил неободимые компонены и на обработчик кнопки повесил следующее:
- Код: Выделить всё
WorkDir:=ExtractFilePath(ParamStr(0));
DateTimeToString(RDate,'dd-mm-yyyy',now);
If DirectoryExists (WorkDir+'RNews')=false then ForceDirectories(WorkDir+'RNews');
//начальные установки:
MyDBF.Exclusive:= True; //необходимо для изменения установок
MyDBF.FilePath:= WorkDir+'RNews'; //таблица там же, где программа
MyDBF.TableName:= rdate+'.dbf'; //имя файла таблицы
MyDBF.IndexName:= rdate+'.ndx'; //имя индексного файла
MyDbf.TableLevel:= 7; //тип таблицы Visual DBase VII
//если таблицы нет - делаем её и индексный файл:
if not FileExists(WorkDir+'RNews\' + rdate+'.dbf') then begin
//устанавливаем поля и создаем таблицу:
with MyDBF.FieldDefs do begin
Add('ID', ftAutoInc, 0, True);
Add('ID_RS', ftString, 10, True);
Add('Date', ftString, 20, True);
Add('News', ftString, 200, True);
Add('Link', ftString, 200, True);
Add('approve', ftBoolean, 0, False);
end;
MyDBF.CreateTable;
MyDBF.Open;
//устанавливаем и создаем индексы:
MyDBF.AddIndex(rdate+'.ndx', 'ID', [ixPrimary, ixUnique]);
end
else begin //если таблица есть, просто открываем её и подгружаем индексы
MyDBF.Open;
MyDBF.OpenIndexFile(rdate+'.ndx');
end;
При нажатии на кнопку таблица создается, если она есть открывается, заполняется данными, все ок.
Но при повтороном нажатии на кнопку вылетает ошибка, оно и понятно, потому как второй раз открывается БД, которая уже открыта. Поэтому решено было это код перекинуть в событие формы OnCreate
И вот тут самое интересное, при запуске приложения, при открытии формы вылетает ошибка Unable open file и указан путь к моему файлу dbf.
Пробовал удалять созданные таблицы, запускаю приложение - то же самое.
Ладно, вернул код в обработчик кнопки, запускаю, жму кнопку ошибка list of bounds
Но как? Но почему? Ведья просто перенес кусок кода Удалил дбгрид, поставил его заново - через кнопку все заработало...
Сделал тоже самое, перекинул код в событие открытия формы, удалил таблицы, удалил дбгрид - не помогло, ошибка таже не могу открыть файл.
Ну чтобы не возится с основным проектом, создал тестовую софтину, где только вышеприведенный код, поместил его в событие открытие формы - работает!
Я немного не понимаю, почему так? Куда копать?
PS: Причем если в диалоге ошибки нажать ОК, то программа продолжает работать, данные в таблицу заносятся и нет никакх проблем. Но почему то в моей основной программе ошибка открытия файла на этапе открытия формы, а втестовой ошибки нет... вобщем странно все это