Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Как в Delphi открыть базу FoxPro?   Найти похожие ветки 

 
SCORPION ZP   (2003-07-13 12:02) [0]

Уважаемые мастера, как это не смешно, но возникла проблема с открытием базы FoxPro(сделанной под DOS). Как в Delphi, так и в
Builder я получаю всегда одну и ту же ошибку:
" Corrupt Table/Index header". В Database Desktop тоже самое.
По заголовку установлено, что база FoxPro с memo (*.FPT) и составным индексом (*.CDX). Эти файлы есть. И, например, в
BRО(под DOS) или в wdbfview(под Win)она открывается
База содержит 203 поля и около 3000 записей, занимает всего 8 метров, но открыть не удается. Пробовал в заголовке изменить
наличие индекса - ошибка та же. Где грабли? Кто желает вышлю кусок базы для просмотра...


 
sniknik   (2003-07-13 12:23) [1]

> "Corrupt Table/Index header".
а может действительно, на индексе? (BRО & wdbfview может на индексы вообще внимания не обращает)

база из DOS Foxpro всегда без проблем открывались просто через BDE, если всетаки база поновее можно попробовать через ODBC VFP Driver открыть.

сколько архив базы занимает? (кусок думаю не поможет нужна не открывающаяся 1 таблица с индексами и мемо) обычно dbf хорошо жмется, если в 500-700 кб уложится, шли.


 
sniknik   (2003-07-13 13:20) [2]

письма пока нет, если надумаеш послать на скорый ответ не расчитывай, я ухожу в offline часиков на 6-8.


 
SCORPION ZP   (2003-07-13 14:25) [3]

Письмо тебе отправил и раньше, чем 13:20, только не со своего
ящика... Проверь, если нет я перешлю ещё раз!


 
sniknik   (2003-07-13 16:56) [4]

получил, время отправления 12.40, дошло 13.49 не так уж и долго шло ;о))

через ODBC (DRIVER={Microsoft Visual FoxPro Driver}) открывается без проблем. (проблемы потом с языком :о)))

а вот с BDE плохо, только после удаления обоих мемо полей открывается, причем от их наполнения не зависит (удалял полностью, fpt пустой становился),
или после удаления полей (количества), с 203 до 50 (не трогая мемо) тоже открывает.
видать срабатывает какоето ограничение dBase, которое фокс поддерживает (количество полей, структура,... ?).
от индексов не глюк зависит совсем.
можно поискать в чем разница (чего именно он не понимает), но зачем вроде уже ясно. и выход есть (ODBC).


 
SCORPION ZP   (2003-07-13 18:15) [5]

sniknik
Да действительно нужно будет попробовать через ODBC. Как только
освободится ПК с Delphi проверю. А потом посмотрю как перекодировать(в том числе и fpt). У меню ещё к тебе вопрос -
задам по мылу(минут через 10). Если не скажешь как, то кину в форум.


 
SCORPION ZP   (2003-07-13 20:19) [6]

sniknik
Почему при установке
> ODBC (DRIVER={Microsoft Visual FoxPro Driver})

при открытии базы спрашивает DataBase Login. Или я неверно настроил алиас. В нем я ставил только
Type = Microsoft Visual FoxPro Driver
DATABASE NAME = D:\_TEST\ITOG.DBF
LANGDRIVER =


 
sniknik   (2003-07-13 21:49) [7]

честно говоря не стал бы bde в этом случае использовать, ado проще, ну да ладно

первое DATABASE NAME = D:\_TEST\
а не таблици
второе начинай задавать изначально (не BDE Admin а ODBC), найди в настройках - панель управления - "источники данных ODBC" (или дальше в администрировании в случае W2k) и в нем настрой. если пройдет без ошибок тогда уже иди дальше в BDE Administrator. после настройки попытайся его активировать, получится, в программе проблем не будет.

пароль игнорируй, просто 2раза ентер. если хочеш его убрать (запрос) то используй TDatabase у него LoginPrompt отключается.


 
SCORPION ZP   (2003-07-13 22:05) [8]

sniknik
Мне вообще желательно без bde. Нужно программно, подключиться
к базе из того каталога, где она будет найдена.
Раскажи как проще, т.е. через ado(как например в проге прописать к ней конект, если путь мне будет уже известен). Я с ado вообще не работал. А у клиента для которого делаю врядли вообще есть
BDE. Так как в проге через ADO?


 
sniknik   (2003-07-14 00:22) [9]

