Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как писать из SQL в .dbf / 9 сообщений из 9, страница 1 из 1
26.04.2001, 16:27
    #32004901
NadinA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
В предыдущей теме (Linked Server (dbf) + SQL) я задавала вопрос о том как получить информацию из .dbf файла для обработки SQL-лем
Мне посоветовали использовать такой скрипт

select * from Openrowset('MSDASQL','DRIVER={Microsoft dBase Driver {*.dbf}}','select * from \server\account\accent\dr_8.dbf')

А как быть в том случае, если мне необходимо не выбирать из .dbf файла, а писать в него??
Помогите, плз!!!
...
Рейтинг: 0 / 0
26.04.2001, 18:22
    #32004915
ALLEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Используй DTS Package
...
Рейтинг: 0 / 0
26.04.2001, 18:23
    #32004917
ALLEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Используй DTS Package
...
Рейтинг: 0 / 0
26.04.2001, 19:16
    #32004921
NadinA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
А разве я могу запустить DTS Package из SP или T-SQL запроса???
...
Рейтинг: 0 / 0
26.04.2001, 20:57
    #32004923
ALLEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Да можно запустить DTS из запроса
Читай делее :
Q. How can I run a DTS package from within SQL Server - e.g. a stored-procedure?

A. You can either :-

1. Run from xp_cmdshell "dtsrun dtsfile"

or

2. Use sp_OA sp's. Example of this is below (courtesy of Bill Hodghead)

