Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2012, 14:55   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Locate и удаленные записи в DBF

Всем привет.
В программе загружаю dbf-файл и далее в цикле брожу по этому файлу:
Код:
if locate(...) then //сделать что-то
BDE не установлена (клиентов не стоит грузить лишним софтом). DBF-файл пробовал загружать в разные компоненты, работающие без BDE, а именно
TDsDbfTable - в нем свойство ShowDeleted устанавливаю в False
TVKDBFNTX - в нем свойство SetDeleted устанавливаю в False
и т.п.
В гриде все ок, удаленных записей не видно, но если сделать Locate() на удаленную запись - она становится видимой и курсор перемещается на нее (странно, что я раньше этого не знал), т.е. Locate становится True (кстати, RecordCount датасета почему-то не изменяется).
Как победить удаленные записи в dbf? Гугл не помог.

PS. Упаковку таблицы не предлагать, часто ломает файл и бухгалтерия ругается матом.
_SERGEYX_ вне форума Ответить с цитированием
Старый 16.03.2012, 18:26   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ADOQuery не пробовали? Можно SQL-запросом с MSDASQL, Jet OLEDB или Visual FoxPro провайдером. Зависит от кодировки и наличия встроенного CDX. Удалять также SQL. C этими провайдерами и ADOTable отработает, но насчет видимости удаленных не скажу, не пробовал. Можно настройку провайдеров здесь посмотреть
http://programmersforum.ru/showthread.php?t=158173
Visual FoxPro провайдер правда ставить нужно, зато первые два всегда в наличии
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.03.2012 в 18:53.
Аватар вне форума Ответить с цитированием
Старый 16.03.2012, 23:28   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Аватар, спасибо за идею с ADO, буду пробовать.
Удалять из dbf-файлов ничего не нужно. Редактировать тоже.
Только делать locate и выбирать нужные значения из полей.
Я уже думал делать таким образом:
- загружаю dbf-файл в какой-нибудь TDBFTable, разумеется, без удаленных записей
- циклом перегоняю всю эту таблицу в таблицу в памяти и потом делаю locate по таблице в памяти.
Способ, конечно, не очень красивый, но там этих локейтов штук 80 написано. Очень не хочется их все переписывать вручную
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск единственной записи через locate ИВэТэшка Помощь студентам 3 10.04.2009 15:21
Экспорт записи в *.dbf файл Galgi БД в Delphi 2 20.02.2008 07:02
Как из dbf перенести все записи в определенную позицию? Askat БД в Delphi 3 03.07.2007 12:13
Удаление записи из *.dbf BJF.41 БД в Delphi 4 15.03.2007 18:29
удалить записи в таблице Dbf. pups БД в Delphi 7 15.12.2006 19:19