powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / блокировка linked server
2 сообщений из 2, страница 1 из 1
блокировка linked server
    #34623721
tolikgag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создаю LINKED_SERVER

EXEC sp_addlinkedserver
@server = 'IP_DBF_SERVER',
@srvproduct = '',
@provider = 'MSDASQL',
@provstr = 'Driver={Microsoft Visual FoxPro Driver};'
+'UID=;SourceDB='С:\';SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;'
+'Collate=Russian;Null=No;Deleted=No'

создаю DBF-файл :

select * from OPENQUERY(IP_DBF_SERVER,'select * from Card;create dbf с:\df1()')

записываю даные в файл(всего 4 строчки):

insert OPENQUERY(IP_DBF_SERVER,''select * from df1'')(NP,PERIOD,RIK,KOD,TYP,TIN,S_NAR,S_DOX,S_TAXN,S_TAXP,OZN_DOX,D_PRIYN,D_ZVILN,OZN_PILG,OZNAKA)
select * from #t

потом пытаюсь считать этот файл при помощи clr-процедуры

select dbo.Ip_Get_File_Net('с:\df1.dbf')

Выдает ошибку :

Msg 6522, Level 16, State 1, Line 4
A .NET Framework error occurred during execution of user-defined routine or aggregate "IP_GET_FILE_NET":
System.Exception: The process cannot access the file 'f:\temp\df1.dbf' because it is being used by another process.
System.Exception:
at StoredProcedure.IP_GET_FILE_NET(SqlString file_nm)

Если подождать минуту - то все работает....

знаю нужно использовать директиву "REPROCESS"
но куда ее вписать незнаю...
так как с FoxPro никогда не работал....

может знает кто??
...
Рейтинг: 0 / 0
блокировка linked server
    #34624267
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tolikgagтак как с FoxPro никогда не работал....
А если создать так:

1. Установить на серере MS VFP Ole DB Provider 9.0 SP1
2. Создать Linked server:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
-- Create VFP OLE DB linked server to Dbf (free tables)
DECLARE @result int
exec @result = sp_helpserver @server = 'FOXPRO26_N'
if @result IS NULL
  SET @result= 1 
ELSE
  begin
    exec sp_dropserver @server = 'FOXPRO26_N'
  end
GO
-- Using OLEDB provider for VFP
sp_addlinkedserver @server = 'FOXPRO26_N', 
@srvproduct = 'VFP',
@provider = 'VFPOLEDB', 
@datasrc = '\\SERVER\data\', 
@provstr = ''
GO
3. После создания проверить в свойствах VFP provider (на SQL Server): Allow Inprocess и Nested Queries (должно быть разрешено)

Пример вставки записей в SQL server:
Код: plaintext
1.
2.
3.
4.
5.
6.
INSERT INTO [dbo].[WARH_MANUFACT]
  (WM_OPMANF, WM_NAME)
SELECT DISTINCT CN.CN_MANF, CN.CN_MANF
  FROM FOXPRO26_N...n_test as CN
  WHERE ltrim(rtrim(len(CN.CN_MANF)))> 0  and
  rtrim(CN.CN_MANF) NOT IN (SELECT DISTINCT RTRIM(WM_OPMANF) FROM [dbo].[WARH_MANUFACT] )
Запись в DBF файл аналогично, за исключением того, что имя файла будет что-то типа:

FOXPRO26_N...n_test

Если Вы пытаетесь это сделать через клиентское приложение на .NET, то самый простой способ использовать там напрямую VFP Ole DB Provider или всю логику поместить в ХП сервера и уже их вызывать из Вашего приложения знакомым путем...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / блокировка linked server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]