if exists (select * from sysobjects where id = object_id(N'[dbo].[sp_displayoaerrorinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_displayoaerrorinfo]
GO

if exists (select * from sysobjects where id = object_id(N'[dbo].[sp_displaypkgerrors]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_displaypkgerrors]
GO

if exists (select * from sysobjects where id = object_id(N'[dbo].[sp_executepackage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp_executepackage]
GO


create proc sp_displayoaerrorinfo
@object as int
as
Declare @hr int
DECLARE @output varchar(255)
DECLARE @source varchar(255)
DECLARE @description varchar(255)

PRINT 'OLE Automation Error Information'

EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END

ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
GO


create proc sp_displaypkgerrors
@pkg as int
as
declare @numsteps int
declare @steps int
declare @step int
declare @stepresult int
declare @pkgresult int
declare @hr int

select @pkgresult = 0

EXEC @hr = sp_OAGetProperty @pkg, 'Steps', @steps OUTPUT
IF @hr <> 0
BEGIN
print 'Unable to get steps'
EXEC sp_displayoaerrorinfo @pkg --, @hr
RETURN
END

EXEC @hr = sp_OAGetProperty @steps, 'Count', @numsteps OUTPUT
IF @hr <> 0
BEGIN
print 'Unable to get number of steps'
EXEC sp_displayoaerrorinfo @steps --, @hr
RETURN
END

while @numsteps > 0
Begin
EXEC @hr = sp_OAGetProperty @steps, 'Item', @step OUTPUT, @numsteps
IF @hr <> 0
BEGIN
print 'Unable to get step'
EXEC sp_displayoaerrorinfo @steps --, @hr
RETURN
END

EXEC @hr = sp_OAGetProperty @step, 'ExecutionResult', @stepresult OUTPUT
IF @hr <> 0
BEGIN
print 'Unable to get ExecutionResult'
EXEC sp_displayoaerrorinfo @step --, @hr
RETURN
END

select @numsteps = @numsteps - 1
select @pkgresult = @pkgresult + @stepresult
end

if @pkgresult > 0
print 'Package had ' + cast(@pkgresult as varchar) + ' failed step(s)'
else
print 'Packge Succeeded'

GO


create proc sp_executepackage
@packagename varchar(255), --package name, gets most recent version
@userpwd varchar(255) = Null, --login pwd
@intsecurity bit = 0, --use non-zero to indicate integrated security
@pkgPwd varchar(255) = '' --package password
as
declare @hr int
declare @object int

--create a package object
EXEC @hr = sp_OACreate 'DTS.Package', @object OUTPUT
if @hr <> 0
Begin
EXEC sp_displayoaerrorinfo @object --, @hr
RETURN
end

--load the package (ADD integrated security support)
declare @svr varchar(15)
declare @login varchar(15)
select @login = SUSER_NAME()
select @svr = HOST_NAME()
declare @flag int
select @flag = 0

if @intsecurity = 0
if @userpwd = Null
EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL, @ServerName=@svr, @ServerUserName=@login, @PackageName=@packagename, @Flags=@flag, @PackagePassword = @pkgPwd
-- ServerName As String, [ServerUserName As String], [ServerPassword As String], [Flags As DTSSQLServerStorageFlags = DTSSQLStgFlag_Default], [PackagePassword As String], [PackageGuid As String], [PackageVersionGuid As String], [PackageName As String], [pVarPersistStgOfHost])
else
EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL, @ServerName=@svr, @ServerUserName=@login, @PackageName=@packagename, @Flags=@flag, @PackagePassword = @pkgPwd, @ServerPassword = @userpwd
else
begin
select @flag = 256
EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL, @ServerName=@svr, @PackageName=@packagename, @Flags=@flag, @PackagePassword = @pkgPwd
end

IF @hr <> 0
BEGIN
print 'LoadFromSQLServer failed'
EXEC sp_displayoaerrorinfo @object --, @hr
RETURN
END

--execute it
EXEC @hr = sp_OAMethod @object, 'Execute'
IF @hr <> 0
BEGIN
print 'Execute failed'
EXEC sp_displayoaerrorinfo @object --, @hr
RETURN
END

--return the step errors as a recordset
exec sp_displaypkgerrors @object

-- unitialize the package
EXEC @hr = sp_OAMethod @object, 'UnInitialize'
IF @hr <> 0
BEGIN
print 'UnInitialize failed'
EXEC sp_displayoaerrorinfo @object --, @hr
RETURN
END

-- release the package object
EXEC @hr = sp_OADestroy @object
if @hr <> 0
Begin
EXEC sp_displayoaerrorinfo @object --, @hr
RETURN
end
GO


Удачи Alex
...
Рейтинг: 0 / 0
27.04.2001, 11:14
    #32004950
Sergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Можно выполнить несколько операций в MS Visual FoxPro:

con=SQLConnect("<DSN Name>","<User Name>","<Password>")
SqlExec(con,"select * from tablename","cursor_name")
select cursor_name
copy to <TableName.dbf> type FOX2X

SQLDisconnect(con)

Вот и все собственно
...
Рейтинг: 0 / 0
27.04.2001, 21:19
    #32004981
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Насколько я понял, OLEDB provider MSDASQL не подерживает обновление данных. Оригинальное сообшение об ошибке говорит об отсутствии поддержки транзакций этим провайдером, а т.к. всякая операция обновления вызывает неявную транзакцию ...
...
Рейтинг: 0 / 0
24.05.2001, 09:51
    #32006127
Как писать из SQL в .dbf
Путей, как всегда, несколько )
Первый (для законопослушных граждан) - использовать драйвер ODBC DBF от сторонних производителей, например, от фирмы MERANT (www.merant.com). Этот драйвер позволяет выделывать с прилинкованным сервером DBF всё, что вздумается, включая работу с индексами. Кстати, на сайте можно скачать пробную версию, которая, по-моему, работает сколько хочешь, но позволяет ставить только один драйвер. Решение самое простое и правильно работающее.
Второй путь. Надо немного поколдовать на драйвером MS ODBC DBF (Я пробовал только с файлами dBase, за остальные сказать не могу). Так вот: врёт Майкрософт, поддерживает их драйвер такую функциональность, просто она закрыта. Как именно она открывается, я не выяснил, но знаю шаманский путь: надо установить MDAC 2.6, а затем - Borland BDE 5.01 (возможно, всё работет и с другими версиями, но я работал именно с этими). И - о чудо! - обыкновенный Microsoft dBase driver ODBC делает с прилинкованным сервером DBF и DELETE, и UPDATE, и INSERT. Ни о каких индексах, само собой, тут мечтать не приходится.
И на закуску третий путь - самый кривой, но тоже работающий. Надо сделать следующее:
1. Создать в Access БД и прилинковать к ней таблицу DBF
2. Прилинковать к SQL созданную БД Access либо через OLE DB, либо через mdb ODBC
3. Всё. Полученный LINKED SERVER работает с DBF через mdb на DELETE-UPDATE-INSERT также, как если бы он делал это с файлом MS Access )
Замечания:
1. Последжний вариант работает сразу только с MS Access 97. С MS Access 2000 такая фенька проходит тоже, но только после установки в систему Borland BDE. Вот такой волшебный у Borland движок - хакает чужие средства доступа
2. Для всех случаев в системе стоял MDAC 2.6
Удачи!
...
Рейтинг: 0 / 0
24.05.2001, 11:15
    #32006138
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как писать из SQL в .dbf
Небольшое замечание по поводу BDE и MS. Сама MS сообщила о сокращении поддержки DBF-файлов и файлов Paradox. Для работы с ними рекомендует устанавливать BDE. Возможно, даже сама MS попросила Borland, чтобы их движок "хакал".
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как писать из SQL в .dbf / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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