Работа с БД "DBF"

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Работа с БД "DBF"

Сообщение sergey-911 » 14.07.2007 (Сб) 0:09

Доброго времени суток уважаемые. Пишу клиент-серверное приложение к БД “DBF”. Приложение предназначено для осуществления выборок, не более. Под “DBF” раньше не работал, только под MS SQL и под Access.
Писать приложение приходится прямо у клиента, т.к. БД предоставить на дом он не может (слишком личная информация). А я ещё на основной работе работаю, где нет инета (из-за политики безопасности), искать негде и некогда. В общем, запарка… Надеюсь, поймете…
Поделитесь плиз описанием, статейками, книгами и ещё чем-нибудь полезным по данной БД, желательно на русском языке. Пишите либо ссылки в топик, либо всё перечисленное в личку или на почту…
Также хочу спросить, есть ли CASE средства для данной БД, по какому принципу осуществляются связи таблиц в БД (целостность данных, есть ли внешние и внутренние ключи), есть ли какой-либо анализатор запросов, отличаются ли синтаксис запросов, по сравнению Access, может ли быть связан аксесовский файл с файлами “DBF”?
Пока сделал заполнение таблицы из файла “DBRPLATR.DBF”, через ADO. Работает, но иногда глючит. Почему – не знаю, ошибка синтаксиса и сортировки (особенно при первом подключении к новой БД).Возможно параметр подключения неправильно указал:
Код: Выделить всё
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=\\GTD\BD\ГТД;"

P.S. Простите за бестактность вопросов...

Делаю так:
Код: Выделить всё

Public View As String
View = "DBRPLATR.DBF"

Код: Выделить всё

Public Sub mnuFind_Click()
On Error GoTo Er
'Обновить
   
    'Заполняем таблицу
    Set TData1.SourceRecordset = Consts.Find("SELECT * FROM " & View)
   
Exit Sub
Er:
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub

Код: Выделить всё

Public Function Find(ByRef sql As String) As ADODB.Recordset
On Error GoTo Er
   
    Connect.Soedinenie = _
    "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=\\GTD\BD\ГТД;"
   
    Screen.MousePointer = vbHourglass
   
    'Подключение к БД
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open (Connect.Soedinenie)
   
    'Параметрический запрос
    'Обработка БД на VB6 стр. 500
    Dim cm As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim P As ADODB.Parameter
   
    'Создание и иниализация объекта Recordset
    Set rs = New ADODB.Recordset
    Set rs.ActiveConnection = cn
    'Грид поддерживает только клиентский курсор
    rs.CursorLocation = adUseClient
    rs.LockType = adLockReadOnly
    rs.CursorType = adOpenStatic
    'Создание объекта ADO command
    Set cm = New ADODB.Command
    Set cm.ActiveConnection = cn
   
    cm.CommandType = adCmdText
    cm.CommandText = sql
   
    'Выполнение команды
    rs.Open cm                  'Вместо "Set rs = cm.Execute", _
    т.к. "cm.Execute" выполняет "SP" на серверном курсоре!
   
    Set Find = rs
   
    Set rs = Nothing            'Обязательно! Иначе - Error 7004!
   
    Screen.MousePointer = vbDefault

Exit Function
Er:
Set Find = Nothing
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Function
С уважением, Сергей.

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 15.07.2007 (Вс) 19:38

sergey-911
Сочувствую тебе!
Посмотри вот этот список литературы - из него бесплатно можно скачать любой источник:
http://bbs.vbstreets.ru/viewtopic.php?t=33423
Последний раз редактировалось Summer.05 16.07.2007 (Пн) 9:34, всего редактировалось 1 раз.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 15.07.2007 (Вс) 22:32

Спасибо Summer.05.
С уважением, Сергей.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 15.07.2007 (Вс) 23:39

Хотелось бы посоветовать что-то конкретное, но не знаю что :)

