Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-67464
Карлсон
2003-04-03 22:38
2003.04.21
макулатура


4-67613
_toltec
2003-02-17 14:48
2003.04.21
Функция из чужого процесса


4-67615
{{{KOTOS}}}
2003-02-12 13:01
2003.04.21
как мне поймать клик мыши в windows а не в ФОрме?


3-67160
Alex_t
2003-04-02 20:57
2003.04.21
про Interbase


3-67176
yuras
2003-04-03 16:28
2003.04.21
paradox 3.5 for dos





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский