Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Экспорт данных в FoxPro (помогите ламеру !)  [new]
Головин Егор
Member

Откуда: Йошкар-Ола
Сообщений: 30
Мне нужно создать пустой dbf -файл и записать в него данные. Или удалить данные из готового файла и вставить новые. Я прочитал здешнюю статью про работу с DBF формата FoxPro и Clipper(CDX) и сделал так:

Сначала я создаю Linked Server
EXEC sp_addlinkedserver
@server = 'FOX_ODBC1',
@provider = 'MSDASQL',
@srvproduct = '',
@provstr = 'Driver={Microsoft Visual FoxPro Driver};
UID=;SourceDB=d:\446093.dbf;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=No'

Если попытаться выполнить SELECT из той таблицы

SELECT * FROM OPENQUERY(FOX_ODBC1, 'Select * from d:\446093.dbf')

Работает.

Создать пустой dbf файл

select *
from OPENQUERY(FOX_ODBC1,
'select * from d:\446093.dbf ;create dbf d:\446092.dbf (id c(10),name c(50)) '
) a

Тоже получается.

Но, когда я пытаюсь удалить данные из этого файла.

DELETE FROM OPENQUERY( FOX_ODBC1, 'Select * from d:\446093.dbf')
Мне сообщают следующее

или вставить данные

INSERT INTO OPENQUERY( FOX_ODBC1, 'Select * from d:\446093.dbf')
SELECT MaterialCode, Qty, Mass
FROM dbo.funAssemblyNormaPartsPurchased(82) AS funAssemblyNormaPartsPurchased_1
WHERE (oberType = 1)

Мне пишут следующее:

OLE DB provider "MSDASQL" for linked server "FOX_ODBC1" returned message "Не удается обновить запрос, поскольку предложение From не является именем таблицы.".

Наверное я что-то не так пишу. Потому, что синтаксисом не владею.

Подскажите, пожалуйста как правильно, только пишите попонятнее, потому, что про linkedserver и openquery я только сейчас и прочитал и не очень представляю чё это такое, а в Fox'e ваще ничё не понимаю.
14 июн 10, 11:30    [8938126]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
valex13
Member

Откуда: Иркутск
Сообщений: 346
А добавить/удалить непосредственно SQL коммандой не пробовали?
SELECT * FROM OPENQUERY(FOX_ODBC1, 'Insert into d:\446093.dbf (test) Values(1)')
???
15 июн 10, 06:58    [8940905]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
Головин Егор
Member

Откуда: Йошкар-Ола
Сообщений: 30
Попробовал:
SELECT * FROM OPENQUERY(FOX_ODBC4, 'INSERT INTO  d:\446092.dbf Values (1,0)')

Пишет
Msg 7357, Level 16, State 2, Line 1
Cannot process the object "INSERT INTO d:\446092.dbf Values (1,0)". The OLE DB provider "MSDASQL" for linked server "FOX_ODBC4" indicates that either the object has no columns or the current user does not have permissions on that object.


С удалением
SELECT * FROM OPENQUERY(FOX_ODBC4, 'DELETE FROM  d:\446092.dbf')
та же фигня

А если так
EXECUTE ('SELECT * FROM 446093') AT FOX_ODBC4 

то

Msg 7411, Level 16, State 1, Line 1
Server 'FOX_ODBC4' is not configured for RPC.
15 июн 10, 08:30    [8940992]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
Головин Егор
Member

Откуда: Йошкар-Ола
Сообщений: 30
Сконфигурировал сервер для RPC
EXEC sp_serveroption 'FOX_ODBC4', 'rpc out', 'true'

запускаю

EXECUTE ('INSERT INTO  d:\446093.dbf values (0,0,0) AT FOX_ODBC4 ')

выдаёт

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'd'.


а SELECT работает

EXECUTE ('SELECT * FROM d:\446094.dbf') AT FOX_ODBC4 

Выходит INSERT и DELETE для FOXa нужно писать как-то по-другому ?
15 июн 10, 10:34    [8941417]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Головин Егор


Выходит INSERT и DELETE для FOXa нужно писать как-то по-другому ?

Ну логично предположить, что синтаксис FOXa отличается от синтаксиса TSQL
15 июн 10, 10:38    [8941448]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
Добрый пингвин
Member

Откуда:
Сообщений: 5
что то типа 'Use d:\446092.dbf in 0 alias Mytbl ; Insert into Mytbl ..... ' подробнее тебе в конфе по фоксу подскажут.
15 июн 10, 18:21    [8946216]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
volkandrey
Member

Откуда:
Сообщений: 100
У меня была похожая проблема, не в какую не хотел работать запрос:
DELETE FROM OpenQuery(oledb_odbc, 'select * from \\c-vgdtst02\Temp\prod\PROD.DBF')
WHERE Id_Prod IN (SELECT Object FROM Objects2ProdDBF)

Появлялось сообщение об ошибке:

OLE DB provider "MSDASQL" for linked server "oledb_odbc" returned message "Query cannot be updated because the FROM clause is not a single simple table name.".
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "oledb_odbc" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "oledb_odbc".

После изменения имени сервера на его IP адрес, всё чудесно отработало.
DELETE FROM OpenQuery(oledb_odbc,
'select * from \\172.29.232.121\Temp\prod\PROD.DBF')
WHERE Id_Prod IN
(SELECT Object FROM Objects2ProdDBF)
18 июл 12, 10:07    [12881767]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в FoxPro (помогите ламеру !)  [new]
vlas
Member

Откуда: Москва
Сообщений: 112
При инициализации у вас в Linked Server прописано SourceDB=d:\446093.dbf. SourceDB не может быть путем к dbf файлу!
18 июл 12, 11:14    [12882206]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить