Sql-запрос Из 1с

Тема в разделе "1C и всё что с ней связано", создана пользователем SeverBap, 6 ноя 2012.

  1. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Нужно на SQL выполнить запрос, результатом которого будет строковое значение хранимое в @filename
    Код ( (Unknown Language)):
        Если НЕ ПодключитьCOMОбъект(Путь) Тогда
    Возврат ""; 
    КонецЕсли;
    Команда = Новый COMОбъект("ADODB.Command");
    Команда.CommandTimeOut = 150000;
    Команда.NamedParameters = True;
    Команда.CommandType =1;
    Команда.ActiveConnection = COMСоединение;
    СтрокаКоманда=
    "declare @aln nvarchar(10)
    |declare @bln nvarchar(10)
    |declare @idrecdir int
    |declare @ts nvarchar(50)
    |declare @path nvarchar(1000)
    |declare @id nvarchar(50)
    |declare @filename nvarchar(150)
    |SET @id='407B9434-8B92-4A23-9725-32297F14B11E'
    |select top 1 @aln=case when [ALineNum]<[BLineNum] then [ALineNum] else [BLineNum] end,
    |@bln=case when [BLineNum]>[ALineNum] then [BLineNum] else [ALineNum] end,
    |@idrecdir=[IdRecDir],
    |@ts=replace(convert(nvarchar(10), [TimeStart], 121),'-','_')+'__'+replace(convert(nvarchar(20), [TimeStart], 114),':','_') FROM [oktell].[dbo].[A_Stat_Connections_1x1]
    |where Id=@id and isrecorded=1
    |set @path='C:\Program Files (x86)\oktell\Server\RecordedFiles\'
    |if (@idrecdir>0)
    |select @path=path from [oktell].[dbo].[A_Stat_RecordDirectories] where id=@idrecdir
    |set @filename=@path+replace(substring(@ts, 1, 10),'_','')+'\'+substring(@ts, 13, 2)+substring(@ts, 16, 2)+'\mix_'+@aln+'_'+@bln+'__'+@ts+'.wav';
    |";
    Команда.CommandText = СтрокаКоманда;     //"SELECT [TimeStart] FROM [oktell].[dbo].[A_Stat_Connections_1x1] WHeRE ID ='6A001395-1278-46A6-AE85-57F69A991CAB'";  //"+ВРег(СокрЛП(Результат))+"'";  //6A001395-1278-46A6-AE85-57F69A991CAB
    rs = Новый COMОбъект("ADODB.Recordset");
    RS = Команда.Execute();
    Для сч=1 по RS.Fields.Count Цикл
    сообщить(RS.Fields(0).Value);
    КонецЦикла;
    COMСоединение.close();
    Запрос выполняется но результат незнаю как получить!
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    В профайлере пробовали запустить? мне кажется что это таки не запрос, а команда.
     
  3. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Как тогда получить результат команды?
     
  4. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Рабочий вариант с хранимой процедурой:
    в 1С
    Код (Text):
    Команда = Новый COMОбъект("ADODB.Command");
    Команда.ActiveConnection = COMСоединение;
    Команда.CommandTimeOut    = 150000;
    Команда.CommandType   = 4;
    Команда.CommandText = "MyGetRecordPatch";
    Команда.Parameters(1).value=СокрЛП(ИдентификаторЗвонка);
    Команда.Prepared = true;
    Команда.NamedParameters  = true;
    RS=Команда.Execute();
    ЗначениеВозврата="";
    Если RS.State=1 Тогда
    ЗначениеВозврата=СокрЛП(RS.Fields(0).value);
    КонецЕсли;
    COMСоединение.close();
    Возврат ЗначениеВозврата;
    в хранимой процедуре:
    Код (Text):
    USE [oktell]
    GO
    /****** Object: StoredProcedure [dbo].[MyGetRecordPatch]    Script Date: 11/13/2012 16:52:30 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:      Afonkin
    -- Create date: 13.11.2012
    -- Description: Получение пути к файлу записи разговора
    -- =============================================
    ALTER PROCEDURE [dbo].[MyGetRecordPatch]
    -- Add the parameters for the stored procedure here
    @id nvarchar(50)
    AS
    BEGIN
    declare @aln nvarchar(10)
    declare @bln nvarchar(10)
    declare @idrecdir int
    declare @ts nvarchar(50)
    declare @path nvarchar(1000)
    declare @filename nvarchar(1000)
    select top 1 @aln=case when [ALineNum]<[BLineNum] then [ALineNum] else [BLineNum] end,
    @bln=case when [BLineNum]>[ALineNum] then [BLineNum] else [ALineNum] end,
    @idrecdir=[IdRecDir],
    @ts=replace(convert(nvarchar(10), [TimeStart], 121),'-','_')+'__'+replace(convert(nvarchar(20), [TimeStart], 114),':','_') FROM [oktell].[dbo].[A_Stat_Connections_1x1]
    where Id=@id and isrecorded=1
    set @path='C:\Program Files (x86)\oktell\Server\RecordedFiles\'
    if (@idrecdir>0)
    select @path=path from [oktell].[dbo].[A_Stat_RecordDirectories] where id=@idrecdir
    set @filename=@path+replace(substring(@ts, 1, 10),'_','')+'\'+substring(@ts, 13, 2)+substring(@ts, 16, 2)+'\mix_'+@aln+'_'+@bln+'__'+@ts+'.wav';
    SELECT @filename
    END
    Вот и все!
     
Загрузка...
Похожие Темы - Sql запрос Из
  1. sn@ke
    Ответов:
    5
    Просмотров:
    3.634
  2. mrtg
    Ответов:
    14
    Просмотров:
    217
  3. TonikVR
    Ответов:
    5
    Просмотров:
    1.081
  4. sery80
    Ответов:
    0
    Просмотров:
    1.425
  5. bumbarashek
    Ответов:
    4
    Просмотров:
    2.142

Поделиться этой страницей