Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Здравствуйте уважаемые эксперты! Прошу помочь с обработкой dbf в t-sql. Дело за малым - научиться их создавать

--Подключаем сервер.
EXEC sp_addlinkedserver 
        @server = 'dbf_data', 
        @provider = 'Microsoft.Jet.OLEDB.4.0', 
	@srvproduct = 'Microsoft Jet',
        @datasrc='c:\dbf',
	@provstr='dBase 5.0'
EXEC sp_addlinkedsrvlogin 'dbf_data', 'false', 'sa', 'admin', ''



--просмотр
select * from [dbf_data]...[3]
--Так можно создавать и модифицировать dbf файлы.
INSERT INTO [dbf_data]...[3] 
values ('1','2','3','4','5','6','7','8','9','10','11') 
--удаление
delete from [dbf_data]...[3]


--создание ВОТ ЗДЕСЬ БЕДА


select * from OPENQUERY(dbf_data,
'create table test.dbf ([NOPER] char(8))'
)

The OLE DB provider 'Microsoft.Jet.OLEDB.4.0' indicates that the object has no columns.
Типа селект не вернул набор данных

Добавим селект
select * from OPENQUERY(dbf_data,
'select * from 3.dbf create table test.dbf ([NOPER] char(8))'
)

Ошибка синтаксиса в предложении FROM.]

Разделение точкой с запятой или GO не понимает
select * from OPENQUERY(dbf_data,
'select * from 3.dbf ; create table test.dbf ([NOPER] char(8))'
) 


Обнаружены символы за пределами инструкции SQL.]

Что посоветуете?
18 апр 13, 14:44    [14198728]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Glory
Member

Откуда:
Сообщений: 104760
execute(<query>) at <linked server>
18 апр 13, 14:46    [14198746]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Glory
execute(<query>) at <linked server>


На

execute ('create table test.dbf ([NOPER] char(8))') at [dbf_data]


SQL 2000

дает

Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'at'.
18 апр 13, 15:00    [14198864]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Евгенич
SQL 2000

Конструкция "execute ... at" появилась в MSSQL 2005.
18 апр 13, 15:14    [14198987]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Гость333
Евгенич
SQL 2000

Конструкция "execute ... at" появилась в MSSQL 2005.


А вот 2005 орет:

Server: Msg 7411, Level 16, State 1, Line 1
Server 'dbf_data' is not configured for RPC.


Уже что-то! Что дальше?
18 апр 13, 15:25    [14199069]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Евгенич,

ну так сконфигурируйте его
18 апр 13, 15:28    [14199089]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Maxx
Евгенич,

ну так сконфигурируйте его


сделал

exec sp_serveroption 'dbf_data','RPC out','true'


Теперь ор следующий:

Server: Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
18 апр 13, 15:32    [14199126]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
Евгенич
Гость333
пропущено...

Конструкция "execute ... at" появилась в MSSQL 2005.


А вот 2005 орет:

Server: Msg 7411, Level 16, State 1, Line 1
Server 'dbf_data' is not configured for RPC.


Уже что-то! Что дальше?


1. Использовать VisualFoxPro OLEDB Provider

2. Тогда скрипт создания таблички будет таким:

select * from OPENQUERY(VFP, 'execscript("CREATE TABLE as.dbf(id c(10)) ") ')
18 апр 13, 15:34    [14199146]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
PaulWist
Евгенич
пропущено...


А вот 2005 орет:

Server: Msg 7411, Level 16, State 1, Line 1
Server 'dbf_data' is not configured for RPC.


Уже что-то! Что дальше?


1. Использовать VisualFoxPro OLEDB Provider

2. Тогда скрипт создания таблички будет таким:

select * from OPENQUERY(VFP, 'execscript("CREATE TABLE as.dbf(id c(10)) ") ')


А его нужно отдельно ставить?
18 апр 13, 16:06    [14199355]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
Евгенич
PaulWist
пропущено...


1. Использовать VisualFoxPro OLEDB Provider

2. Тогда скрипт создания таблички будет таким:

select * from OPENQUERY(VFP, 'execscript("CREATE TABLE as.dbf(id c(10)) ") ')


А его нужно отдельно ставить?


Если на сервере нет, то надо поставить :)
18 апр 13, 16:18    [14199453]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
PaulWist, это не вариант!

Дано MS SQL 2000 и никаких доп установок! Кто сможет помочь? Ну ведь осталось то только с синтаксисом разобраться когда 2 команды

select * from OPENQUERY(dbf_data,
'select * from 3.dbf ; create table test.dbf ([NOPER] char(8))'
) 
18 апр 13, 17:19    [14199884]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Евгенич,вы уверены,что дбф распознает ";" как разделитель команд?
18 апр 13, 17:32    [14199968]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
PaulWist
Member

Откуда:
Сообщений: 2231
Евгенич
PaulWist, это не вариант!

Дано MS SQL 2000 и никаких доп установок! Кто сможет помочь? Ну ведь осталось то только с синтаксисом разобраться когда 2 команды

select * from OPENQUERY(dbf_data,
'select * from 3.dbf ; create table test.dbf ([NOPER] char(8))'
) 


Это читали? https://www.sql.ru/faq/faq_topic.aspx?fid=146

Обращаю внимание, что такой трюк (2 пример) проходит с драйвером фокса, а не Jet
18 апр 13, 17:39    [14200005]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгенич
Ну ведь осталось то только с синтаксисом разобраться когда 2 команды