Всегда старался избегать работы с dbf -- опыт работы с ними из VB удручает. Возможно, конечно, этого опыта как раз и не хватает, но часто лезут глюки и непонятно, как от них избавляться.

Общие рекомендации:
Поставить последние версии MDAC и JET.
Использовать английские имена путей и названий файлов и в имени не более 8 символов -- бывали с этим проблемы.
Запросы писать ЗАГЛАВНЫМИ буквами -- тоже интересная особенность.
Если есть возможность (когда данные обновляются нечасто), лучше вообще затянуть инфу в Access и работать уже с mdb -- так надежнее.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 16.07.2007 (Пн) 0:27

Ну не знаю.. У меня вся база в dbf. В mdb - только небольшой кусок.
Глюков за 2.5 года не наблюдаю =)
Естественно, имена путей/файлов английские в 8.3 формате. Потому что с той же базой в основном работает досовская прога..
label:
cli
jmp label

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 16.07.2007 (Пн) 9:01

iGrok, ну тогда колись:
какой драйвер/строку подключения используешь, какой курсор серверный/клиентский;
как пакуешь базы после удаления записей;
как подключаешь/создаешь индексы и переиндексируешь в случае сбоя (например по питанию);
ну и другие нюансы.

800 сообщение
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Работа с БД "DBF"

Сообщение Andrey Fedorov » 16.07.2007 (Пн) 9:20

sergey-911 писал(а):Возможно параметр подключения неправильно указал:
Код: Выделить всё
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=\\GTD\BD\ГТД;"


IMHO лучше так:

