Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Запись файла

01.01.2007
AQL

Пример простейшей процедуры на Transact-SQL, создающей файл и записывающий в неё что нибудь. Для этого используется WindowsScripting.

WindowsScripting - если грубо - это набор OLE-объектов, которые можно использовать для целей управления системой. Их удобно использовать там, где невозможно достучаться к функциям Win32 API напрямую, например, в SQL Server-е.

Ниже приводится исходник на Transact-SQL с комментариями, как это сделать.

Надеюсь, что он достаточно хорошо прокомментирован.

DECLARE @FileName varchar(255), 
--текст, который необходимо записать в файл--
@sFileText varchar(8000),
--директория файла--
@sFileDir varchar(8000),
--имя файла--
@sFileName varchar(8000),
@FS int, 
@FileID int, 
@hr int,
@OLEResult int, 
@source varchar(30), 
@desc varchar (200),
@bFolder bit
--функция sp_OACreate создаёт OLE объект 'Scripting.FileSystemObject'
EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT
--обязательно обработать ошибочные ситуации
IF @OLEResult <> 0 
BEGIN
GOTO Error_Handler
END
select @sFileDir = 'c:'
select @sFileName = @sFileDir + '123.log'
/*
у Scripting.FileSystemObject есть много интересных методов для работы с файлами 
и директориями, подробнее их можно подсмотреть, например, в MSDN.
*/
--проверить - существует ли заданная директория, для этого вызовем функцию 'FolderExists'
--ранее созданого OLE объекта
execute @OLEResult = sp_OAMethod @FS,'FolderExists',@bFolder OUT, @sFileDir
IF @OLEResult <> 0 Or @bFolder = 0
BEGIN
  --а если не существует - то создать её----
  execute @OLEResult = sp_OAMethod @FS,'CreateFolder',@bFolder OUT, @sFileDir
  IF @OLEResult <> 0 And @bFolder = 0
  BEGIN
    GOTO Error_Handler    
  END
END
--создать файл---
execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT,@FileName
IF @OLEResult <> 0 
BEGIN
  GOTO Error_Handler
END
--создадим строку, которую будем записывать в файл---
set @sFileText = 'Hello first file!' + char(0)
-----------------записать строку в файл---
execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @sFileText
IF @OLEResult <> 0 
BEGIN
  GOTO Error_Handler
END
goto Done
Error_Handler:  --обработаем ошибку---
EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
Done:    
--очистим за собой всяческий OLE-мусор----
EXECUTE @OLEResult = sp_OADestroy @FileID
EXECUTE @OLEResult = sp_OADestr 
Previous page:
Аналог функции FormatDateTime на TSQL
Top:
DRKB
Next page:
Как использовать в UDF функциях GetDate() и NewID()