Все, что выполняется внутри OPENQUERY, относится к синтаксису linked server-а, а не MSSQL
18 апр 13, 17:41    [14200014]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Glory
Евгенич
Ну ведь осталось то только с синтаксисом разобраться когда 2 команды

Все, что выполняется внутри OPENQUERY, относится к синтаксису linked server-а, а не MSSQL


Где почитать про синтаксис Jet 4.0 ?
19 апр 13, 08:50    [14201526]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Уважаемые эксперты, провайдер Microsoft.Jet.OLEDB.4.0 без проблем создает dbf файлы с помощью dts import/export wizard - неужели никто не знает как это сделать sql командой?
22 апр 13, 15:12    [14213163]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
invm
Member

Откуда: Москва
Сообщений: 9402
Скачиваем и устанавливаем Microsoft Access Database Engine 2010 Redistributable

Создаем Linked-server
exec dbo.sp_addlinkedserver
 @server = N'dbf_data',
 @srvproduct = N'OLE DB Provider for ACE',
 @provider = N'Microsoft.ACE.OLEDB.12.0',
 @datasrc = N'С:\DBF',
 @provstr = N'DBASE IV';

exec sp_serveroption @server=N'dbf_data', @optname=N'rpc out', @optvalue=N'true';

Создаем таблицу
exec('create table Test (Name char(10))') at dbf_data;
22 апр 13, 16:21    [14213691]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгенич
неужели никто не знает как это сделать sql командой?

В sql-е нет dbf файлов

Евгенич
без проблем создает dbf файлы с помощью dts

Вот и используйте dts
22 апр 13, 17:46    [14214362]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
@@version
Guest
а можно огласить select @@version?
а то вроде как 2000 сервер, а вроде как вот это:
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
намекает на x64
22 апр 13, 18:22    [14214584]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
@@version
а можно огласить select @@version?
а то вроде как 2000 сервер, а вроде как вот это:
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
намекает на x64


да 2005 стоит на х64


Вот еще вариант подходит на VBScript
Const rsLink = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DATA;Extended Properties=dBASE IV;User ID=Admin;Password=;"
Set cnn = CreateObject("ADODB.Connection")
cnn.Open rsLink
cnn.Execute "CREATE TABLE TEST (NUM NUMBER, FIO CHAR(20), ADR CHAR(30), DOLG NUMBER(12,2), SMES NUMBER(12,2), SUM NUMBER(12,2));"
cnn.Close
Set cnn = Nothing


Только как теперь в созданную dbf перелить данные из sql таблицы?
23 апр 13, 12:50    [14217872]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Glory
Member

Откуда:
Сообщений: 104760
Евгенич
Только как теперь в созданную dbf перелить данные из sql таблицы?

Сделать еще один CreateObject("ADODB.Connection") уже к MSSQL
Выполнить запрос
И перенести данные из одного ADODB.Connection в другой ADODB.Connection
23 апр 13, 12:54    [14217907]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
qwerty112
Guest
Евгенич,

можно попробывать в том же коннекте к ДБФ выполнить что-то типа этого
cnn.Execute "insert into TEST (<список полей>) " & _
"select <список полей> " & _
"from [ODBC;Driver={SQL Server};Server=ляля;Database=ляляля;UID=sa;PWD=ляляля;].МаяСервернаяТаб"

с Акцессом прокатывало ...
23 апр 13, 13:12    [14218099]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Владимир СА
Member

Откуда:
Сообщений: 7863
Евгенич
...Вот еще вариант подходит на VBScript
Const rsLink = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DATA;Extended Properties=dBASE IV;User ID=Admin;Password=;"
Set cnn = CreateObject("ADODB.Connection")
cnn.Open rsLink
cnn.Execute "CREATE TABLE TEST (NUM NUMBER, FIO CHAR(20), ADR CHAR(30), DOLG NUMBER(12,2), SMES NUMBER(12,2), SUM NUMBER(12,2));"
cnn.Close
Set cnn = Nothing

Только как теперь в созданную dbf перелить данные из sql таблицы?
Дык кто тебе дальше запрещает на VB продолжать подключаться к MSSQL и вперед качать данные в DBF...?
23 апр 13, 13:23    [14218225]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
qwerty112
Евгенич,

можно попробывать в том же коннекте к ДБФ выполнить что-то типа этого
cnn.Execute "insert into TEST (<список полей>) " & _
"select <список полей> " & _
"from [ODBC;Driver={SQL Server};Server=ляля;Database=ляляля;UID=sa;PWD=ляляля;].МаяСервернаяТаб"

с Акцессом прокатывало ...



Так не прокатывает, орет что ошибка синтаксиса в предложении from
23 апр 13, 15:40    [14219261]     Ответить | Цитировать Сообщить модератору
 Re: create dbf  [new]
Евгенич
Member

Откуда:
Сообщений: 267
Владимир СА
Евгенич
...Вот еще вариант подходит на VBScript
Const rsLink = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DATA;Extended Properties=dBASE IV;User ID=Admin;Password=;"
Set cnn = CreateObject("ADODB.Connection")
cnn.Open rsLink
cnn.Execute "CREATE TABLE TEST (NUM NUMBER, FIO CHAR(20), ADR CHAR(30), DOLG NUMBER(12,2), SMES NUMBER(12,2), SUM NUMBER(12,2));"
cnn.Close
Set cnn = Nothing

Только как теперь в созданную dbf перелить данные из sql таблицы?
Дык кто тебе дальше запрещает на VB продолжать подключаться к MSSQL и вперед качать данные в DBF...?


Уважаемый Владимир СА, можете продемонстрировать пример?
23 апр 13, 15:41    [14219282]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить