Импорт DBF в MSSQL x64
От: algol Россия about:blank
Дата: 29.05.13 10:40
Оценка:
Помогите за ради христа, уже все форумы перечитал и всю голову сломал, но безрезультатно.
Нужно перегнать базу из 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-битный.
Re: Импорт DBF в MSSQL x64
От: BlackEric http://black-eric.lj.ru
Дата: 29.05.13 16:02
Оценка:
Здравствуйте, algol, Вы писали:

A>Что еще можно попробовать? VFPOLEDB провайдер не пробовал, он вроде бы только 32-битный.

1. Через мастер в студии
2. Через Excel
https://github.com/BlackEric001
Re: Импорт DBF в MSSQL x64
От: Docker Канада  
Дата: 29.05.13 17:16
Оценка:
Здравствуйте, 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)
Re[2]: Импорт DBF в MSSQL x64
От: algol Россия about:blank
Дата: 29.05.13 23:08
Оценка:
Здравствуйте, Docker, Вы писали:

D>А почему просто не перегнать все в таблицу в SQL Server и уже с ней работать?


Именно это и хочу сделать.

D>Открыть dbf файл в Excel например, сохранить.


А Excelу не поплохеет от >200 Мб базы?

D>Потом из Excel в SQL Server. Напрямую DBF->SQL Server, я так понял, не получится или геморойно (http://msdn.microsoft.com/en-US/library/aa337084(v=sql.100).aspx).


Не вижу принципиальной разницы. Что DBF что Excel читаются через Access и ISAM драйвера. Если не работает DBF, то и для Excel я скорее всего получу ту же самую ошибку Couldn't find installable ISAM.
По ссылке работа через старый OLEDB провайдер, который не поддерживает 64-бит. x64 версия провайдера повилась только в MDAC для Office 2010. В общем, проблема именно в установлении соединения из 64-битного инстанса MSSQL.

ЗЫ. Есть еще версия базы в виде скрипта для MySQL (набор INSERTов). Его несложно допилить руками под MSSQL, но выполнится ли этот скрипт за разумное время?
Re[3]: Импорт DBF в MSSQL x64
От: BlackEric http://black-eric.lj.ru
Дата: 30.05.13 07:22
Оценка:
Здравствуйте, algol, Вы писали:

A>ЗЫ. Есть еще версия базы в виде скрипта для MySQL (набор INSERTов). Его несложно допилить руками под MSSQL, но выполнится ли этот скрипт за разумное время?


Выполнится если не коммитить после каждой вставки.
https://github.com/BlackEric001
Re[4]: Импорт DBF в MSSQL x64
От: algol Россия about:blank
Дата: 03.06.13 11:16
Оценка:
Здравствуйте, 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.
Re[5]: Импорт DBF в MSSQL x64
От: BlackEric http://black-eric.lj.ru
Дата: 03.06.13 11:56
Оценка:
Здравствуйте, 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 записей — это совсем не много, если там нет блобов.
https://github.com/BlackEric001
Re[6]: Импорт DBF в MSSQL x64
От: BlackEric http://black-eric.lj.ru
Дата: 03.06.13 12:03
Оценка:
Здравствуйте, 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 инсертов.
https://github.com/BlackEric001
Re[7]: Импорт DBF в MSSQL x64
От: Docker Канада  
Дата: 03.06.13 15:38
Оценка:
Здравствуйте, 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 инсертов.

Ну да, или просто руками скрипт бьется на несколько частей. Выделил — запустил, выделил — запустил, так и контроля больше, знаешь точно, что отработало. Обезьянья работа, но зато один раз.
Re: Импорт DBF в MSSQL x64
От: a11chemist  
Дата: 11.06.13 06:12
Оценка:
Здравствуйте, algol, Вы писали:

A>Помогите за ради христа, уже все форумы перечитал и всю голову сломал, но безрезультатно.

A>Нужно перегнать базу из DBF в MSSQL Express 2008 x64.

Как то давно была аналогичная проблема с парадоксом, осложнялась тем что данный процес надо было автоматизировать, т.е. парадоксовские дбфки синхронизировать с mssql. Вышел из ситуации так:
1. Создаётся прилинкованый сервер
Либо так, только в этом случае нужно будет установить BDE и прописать соответствующий драйвер для дбф. Строки подключения есть в инете.
EXEC sp_dropserver @server = 'PARADOX', -- sysname
    @droplogins = 'droplogins' -- char(10)

EXEC sp_addlinkedserver @server = 'PARADOX',
    @srvproduct = 'MSDASQL',
    @provider = 'MSDASQL',
    @provstr ='Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 7.X;DSN=PARADOX;DefaultDir=d:\Server\PARADOX;Dbq=d:\Server\PARADOX;CollatingSequence=ASCII;'
    DefaultDir=d:\Server\PARADOX
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'PARADOX',
    @useself=N'False',
    @rmtuser=N'ADMIN'

EXEC master.dbo.sp_serveroption @server=N'PARADOX', @optname=N'rpc', @optvalue=N'true'
GO 
EXEC master.dbo.sp_serveroption @server=N'PARADOX', @optname=N'rpc out', @optvalue=N'true'
GO


либо через Jet.
EXEC sp_dropserver @server = 'PARADOX', -- sysname
    @droplogins = 'droplogins' -- char(10)

EXEC sp_addlinkedserver @server = 'PARADOX',
    @srvproduct = 'Jet 4.0',
    @provider = 'Microsoft.Jet.OLEDB.4.0',
    @datasrc = 'D:\Server\Paradox',
    @provstr = 'Paradox 7.x'
    
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'PARADOX',
    @useself=N'False',
    @rmtuser=N'ADMIN'

EXEC master.dbo.sp_serveroption @server=N'PARADOX', @optname=N'rpc', @optvalue=N'true'

EXEC master.dbo.sp_serveroption @server=N'PARADOX', @optname=N'rpc out', @optvalue=N'true'
GO


Ну и например чтобы получить данные из файла Storage.dbf во временную таблицу #storage, нужно выполнить запрос через прилинкованый сервер, при этом расширение файла не пишется. опять же нужно рассматривать специфику запросов для конкретного ODBC драйвера, т.к. думаю могут отличаться.

INSERT INTO #storage EXEC ('SELECT * FROM PARADOX...STORAGE WHERE [Count] > 0' )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.