Код: Выделить всё
Set cn = New ADODB.Connection
cn.Provider = "VFPOLEDB.1"
cn.Open "Data Source=""" & sPath & """;Collating Sequence=RUSSIAN"


Фокспрошный провайдер (9-я версия) есть на сайте MS. При таком подключении нет ругани на неправильную сортировку, ну и кодовую страницу правильно понимает (иначе у меня с DBASE не разпознавалась кодовая страница DBF-ки под Vista, да и люди на проблемы с ней жаловались...).

P.S Увы, но DBF-ки тоже еще приходится использовать, так как есть программа с ними работающая...
Последний раз редактировалось Andrey Fedorov 16.07.2007 (Пн) 13:37, всего редактировалось 1 раз.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 16.07.2007 (Пн) 13:19

VVitafresh писал(а):iGrok, ну тогда колись:
какой драйвер/строку подключения используешь, какой курсор серверный/клиентский;
как пакуешь базы после удаления записей;
как подключаешь/создаешь индексы и переиндексируешь в случае сбоя (например по питанию);
ну и другие нюансы.

"Provider=MSDASQL;Driver={Microsoft dBASE Driver (*.dbf)};DriverID=533;DBQ=%path%"
Курсор клиентский. Вся работа - через ADO.
Есть правда один маленький прикол. Записи удаляются КРАЙНЕ редко. Поэтому перепаковку еще делать не приходилось. Сам размер базы - около 18 метров.
Да и из бейсика я ее только читаю. =) А остальное - на клиппере.. Им уже занимаюсь немного не я =))
В общем, понял тебя.. Проблем несколько больше на деле =)
label:
cli
jmp label

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 16.07.2007 (Пн) 17:53

VVitafresh писал(а):Общие рекомендации:
Поставить последние версии MDAC и JET.
Использовать английские имена путей и названий файлов и в имени не более 8 символов -- бывали с этим проблемы.
Запросы писать ЗАГЛАВНЫМИ буквами -- тоже интересная особенность.

Спасибо VVitafresh за рекомендации. Я именно так и делал, но глюки все-равно лезут.
VVitafresh писал(а):Если есть возможность (когда данные обновляются нечасто), лучше вообще затянуть инфу в Access и работать уже с mdb -- так надежнее.

Данные постоянно обновляются (БД и клиент писала целая контора), пользователей дофига, моя задача просто сделать выборку из 2-х БД.
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Re: Работа с БД "DBF"

Сообщение sergey-911 » 16.07.2007 (Пн) 17:59

Andrey Fedorov писал(а):
sergey-911 писал(а):IMHO лучше так:

Код: Выделить всё
Set cn = New ADODB.Connection
cn.Provider = "VFPOLEDB.1"
cn.Open "Data Source=""" & sPath & """;Collating Sequence=RUSSIAN"


Спасибо Андрей.
С уважением, Сергей.

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Re: Работа с БД "DBF"

Сообщение Al Khamid » 16.08.2007 (Чт) 10:23

Все мои посты - полный бред. Удалите меня из форума.
Последний раз редактировалось Al Khamid 07.11.2007 (Ср) 10:31, всего редактировалось 1 раз.
"Время пришло..." ©

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Работа с БД "DBF"

Сообщение Andrey Fedorov » 16.08.2007 (Чт) 11:16

Al Khamid писал(а):
Andrey Fedorov писал(а):<...>
Фокспрошный провайдер (9-я версия) есть на сайте MS.
<...>

А он с DBF Level 7 умеет работать?


Не пробовал - нет у нас такого. Надо пробовать. Если приаттачишь маленькую табличку - попробую из интереса.

Собственно с DBF Level 7 я как-то давно разбирался, но это было так давно что уже и не помню через что с ним работал...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 16.08.2007 (Чт) 11:38

Все мои посты - полный бред. Удалите меня из форума.
Последний раз редактировалось Al Khamid 07.11.2007 (Ср) 10:30, всего редактировалось 1 раз.
"Время пришло..." ©

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.08.2007 (Чт) 12:03

Al Khamid писал(а):Вот маленькая таблица в формате DBF Level 7.


Да, данный провайдер с данными DBF не работает.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 16.08.2007 (Чт) 13:37

Все мои посты - полный бред. Удалите меня из форума.
Последний раз редактировалось Al Khamid 07.11.2007 (Ср) 10:28, всего редактировалось 1 раз.
"Время пришло..." ©

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.08.2007 (Чт) 13:46

Al Khamid писал(а):Эхх. Печально. Даже преодолев "ломы", не смогу причесать свой парсер до универсальности, поскольку описания самого формата попадаются разные, противоречивые.


Да не надо ничего искать. К Access-у твоя табличка отлично линкуется. Смотри на скриншот Значит все в системе уже есть. Файл от paradox-а, значит и строка коннекта должна быть соответствующая...

P.S Знаешь как в Access-e вытащить строку коннекта прилинкованной таблички, а то разбираться неохота?...
У вас нет доступа для просмотра вложений в этом сообщении.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 16.08.2007 (Чт) 14:02

Все мои посты - полный бред. Удалите меня из форума.
Последний раз редактировалось Al Khamid 07.11.2007 (Ср) 10:29, всего редактировалось 1 раз.
"Время пришло..." ©

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.08.2007 (Чт) 14:20

Al Khamid писал(а):Кстати, Access 2000 линкует и импортирует эти таблицы только если у тебя установлен борландовский BDE. Как себя ведет 2003, пока не проверял.


Возможно. У меня этот BDE стоит из-за одной дурной программы.

А строка там: dBase 5.0;HDR=NO;IMEX=2;DATABASE=C:\Temp\L7

Что несколько смущает... Поубивал бы Борланд и подобных за подобный подход к своим продуктам (драйвера к Firebird в том числе).
----------

Нашел свое старенькое письмо на эту тему (на этом сайте) - там я обошелся утилиткой конвертации в MDB (их достаточно много в интернете)...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 16.08.2007 (Чт) 14:30

Да. Я пользовался "dbf2mdb" от http://www.whitetown.com (вдруг кому пригодится). Но это для разовых конвертаций, а для оперативной работы это не годится.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 63

    TopList