Проблема при работе с файлами dBase
Добавлено: 11 янв 2005, 09:51
Уважаемые коллеги, помогите, пожалуйста !
Сочинил программу на Delphi 5, работающую с файлами dBase. Записи в базе редактируются не непосредственно в базе, а сначала поля из записи считываются в переменные, редактируются, потом новые значения переменных присваиваются полям в базе с помощью методов ...ADOTable.FieldByName('...').AsString := ... и пересылаются в файл методом ADOTable.UpdateBatch (программа предназначена для работы с базой в сети)
Проблема в следующем. Если есть пустые переменные, соответствующие текстовым полям, то при первом сохранении метод срабатывает нормально. Если сразу же вызвать эту запись на редактирование еще раз и даже, ничего не изменяя, сохранить, то генерируется исключение: "Row cannot be located for updating. Some values may have been changed since it was last read". ("Не могу найти строку для обновления. Некоторые значения были изменены с момента последнего чтения"). Если все текстовые переменные содержат какие-либо значения, то запись подряд можно редактировать и сохранять сколько угодно.
Также не работает метод поиска по пустому значению текстового поля ...ADOTable.Locate('...', ' ', []) (хоть задавай пустое значение для поиска - '', хоть напиши туда количество пробелов, соответствующее длине поля в базе).
Может быть что-то я делаю не так, или нужны какие-либо специальные настройки, о которых я не знаю ? Дело в том, что это мой первый опыт работы с Delphi и нужно мне именно Delphi 5 ???
Дополнительно - информация об исползьзуемом соединении и провайдере:
ADOConnection.ConnectionString:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=Файлы dBASE;Mode=ReadWrite
куда я затем программно подставляю путь к файлам с данными.
Заранее спасибо всем, кто примет участие в решении моих проблем.
[/u]
Сочинил программу на Delphi 5, работающую с файлами dBase. Записи в базе редактируются не непосредственно в базе, а сначала поля из записи считываются в переменные, редактируются, потом новые значения переменных присваиваются полям в базе с помощью методов ...ADOTable.FieldByName('...').AsString := ... и пересылаются в файл методом ADOTable.UpdateBatch (программа предназначена для работы с базой в сети)
Проблема в следующем. Если есть пустые переменные, соответствующие текстовым полям, то при первом сохранении метод срабатывает нормально. Если сразу же вызвать эту запись на редактирование еще раз и даже, ничего не изменяя, сохранить, то генерируется исключение: "Row cannot be located for updating. Some values may have been changed since it was last read". ("Не могу найти строку для обновления. Некоторые значения были изменены с момента последнего чтения"). Если все текстовые переменные содержат какие-либо значения, то запись подряд можно редактировать и сохранять сколько угодно.
Также не работает метод поиска по пустому значению текстового поля ...ADOTable.Locate('...', ' ', []) (хоть задавай пустое значение для поиска - '', хоть напиши туда количество пробелов, соответствующее длине поля в базе).
Может быть что-то я делаю не так, или нужны какие-либо специальные настройки, о которых я не знаю ? Дело в том, что это мой первый опыт работы с Delphi и нужно мне именно Delphi 5 ???
Дополнительно - информация об исползьзуемом соединении и провайдере:
ADOConnection.ConnectionString:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=Файлы dBASE;Mode=ReadWrite
куда я затем программно подставляю путь к файлам с данными.
Заранее спасибо всем, кто примет участие в решении моих проблем.
[/u]