Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
ВнизКак сделать выборку данных без удаленных записей? Найти похожие ветки
← →
AlexVit (2003-04-02 09:36) [0]Я всех приветствую!
Искал в Help"e, FAQ"е и через поиск: ответа не нашел, наверное,
плохо искал... :-)
Проблема вот в чем.
Работаю с dbf-таблицами через ADO. При использовании TADOQuery выбираются все записи согласно запросу, в т.ч. и удаленные, так как они в dbf-ах физически не удаляются, а мне нужна выборка без этих удаленных записей. DbiPackTable применять после удаления каждой записи не могу, так как база очень большая и долго будет перестраиваться таблица. Ответ должен быть (наверное) простой, но я его, к сожалению, не нашел. Кто может подсказать, тому буду премного благодарен.
← →
sniknik (2003-04-02 10:43) [1]смотри значение в реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase
Deleted -> //по дефаулту 1 (выключено), у тебя видать сбилось
Двоичный индикатор, определяющий обработку ядром Microsoft Jet записей, отмеченных как удаленные. Значение 01 соответствует команде dBASE SET DELETED ON и отключает загрузку или позиционирование удаленных записей. Значение 00 соответствует команде dBASE SET DELETED OFF и указывает, что удаленные записи обрабатываются так же, как все остальные. По умолчанию задается значение 00. Значения имеют тип Binary в Windows 95 и Windows NT 4.0 или тип REG_BINARY в Windows NT 3.51.
(хотя я чего подумал, а если ты не Jet используеш? тогда иши сам, раз не указываеш.)
← →
AlexVit (2003-04-02 11:19) [2]
> (хотя я чего подумал, а если ты не Jet используеш? тогда
> иши сам, раз не указываеш.)
Не совсем понял, при чем тут Jet. Насколько я знаю (сам использовал) Jet применяется только для работы с mdb. А я пользую dbf через ODBC. По-моему, и ядро Jet также с dbf работает через ODBC.
← →
Соловьев (2003-04-02 11:27) [3]тогда посмотри в настройках ODBC? там есть настройка чтобы не показывать кдаленные записи.
← →
sniknik (2003-04-02 11:35) [4]AlexVit © (02.04.03 11:19)
глубоко заблуждаешся. Jet имеет свой маленький встроенный BDE.
а вообше драйверов для dbf много (очень много), и тех что ADO может использовать тоже. (у меня на компе 5штук установлены, кто может с ним работать) и это далеко не все.
← →
sniknik (2003-04-02 11:36) [5]и самое главное забыл. у всех разные настройки!
← →
AlexVit (2003-04-02 11:49) [6]
> sniknik ©
Приведи, если не трудно, рабочий пример ConnectionString"а для работы c dbf-файлом через Jet (4.0, к примеру), тогда я буду убежден, что глубоко заблуждаюсь...
← →
AlexVit (2003-04-02 11:55) [7]
> глубоко заблуждаешся. Jet имеет свой маленький встроенный
> BDE.
Небольшая поправка. Jet не имеет BDE (Borland Database Engine), Jet - это сам по себе движок, аналог BDE от Microsoft (если можно так выразиться), насколько я знаю...
← →
sniknik (2003-04-02 12:07) [8]AlexVit © (02.04.03 11:55)
не буду спорить (здесь на этом поприще уже немало копий было сломано), скажу скромно, я прав читай хелпы :о))
AlexVit © (02.04.03 11:49)
нет проблем
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=dBase IV;Persist Security Info=False
(посмотреть какую dll использует можно в реестре, приводилось)
← →
Пубертанец (2003-04-02 12:22) [9]А как программно узнать, удалена ли запись в dbf?
← →
Соловьев (2003-04-02 12:27) [10]есть функция в BDE:
dbiSetProp
с параметрами
Parameters
hObj Type: hDBIObj (Input)
Specifies the object handle to a system, client, session, driver, database, cursor, or statement object.
iProp Type: UINT32 (Input)
Specifies the property to set.
iPropValue Type: UINT32 (Input)
Specifies the value of the property.
← →
Anatoly Podgoretsky (2003-04-02 12:32) [11]sniknik © (02.04.03 12:07)
Одназначно при такой строке подключения будет использовать BDE драйвер MSX BDE40.DLL
Там же в реестре для этого драйвере есть и настройки по Deleted
← →
AlexVit (2003-04-02 12:41) [12]Проверил, работает. Признаю, что глубоко заблуждался. Ты прав, а я пошел читать хелпы :-)))
← →
sniknik (2003-04-02 13:01) [13]ну за то что признаеш, подарок :о)). то что ты скорее всего использовал, делается так
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=D:\;DefaultDir=D:\;DriverId=277;FIL=dBase 4.0;MaxBufferSize=2048;PageTimeout=5; DELETED=1"
← →
AlexVit (2003-04-02 14:31) [14]
> sniknik ©
Поковырял и вот чего наковырял: если использовать file DSN, то тогда изменение значения DELETED в ConnectionString работает без проблем, но если используешь system DSN или user DSN, то изменение значения DELETED в самой строке ConnectionString эффекта не дает. Для этих вариантов (system DSN или user DSN) работает только изменение значения DELETED напрямую в реестре (это можно сделать также и через BDE Administrator).
Вот такие пироги.
← →
sniknik (2003-04-02 14:52) [15]где ты у меня видиш DSN в строке?
DRIVER={Microsoft dBase Driver (*.dbf)};
и не нужно никаких BDE Administrator-ов, и настройки через строку наиболее полные. (ну и хотя бы в ODBC правил ODBCшные алиасы (они как раз для того чтобы руками настройки задавать см. пример), а то смысл использовать ADO микрософтские драйвера ... и настраивать в BDE Administrator-е?)
строка с DNS включающая все что нужно
Provider=MSDASQL.1;Extended Properties="DSN=dBASE Files;"
← →
AlexVit (2003-04-02 15:15) [16]
> sniknik ©
Я не сказал, что видел у тебя DSN, я сказал "если использовать DSN". В твоем примере ConnectionString"а все работает нормально, но если использовать DSN, то начинается путаница с Deleted, см. выше...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c