Помогите за ради христа, уже все форумы перечитал и всю голову сломал, но безрезультатно.
Нужно перегнать базу из DBF в MSSQL Express 2008 x64. Ставил MDAC x64 для Office 2010. Пробовал:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:\Kladr\Base;Extended Properties=DBASE IV;', 'SELECT * FROM kladr.dbf');
Ошибка "Could not find installable ISAM."
SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:\Kladr\Base;Extended Properties=DBASE IV;')...KLADR;
Ошибка Cannot fetch a row from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)}; DBQ=D:\Kladr\Base\', 'SELECT * FROM kladr.dbf');
Ошибка Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)". Имя драйвера написано в точности так как в списке ODBC Data Sources для x64.
SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft dBase Driver (*.dbf)};defaultdir=D:\Kladr\Base;sourcetype=DBF', 'SELECT * FROM KLADR.dbf');
Ошибка Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)". Эта строка, по-видимому, для 32-бит ODBC, с ней создается коннект в студии и даже можно получить результат.
Что еще можно попробовать? VFPOLEDB провайдер не пробовал, он вроде бы только 32-битный.
Здравствуйте, algol, Вы писали:
A>Что еще можно попробовать? VFPOLEDB провайдер не пробовал, он вроде бы только 32-битный.
1. Через мастер в студии
2. Через Excel
Здравствуйте, algol, Вы писали:
A>Помогите за ради христа, уже все форумы перечитал и всю голову сломал, но безрезультатно. A>Нужно перегнать базу из DBF в MSSQL Express 2008 x64. Ставил MDAC x64 для Office 2010. Пробовал:
А почему просто не перегнать все в таблицу в SQL Server и уже с ней работать? Открыть dbf файл в Excel например, сохранить. Потом из Excel в SQL Server. Напрямую DBF->SQL Server, я так понял, не получится или геморойно (http://msdn.microsoft.com/en-US/library/aa337084(v=sql.100).aspx).
Скачал тут себе базу рабов Луизианы (http://www.ibiblio.org/laslave/downloads/) Все работает без проблем (протестировал на Office 2010, машины Win XP 32-bit и Win 7 64-bit)
Не вижу принципиальной разницы. Что DBF что Excel читаются через Access и ISAM драйвера. Если не работает DBF, то и для Excel я скорее всего получу ту же самую ошибку Couldn't find installable ISAM.
По ссылке работа через старый OLEDB провайдер, который не поддерживает 64-бит. x64 версия провайдера повилась только в MDAC для Office 2010. В общем, проблема именно в установлении соединения из 64-битного инстанса MSSQL.
ЗЫ. Есть еще версия базы в виде скрипта для MySQL (набор INSERTов). Его несложно допилить руками под MSSQL, но выполнится ли этот скрипт за разумное время?
Здравствуйте, algol, Вы писали:
A>ЗЫ. Есть еще версия базы в виде скрипта для MySQL (набор INSERTов). Его несложно допилить руками под MSSQL, но выполнится ли этот скрипт за разумное время?
Выполнится если не коммитить после каждой вставки.
Здравствуйте, BlackEric, Вы писали:
A>>ЗЫ. Есть еще версия базы в виде скрипта для MySQL (набор INSERTов). Его несложно допилить руками под MSSQL, но выполнится ли этот скрипт за разумное время? BE>Выполнится если не коммитить после каждой вставки.
Агащазкакже. Сдох на 40К строк, а всего там должно быть в районе 1,5 млн записей:
Msg 701, Level 17, State 123, Server .\SQLEXPRESS, Line 39996
There is insufficient system memory in resource pool 'internal' to run this query.
Здравствуйте, algol, Вы писали:
A>Агащазкакже. Сдох на 40К строк, а всего там должно быть в районе 1,5 млн записей: A>Msg 701, Level 17, State 123, Server .\SQLEXPRESS, Line 39996 A>There is insufficient system memory in resource pool 'internal' to run this query.
Странно. Покажите структуру таблиц куда делаете вставку, пример запроса и настройки сервра.
40 000 записей — это совсем не много, если там нет блобов.
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, algol, Вы писали:
A>>Агащазкакже. Сдох на 40К строк, а всего там должно быть в районе 1,5 млн записей: A>>Msg 701, Level 17, State 123, Server .\SQLEXPRESS, Line 39996 A>>There is insufficient system memory in resource pool 'internal' to run this query.
Эта ошибка возникает если серверу недостаточно памяти, что бы распарсить текст запроса.
При Insert обычно помогает вставка GO после скажем каждой 1000 инсертов.
Здравствуйте, BlackEric, Вы писали:
BE>Здравствуйте, BlackEric, Вы писали:
BE>>Здравствуйте, algol, Вы писали:
A>>>Агащазкакже. Сдох на 40К строк, а всего там должно быть в районе 1,5 млн записей: A>>>Msg 701, Level 17, State 123, Server .\SQLEXPRESS, Line 39996 A>>>There is insufficient system memory in resource pool 'internal' to run this query.
BE>Эта ошибка возникает если серверу недостаточно памяти, что бы распарсить текст запроса. BE>При Insert обычно помогает вставка GO после скажем каждой 1000 инсертов.
Ну да, или просто руками скрипт бьется на несколько частей. Выделил — запустил, выделил — запустил, так и контроля больше, знаешь точно, что отработало. Обезьянья работа, но зато один раз.
Здравствуйте, algol, Вы писали:
A>Помогите за ради христа, уже все форумы перечитал и всю голову сломал, но безрезультатно. A>Нужно перегнать базу из DBF в MSSQL Express 2008 x64.
Как то давно была аналогичная проблема с парадоксом, осложнялась тем что данный процес надо было автоматизировать, т.е. парадоксовские дбфки синхронизировать с mssql. Вышел из ситуации так:
1. Создаётся прилинкованый сервер
Либо так, только в этом случае нужно будет установить BDE и прописать соответствующий драйвер для дбф. Строки подключения есть в инете.
Ну и например чтобы получить данные из файла Storage.dbf во временную таблицу #storage, нужно выполнить запрос через прилинкованый сервер, при этом расширение файла не пишется. опять же нужно рассматривать специфику запросов для конкретного ODBC драйвера, т.к. думаю могут отличаться.
INSERT INTO #storage EXEC ('SELECT * FROM PARADOX...STORAGE WHERE [Count] > 0' )