| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Открытие dBase через ADO |
| Автор: Dr.Drunk 19.1.2006, 11:56 |
| Доброго времени суток. Собственно сабж. Есть dbf-ки, есть моя прога. dbf-ки, которые делаю сам открываются нормально. dbf-ки, допустим с 1С, при открытии выдает: "Invalid variant type conversion" Подключаюсь через OLE DB Provider for ODBC Driver. |
| Автор: ТоляМБА 20.1.2006, 06:40 |
| Кинь мне на мыло небольшую dbf-ку кот. глючит и стукни в ПМ (я на мыло не часто хожу). Я гляну. А так с лету можно только предположить что в числовое поле каким-то макаром попал символ. Добавлено @ 06:42 И еще укажи версию файла. А в Database Desktop пробовал открывать? Ругается, нет? |
| Автор: Dr.Drunk 20.1.2006, 07:56 |
| ТоляМБА, самое смешное, что после этой ошибки таблицу он открывает. Database Desktop не пробовал. Версия скорее всего 3. |
| Автор: ТоляМБА 20.1.2006, 08:14 |
| Дык почему у меня мыло-то пустое??? Я бы у себя посмотрел - если у меня не будет глючить будем дальше разбираться. Добавлено @ 08:15 Почему? Это так долго? Или ты ее снес? |
| Автор: SergeBS 20.1.2006, 09:05 |
| Dr.Drunk 1. Проверь на наличие Memo-полей и файлов тоже. 2. Через ADO работать с dbf - иметь некислые тормоза и кучу проблем. Причины - в архитектуре. ADO всегда работает через SQL-запросы. Лучше возьми что-либо типа TDbf/Halcyon. Это IMO правильное решение проблемы. |
| Автор: ТоляМБА 20.1.2006, 09:53 |
| Вот если бы ты попробовал сразу открыть через Database Desktop, то увидел предупреждение: ‘Production index file missing, corrupt or cannot interpret index key’ что означает примерно следующее: ‘данная табла содержит индекс но ему писец или нет файла с индексом’. dBase хранит индексы в файлах с расширениями .mdx или .ndx (в зависимости от вида индекса) имя индексного файла такое же как у dbf-файла. 1-й выход правильный и быстрый: 1-й вариант (если нужны индексы) копируй индексные файлы с машины на которой брал .dbf 2-й вариант (если индексы не нужны) при выгрузке из 1С если это возможно укажи, чтоб индексы не выгружались (если такая фича там есть – я в глаза не видел 1С) и проверь будет ли ругаться Дэлфя. 2-й выход геморройный и долгий (если файлов много, но обработать их нужно только один раз и 1-й выход невозможен): При открытии через Database Desktop при выходе предупреждения нужно выбрать ‘Open and Detach’, чтобы она убила индекс (только не знаю надо потом пересохранять или нет). 3-й выход (если 1-й не возможен а 2-й не подходит) написать прогу, которая будет убивать индексы. Кстати, у меня 6-я Делфя и при коннекте она сразу выдала мне сообщение ‘[Microsoft] [Драйвер ODBC dBase] Индекс не найден’ и открыть таблу так и не дала. Но когда я убил индекса через Database Desktop табла открывалась без проблем. Теперь по кодировке: ни какой прогой кроме Microsoft Visual FoxPro 6.0 я не смог прочитать что там написано, а в Фоксе указал кодировку Windows Russian и всё прочитал. И еще вопрос не по теме: это по приколу цифирь в чарах хранить? Ну ладно в других полях могут быть и буквы и цифирь, но не в ID же. Добавлено @ 09:55 Кстати Database Desktop пишет версию dBase IV |
| Автор: Dr.Drunk 20.1.2006, 10:12 |
| ТоляМБА, это вопрос уже к 1Сникам, скорее всего там в конфигураторе выбирается что хранить число или чар, вот они и не стали заморачиваться. Так не хотелось с индексами заморачиваться придется. Database Desktop не разу не пользвался, поэтому и мучаюсь |
| Автор: bas 20.1.2006, 10:18 |
| C mdx полностью согласен. Но с .ndx можно даже и не думать, в хидере dbf об этом индексе никаих упоминаний нет. Добавлено @ 10:19 И не пользуйся - вредная штука. |
| Автор: Dr.Drunk 20.1.2006, 10:24 | ||
| ТоляМБА, да с индексом промашка вышла, щас скину ADOTemp.ConnectionString:=Provider=MSDASQL.1;Persist Security Info=False;Data Source=Файлы dBASE;Mode=ReadWrite при смене на dBase ODBC ошибка остается. Вот код
|
| Автор: ТоляМБА 20.1.2006, 12:38 |
| Dr.Drunk Вот ты скинул индексный файл и я сразу все понял (правда тебе от этого легче не будет CDX - это расширение индексных файлов FOX (FoxPro или FoxBase - точно не знаю). Поэтому то в фоксе у меня кодировка нормально и прочиталась. Жаль только я с фоксом не работал и помочь тут не смогу. Единственное только могу сказать: или проси у них dBase-овские файлы или убивай индексы у этих (если для твоей проги они не нужны) Добавлено @ 12:41 В Дэлфе он файл нормально открывает, правда при попытке изменения ругается что нет индексного файла для dBase а в Обджект инспекторе в списке индексных файлов естественно пусто. |
| Автор: Dr.Drunk 20.1.2006, 13:03 |
| ТоляМБА, спасибо, буду индексы бить, они особо не нужны ))) |
| Автор: ТоляМБА 20.1.2006, 13:21 |
| Через BDE пробовал убить с помощью SQL - отлично убиваются. ЗЫ. Кстати в BDE и с кодировкой всё Ок! |
| Автор: Dr.Drunk 24.1.2006, 09:52 |
| ТоляМБА, BDE - это конечно хорошо. Но мне хочется через OLE сделать, чтобы потом с БДЕ не носиться |
| Автор: bas 24.1.2006, 10:45 |
| Dr.Drunk Убивать индексы и не надо просто используй вместо драйвера DBase- Microsoft Dbase VFP or Microsoft FoxPro VFP |