Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

не выполняется SQL запрос

не выполняется SQL запрос
Я
   Droning1C
 
29.05.21 - 11:22
ДатаНачала = Формат(ДатаНачалаЗапроса,"ДФ='dd-MM-yy HH:mm:ss'");
ДатаОкончания = Формат(ДатаОкончанияЗапроса,"ДФ='dd-MM-yy HH:mm:ss'");

СтрКоманда =
    "DECLARE @datetimeStart datetime = '" + ДатаНачала + "';" + "  
    |DECLARE @datetimeEnd datetime = '" + ДатаОкончания + "';" + "
    |SELECT CASE [TARGET_PLACE] When '1011100' Then 'Пила1' When '1011200' Then 'Пила2' End AS Пила
    |,[MATERIAL_NO] as АртикулШеллинг
    |,SUM(QUANTITY) as Количество
    |FROM [StorageManager].[dbo].[T3_MATERIALMOVEMENT]
    |Where [SAVE_DATETIME] >= @datetimeStart  and [SAVE_DATETIME] <= @datetimeEnd and [TARGET_PLACE] in ('1011100','1011200')
    |Group by [TARGET_PLACE],[MATERIAL_NO]
    |Order by [MATERIAL_NO]";

Попытка
Попытка

adocon=Новый COMОбъект("ADODB.Connection");
adocon.Open("Provider=SQLOLEDB.1;Data Source=192.168.62.13\sqlexpress;Initial Catalog=StorageManager;User Id=1;Password=123");

ado=Новый COMОбъект("ADODB.Command");
ado.ActiveConnection=adocon;

тз=новый таблицазначений;
ado.commandtext=СтрКоманда;
выборка=ado.execute();


Собственно, на последней строке срабатывает исключение. В чем может быть проблема?
 
 Партнерская программа EFSOL Oblako
   Droning1C
 
1 - 29.05.21 - 11:24
Сорри за строчки 

Попытка
Попытка

Забыл удалить.
   aka MIK
 
2 - 29.05.21 - 11:27
Проблема в запросе, это же очевидно )
   ДенисЧ
 
3 - 29.05.21 - 11:30
Главное, никому не говори сообщение об ошибке. Сами будем догадываться...
   acanta
 
4 - 29.05.21 - 11:31
Круто!
   Droning1C
 
5 - 29.05.21 - 12:11
(3) сообщение об ошибке выдает ""
   Droning1C
 
6 - 29.05.21 - 12:11
(2) запрос при вызове в субд выдает норм результат
   Droning1C
 
7 - 29.05.21 - 12:14
менял синонимы на инглишь, тоже не помогает.
   Droning1C
 
8 - 29.05.21 - 12:15
ДатаНачала = "'" + Формат(ДатаНачалаЗапроса,"ДФ='dd-MM-yy HH:mm:ss'") + "'";
ДатаОкончания = "'" + Формат(ДатаОкончанияЗапроса,"ДФ='dd-MM-yy HH:mm:ss'") + "'";
    

    СтрКоманда =

    "SELECT CASE [TARGET_PLACE] When '1011100' Then 'Пила1' When '1011200' Then 'Пила2' End AS Saw
    |,[MATERIAL_NO] as Art
    |,SUM(QUANTITY) as Quantity
    |FROM [StorageManager].[dbo].[T3_MATERIALMOVEMENT]
    |Where [SAVE_DATETIME] >= ДатаНачала  and [SAVE_DATETIME] <= ДатаОкончания and [TARGET_PLACE] in ('1011100','1011200')
    |Group by [TARGET_PLACE],[MATERIAL_NO]
    |Order by [MATERIAL_NO]";

СтрКоманда = СтрЗаменить(СтрКоманда,"ДатаНачала",ДатаНачала);
СтрКоманда = СтрЗаменить(СтрКоманда,"ДатаОкончания",ДатаОкончания);



Без DECLARE тоже не хочет
   ДенисЧ
 
9 - 29.05.21 - 12:19
Попробуй формат даты задать "ДФ=yyyyMMdd"
   Droning1C
 
10 - 29.05.21 - 12:26
(9) мне надо с временем(
   acht
 
11 - 29.05.21 - 12:27
(10) yyyyMMddHHmmss
   Sserj
 
12 - 29.05.21 - 14:10
Если у тебя SQL ниже 2016 то нужно сначала DECLARE а потом SET:

DECLARE @datetimeStart datetime
SET datetime = " + ДатаНачала + "
   Sserj
 
13 - 29.05.21 - 14:11
+(12) тьфу:

DECLARE @datetimeStart datetime
SET @datetimeStart = " + ДатаНачала + "
   mistеr
 
14 - 29.05.21 - 14:28
(5) Ты получи полный текст ошибки, потом приходи.
   youalex
 
15 - 29.05.21 - 15:02
(0)
DECLARE - вообще отдельная команда, не помню, чтобы ADO умел выполнять пакетные запросы.
Проще литералами вставлять непосредственно в текст скрипта
   acht
 
16 - 29.05.21 - 15:04
(12) Чо?
   acht
 
17 - 29.05.21 - 15:08
(15) Пакетные запросы (и поддержка .NextRowset) в ADO на усмотрение провайдера.

MSSQL - умеет, любит, практикует. Только надо где-то в начале сесии SET NOCOUNT ON воткнуть, иначе строка "100500 rows selected" будет его сбивать и проводить к закрытому rowset'у
   acht
 
18 - 29.05.21 - 15:10
(14) +Многа
Сейчас окажется, что там соединение не открыто, авторизация не пройдена, мы вообще к другому серверу ломимся.
   Droning1C
 
19 - 29.05.21 - 15:29
(14) с текстом ошибки я и сам справлюсь
   Droning1C
 
20 - 29.05.21 - 15:29
ДатаНачала = "'" + Формат(НачалоПериода,"ДФ='dd/MM/yyyy HH:mm:ss'") + "'";
    ДатаОкончания = "'" + Формат(КонецПериода,"ДФ='dd/MM/yyyy HH:mm:ss'") + "'";
    
    //

    СтрКоманда =
    "SELECT CASE [TARGET_PLACE] When '1011100' Then 'Schelling_fh4_1(241.339)' When '1011200' Then 'Schelling_fh4_2(241.340)' End AS Saw
    |,[MATERIAL_NO] as Art
    |,SUM(QUANTITY) as Quantity
    |FROM [StorageManager].[dbo].[T3_MATERIALMOVEMENT]
    |Where [SAVE_DATETIME] >= CONVERT(datetime, ДатаНачала, 104)  and [SAVE_DATETIME] <= CONVERT(datetime, ДатаОкончания, 104) and [TARGET_PLACE] in ('1011100','1011200')
    |Group by [TARGET_PLACE],[MATERIAL_NO]
    |Order by [MATERIAL_NO]";

    СтрКоманда = СтрЗаменить(СтрКоманда,"ДатаНачала",ДатаНачала);
    СтрКоманда = СтрЗаменить(СтрКоманда,"ДатаОкончания",ДатаОкончания);
   Droning1C
 
21 - 29.05.21 - 15:30
вот так заработало
   youalex
 
22 - 29.05.21 - 17:12
(17) Спасибо, добавлю себе в избранное) . Но литералами, или при необходимости через exec() - проще и нативнее.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.