Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
Добрый день! Встала задача по работе с dbf, использую тестовый сервер

SELECT @@VERSION
Microsoft SQL Server 2008 R2 (CTP) - 10.50.1092.20 (Intel X86) Jul 22 2009 21:29:56 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)


почитал форум, в результате нашел драйвера VFPOLEDB + SP2 поставил их, создал
EXEC  sp_addlinkedserver 
        @server = 'FOX_OLEDB', 
        @provider = 'VFPOLEDB',
        @srvproduct = '',
        @datasrc ='D:\tmp',
        @provstr = 'Collating Sequence=RUSSIAN'

селект успешно отрабатывает на EXTKART.dbf (первый попавшийся под руку dbf-файл)

SELECT * FROM FOX_OLEDB...EXTKART

теперь мне необходимо создать табличку, пишу

select *
from OPENQUERY(FOX_OLEDB,
'select * from EXTKART; create newtable d:\tmp (ID (int))' )

но файл не создается, никаких ошибок провайдер не выдает. права у учетки на запись есть.

xp_cmdshell 'copy D:\tmp\EXTKART.dbf D:\tmp\EXTKART_2.dbf'

xp_cmdshell 'dir d:\tmp'

Том в устройстве D имеет метку DATA
NULL
Содержимое папки d:\tmp
NULL
21.10.2009 14:30 <DIR> .
21.10.2009 14:30 <DIR> ..
21.10.2009 11:28 102 396 EXTKART.DBF
21.10.2009 11:28 102 396 EXTKART_2.dbf
2 файлов 204 792 байт
2 папок 4 425 261 056 байт свободно
NULL
21 окт 09, 12:33    [7816865]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Уже давно есть

EXECUTE(...) AT linked_server_name


create newtable d:\tmp (ID (int)) - а где тут имя таблицы то ?
21 окт 09, 12:35    [7816895]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1515
В чем я не прав?,
я уже не единожды приводил тут вариант решения.
21 окт 09, 12:55    [7817084]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
select *
from OPENQUERY(FOX_OLEDB,
'select * from EXTKART; CREATE TABLE NEWTABLE (ID int)' )


SELECT     *
FROM         
	OPENROWSET('vfpoledb', 'D:\tmp';'';'', 'CREATE TABLE NEWTABLE(ID INT)')


В чем разница двух запросов? первый не создает таблицу, второй создает..
21 окт 09, 12:57    [7817093]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Sergey Sizov
В чем я не прав?,
я уже не единожды приводил тут вариант решения.

Найдите три различия

Create taBLE sss(id c(10),name c(50))
create newtable d:\tmp (ID (int))
21 окт 09, 12:57    [7817094]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
Sergey Sizov
В чем я не прав?,
я уже не единожды приводил тут вариант решения.


тогда можно вопрос, чтоб долго не мучиться. как удалить созданную таблицу?
21 окт 09, 13:20    [7817273]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1515
В чем я не прав?
Sergey Sizov
В чем я не прав?,
я уже не единожды приводил тут вариант решения.


тогда можно вопрос, чтоб долго не мучиться. как удалить созданную таблицу?
Вместо create table... написать delete file ...
21 окт 09, 13:22    [7817293]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
Sergey Sizov
В чем я не прав?
Sergey Sizov
В чем я не прав?,
я уже не единожды приводил тут вариант решения.


тогда можно вопрос, чтоб долго не мучиться. как удалить созданную таблицу?
Вместо create table... написать delete file ...


попробовал, почему то не удаляет - ну и да ладно. буду использовать

xp_cmdshell 'del d:\tmp\sss.dbf'
21 окт 09, 13:38    [7817459]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
:)-:)
Guest
может поможет инфа...
начиная кажется с версии 8.0
VFPOLEDB умеет выполнять неоткомпиленные процедуры (компилит при первом обращении)

соответственно, можете сделать файлик proc_name.prg, внутри которого написать процедуру proc_name на фоксе. один раз такое изврещение пришлось юзать (года 3 назад).
21 окт 09, 22:22    [7820749]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
еще один небольшой вопрос

если внутри execscript(">256 символов"), отказывается работать.

попробовал перенос строки +;
но что то не помогает. кто знает подскажите пожалуйста.
28 окт 09, 14:23    [7850241]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
Sergey Sizov.
Guest
В чем я не прав?,
execscript(filetostr(<файл с командами>))
В файле с командами
create table newtsable (...)
select ...
insert ...
и т.д. по вкусу.
28 окт 09, 15:12    [7850643]     Ответить | Цитировать Сообщить модератору
 Re: VFPOLEDB, DBF  [new]
В чем я не прав?
Guest
Sergey Sizov.,

спасибо! много времени сэкономил
29 окт 09, 09:10    [7853439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить