Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
В предыдущей теме (Linked Server (dbf) + SQL) я задавала вопрос о том как получить информацию из .dbf файла для обработки SQL-лем Мне посоветовали использовать такой скрипт select * from Openrowset('MSDASQL','DRIVER={Microsoft dBase Driver {*.dbf}}','select * from \server\account\accent\dr_8.dbf') А как быть в том случае, если мне необходимо не выбирать из .dbf файла, а писать в него?? Помогите, плз!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2001, 16:27 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Используй DTS Package ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2001, 18:22 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Используй DTS Package ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2001, 18:23 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
А разве я могу запустить DTS Package из SP или T-SQL запроса??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2001, 19:16 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Да можно запустить 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2001, 20:57 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Можно выполнить несколько операций в 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) Вот и все собственно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2001, 11:14 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, OLEDB provider MSDASQL не подерживает обновление данных. Оригинальное сообшение об ошибке говорит об отсутствии поддержки транзакций этим провайдером, а т.к. всякая операция обновления вызывает неявную транзакцию ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2001, 21:19 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Путей, как всегда, несколько ) Первый (для законопослушных граждан) - использовать драйвер 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 Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 09:51 |
|
||
|
Как писать из SQL в .dbf
|
|||
|---|---|---|---|
|
#18+
Небольшое замечание по поводу BDE и MS. Сама MS сообщила о сокращении поддержки DBF-файлов и файлов Paradox. Для работы с ними рекомендует устанавливать BDE. Возможно, даже сама MS попросила Borland, чтобы их движок "хакал". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 11:15 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1826701]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 383ms |

| 0 / 0 |
