На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! информация о разделе
user posted imageДанный раздел не предназначается для обсуждения, здесь собираются только вопросы-ответы по тематике баз данных. Если есть желание обсудить какие-то вопросы, связанные с тематикой баз данных - перейдите в соответствующие разделы "Базы данных: общие вопросы" или "Базы данных: SQL".
Модераторы: Bas, Chow, JoeUser, MIF
  
    > [на редактирование] SQL-Server: запись файла
      SQL-Server: запись файла

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


      ExpandedWrap disabled
         
        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_OADestroy @FS


      Автор AQL
      With the best wishes, Vit
      I have done so much with so little for so long that I am now qualified to do anything with nothing
      Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script Execution time: 0,0769 ]   [ 17 queries used ]   [ Generated: 27.06.19, 00:18 GMT ]