Имя: Пароль:
1C
1С v8
не выполняется SQL запрос
0 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();


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

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

Забыл удалить.
2 aka MIK
 
29.05.21
11:27
Проблема в запросе, это же очевидно )
3 ДенисЧ
 
29.05.21
11:30
Главное, никому не говори сообщение об ошибке. Сами будем догадываться...
4 acanta
 
29.05.21
11:31
Круто!
5 Droning1C
 
29.05.21
12:11
(3) сообщение об ошибке выдает ""
6 Droning1C
 
29.05.21
12:11
(2) запрос при вызове в субд выдает норм результат
7 Droning1C
 
29.05.21
12:14
менял синонимы на инглишь, тоже не помогает.
8 Droning1C
 
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"
10 Droning1C
 
29.05.21
12:26
(9) мне надо с временем(
11 acht
 
29.05.21
12:27
(10) yyyyMMddHHmmss
12 Sserj
 
29.05.21
14:10
Если у тебя SQL ниже 2016 то нужно сначала DECLARE а потом SET:

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

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

MSSQL - умеет, любит, практикует. Только надо где-то в начале сесии SET NOCOUNT ON воткнуть, иначе строка "100500 rows selected" будет его сбивать и проводить к закрытому rowset'у
18 acht
 
29.05.21
15:10
(14) +Многа
Сейчас окажется, что там соединение не открыто, авторизация не пройдена, мы вообще к другому серверу ломимся.
19 Droning1C
 
29.05.21
15:29
(14) с текстом ошибки я и сам справлюсь
20 Droning1C
 
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]";

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