у TADOConnection прописываеш строку коннекта такую
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DRIVER={Microsoft Visual FoxPro Driver};UID=;SourceDB=D:\_TEST;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"

LoginPrompt у него же фалсе. всё. все таблици, квери (TADOxxx) вяжеш к нему и работаеш как обычно, почти.


 
seregin   (2003-07-14 10:08) [10]

в 98 винде хреновые дрова для FoxPro. Я работал в Парусе, ставил отдельные дрова (родные, но отдельные :))...
можно еще попробовать Halcyon От Griffin Solutions. мне понравилось, все аккуратно понимает, в одном только месте глюк был, но на DOS-версию он не распространяется...


 
SCORPION ZP   (2003-07-14 10:25) [11]

sniknik
Прошу прощения. У меня просто с ADO это... первая любовь. Для просмотра dbf и db я всегда пользовался(как и многие) тремя
компонентами TTable,TDataSource,TDBGrig.
В ADO я так понимаю нужно использовать:
TADOConnection
TADOTable
TDataSource
TDBGrig

Для TADOTable я прописывал такую же строку ConnectionString,
что и для TADOConnection. Настройка связей комонентов...
Получаю в TDBGrig таблицу. Всё верно?!
Для просмотра memo используем как обычно DBMemo.
Задача просмотра/вывода на экран таблицы FoxPro с большим количеством полей решена!
Теперь осталась декодировка. Ну это уже другая тема.
Если при перекодировке у меня возникнет вопрос, связанный с ADO
я тебе напишу на мыло.


 
SCORPION ZP   (2003-07-14 10:30) [12]

seregin
У меня Me.


 
sniknik   (2003-07-14 11:28) [13]

> Теперь осталась декодировка.
если под перекодировкой имееш ввиду ту таблицу где в строковое поле число записано. то ни BDE ни ADO тебе не поможет. (обсуждали же уже) я тогда предложил сторонний компонент который может получать поле "as is" без преобразований. (тот же Halcyon может после небольших изменений)

там же (в том же обсуждении) предлагали DbiGetRecord использовать, я тогда согласился (и даже DbiGetField добавил(разбор по полям)), но с той поры было время попробовать и нифига у меня не получилось DbiGetRecord возврашает в pRecBuf масив заполненый пробелами (#32) для стринговых полей, хотя там на самом деле число (#0#0#0#0#160#230#30#65.....). если этого не побороть то с BDE можеш попрощатся (нижний уровень уже преобразованное значение).

тебенужно чтото вроде
var
Form1: TForm1;
Ar: array[0..9] of char = #0#0#0#0#160#230#30#65#0;
lint: Int64 absolute Ar;
begin
Label1.Caption:= IntToStr(lint);


только значение Ar из базы получать (см выше). и подобрать тип числа и т.д. (могут быть байты по разному сохранятся, поочередно или с заменой Lo & Hi). нужно сравнивать что туда реально записано и подбирать (либо с программой работающей с этой базой сравнивать)...

т.е. хочу сказать не так все просто как ты думаеш (простой сменой LANGDRIVER-а точно не обойдешся)


 
SCORPION ZP   (2003-07-14 13:16) [14]

sniknik
Под словом декодировка я имел ввиду базу FoxPro(Itog.dbf).
А к базе dBASE (случай что ты описываешь)я буду приступать после того как сделаю подключение и перекодировку базы FoxPro...
Сейчас над этим и сижу.


 
SCORPION ZP   (2003-07-14 16:42) [15]

sniknik

>... вяжеш к нему и работаеш как обычно, почти.

Я как чувствовал, что будут проблеммы. При конвертации, после
метода Post возникает ошибка "[Microsoft][ODBC Visual FoxPro Driver]SQL: Statement too Long". Когда я работал с базами dbf
через BDE и TTable, а не TADOTable, то мой код для конвертации
проходил, а теперь нет. Всего то заменил в коде Table на ADOTable, ну и FieldDefs.Count на FieldCount. Где ошибка?
Шлю тебе исходники.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
14-10430
Igor_thief
2003-07-16 21:04
2003.08.04
Parsing


3-10138
Иванов Сергей
2003-07-14 17:43
2003.08.04
IB подвисает


7-10462
Burmistroff
2003-05-22 00:40
2003.08.04
Inline asm: произвол Delphi


1-10251
timotei
2003-07-21 12:21
2003.08.04
Панель Message View как в IDE D7


1-10288
off
2003-07-14 14:42
2003.08.04
Количество дней между датами?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский