|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
Задача получить данные из dbf файла без использования драйверов ISAM. Воспользовавшись распространённым материалом по данному вопросу получилось считать данные с файла напрямую в рекордсет а уже потом из него заполнить подготовленную таблицу. Но возникла проблема с большими файлами. Во время выполнения функции в какой-то момент происходит переполнение и данные перестают считываться. Прилагаю пример. Первая кнопка отлично считывает данные а вторая считывает до 117 записи и дальше происходит сбой (в примере ошибка специально сбрасывается чтобы завершить функцию и поэтому все последующие записи заполняются 117 записью). Подскажите, знающие, как обойти ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2017, 01:56 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
GVOV, вот этот кусочек кода так должен выглядеть Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2017, 03:34 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
guest_rusimport, Спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2017, 10:40 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
Решил несколько усложнить задачу. 1. Если в dbf файле поля идут в другой последовательности чем в таблице получающей данные (получаем данные из полей имена которых соответствуют таковым в принимающей таблице). 2. Если в dbf файле отсутствует одно из полей получающей таблицы (выводим ошибку и импорт отменяем). Решение сделал путём перебора названий полей запроса во время импорта каждой записи и всё работает, но кажется что можно оптимизировать ведь получая данные в конкретное поле принимающей таблицы знаем имя её поля: Код: vbnet 1.
Но вот как обратится к такому же полю запроса rs, не могу додуматься. Что-то типа такого но чтобы работало: Код: vbnet 1.
А при отсутствии нужного поля обработать сообщение об ошибке с соответствующим сообщением. Можно ли так реализовать или оставить то что есть? (прилагаю пример) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 01:23 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
GVOV, примерно так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 09:49 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
guest_rusimport, Действительно работает. Я такое же делал но безуспешно, потому что у меня был лишний восклицательный знак. А теперь всё ОК Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2017, 12:34 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
Добрый день. Возникла необходимость затянуть данные из dbf в MS Access 2016 без установки на ПК (в основном - Win10 x64) каких-либо драйверов доступа к данным. Нашел статью Алексея и код, выполняющий разбор dbf "вручную" (функция ReadDBFtoRS), но она не умеет импортировать dbf FoxPro (в коде даже есть явное сообщение MsgBox "Файлы VFP не читаются.") Может у кого-то есть ссылки на аналогичный код ручного разбора dbf VFP или мысли, как по быстрому (и можно ли) подогнать код Алексея? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 13:12 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
VFP вручнуюМожет у кого-то есть ссылки на аналогичный код ручного разбора dbf VFP или мысли, как по быстрому (и можно ли) подогнать код Алексея? Вообще-то меня зовут Анатолий. Приятно, что моя статья - "распространённый материал" Дело в том, что VFP файлы по структуре сильно отличаются от dBase/FoxBase/FoxPro 2.0 Там много полей, хранящих данные в двоичном виде, иначе организован заголовок файла и т.д. У меня есть примочка, умеющая читать/создавать в т.ч. и VFP файлы, но в вашем случае будет проще использовать VFP провайдер. В статье есть раздел, посвященный этой теме. Читайте... Пробуйте... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 14:28 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
Анатолий, приветствую. Да, ошибся с именем, извините.. В моём случае есть проблема с установкой дополнительного софта на машины пользователей (основная проблема - админские права для установки чего-либо).. к тому же, на сколько я понял, VFP-провайдер есть только 32-битный и в 64-х битных Офисах его использование невозможно (возможности попробовать еще не было, правда). Но как я понял, альтернатива VFP-провайдеру - это самостоятельно разобраться в формате dbf FoxPro файлов и написать статью (процедуру), аналогичную вашей :) Это явно выходит за скоп задачи и моих интересов) Спасибо за статью и ответ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 15:08 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
VFP вручную, в прицепе модуль класса. Импортируйте его в Базу и тренируйтесь. Вам понадобится метод OpenFile и Import. Метод Import создает таблицу или заполняет существующую. Если вам просто нужен подобие Recordset-а, то в теле этой процедуры есть цикл по записям файла - изучите в качестве примера. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 15:47 |
|
Импорт dbf без использования драйвера
|
|||
---|---|---|---|
#18+
Анатолий, всё получилось, спасибо! Код споткнулся при попытке сохранить в таблицу NULL-значение из пустого MEMO-поля DBFки, пришлось закомментить строку "If fVFP And (DBFFields(i).flags And 2) = 0 Then strSQL = strSQL & " NOT NULL" ", разрешив NULL-значения в созданной таблице. Если в уже подготовленную таблицу импортить, то вообще проблем не было бы. Спасибо!! P.S. Не хотите дополнить свою статью? Новые офисы, 32/64 бита, этот классный класс хотя бы "As Is"? Понимаю, что это уже мало кому интересно сейчас, но вдруг кому-то как и мне поможет.. Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2017, 17:45 |
|
|
start [/forum/topic.php?fid=45&msg=39472753&tid=1611868]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 404ms |
0 / 0 |