проверка существаования переменной из запроса SQL
Есть запрос SQL
пишет Ошибка при вызове метода контекста (Fields): Произошла исключительная ситуация (ADODB.Recordset): Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.
если Рез32.Fields("summa1").Value()<> неопределено
По ходу запрос не возвращает сумму1- тоесть выполняется 2 условие. как можно проверить что сумма1 есть?
пишет Ошибка при вызове метода контекста (Fields): Произошла исключительная ситуация (ADODB.Recordset): Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.
если Рез32.Fields("summa1").Value()<> неопределено
Код |
---|
ЗапросSQLВыб32="
|IF EXISTS
|(select cards_discount.date_end
| from cards_discount
|where cards_discount.date_end is NULL
|)
|begin
|(
|Select sum(sum) as summa1
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102) and sales.date <= CONVERT(DATETIME, '"+Формат(Дата(дата_енд),"ДФ=yyyy-MM-dd")+"',102) )
|)
|End
|Else
|begin
|(Select sum(sum) as summa2
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102))
|)
|End";
ЗапросВыб32.CommandText = ЗапросSQLВыб32;
Рез32=ЗапросВыб32.Execute();
Если Рез32.EOF() Тогда
ФлагЗапросаВыб32=Ложь;
Иначе
ФлагЗапросаВыб32 = Истина;
[B]если Рез32.Fields("summa1").Value()<> неопределено[/B]
тогда
сумма1 = Рез32.Fields("summa1").Value();
КонецЕсли;
если Рез32.Fields("summa2").Value()<> неопределено
тогда
сумма2 = Рез32.Fields("summa2").Value();
КонецЕсли;
Показать полностью |
По ходу запрос не возвращает сумму1- тоесть выполняется 2 условие. как можно проверить что сумма1 есть?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) |Select sum(sum) as summa1
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102) and sales.date <= CONVERT(DATETIME, '"+Формат(Дата(дата_енд),"ДФ=yyyy-MM-dd")+"',102) ) |)
|End
|Else
|begin
|(Select sum(sum) as summa2
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102))
|)
А чем выделенные фрагменты отличаются?
PS опишите логику sql запроса, если нетрудно. а тока пока он странный...весьма...и весь запрос сводится к простой выборке
Select sum(sum) as summa2
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME и т.д.
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102) and sales.date <= CONVERT(DATETIME, '"+Формат(Дата(дата_енд),"ДФ=yyyy-MM-dd")+"',102) ) |)
|End
|Else
|begin
|(Select sum(sum) as summa2
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME, '"+Формат(Дата(дата_старт),"ДФ=yyyy-MM-dd")+"',102))
|)
А чем выделенные фрагменты отличаются?
PS опишите логику sql запроса, если нетрудно. а тока пока он странный...весьма...и весь запрос сводится к простой выборке
Select sum(sum) as summa2
|From dbo.sales, dbo.cards, dbo.cards_discount
|where code_discount_1c82='"+коде_дисконт_1с82+"' and (sales.date >= CONVERT(DATETIME и т.д.
(3) MagTux,
спасибо помогло, возник др вопрос))
Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Error converting data type varchar to numeric.
Рез4=ЗапросВыб4.Execute();
спасибо помогло, возник др вопрос))
ЗапросSQLВыб4="
|SELECT top 1 range , discount
|FROM discount_size
|WHERE (range < '"+СокрЛП( Число(ПерСумм))+"')
|order by range desc ";
ЗапросВыб4.CommandText = ЗапросSQLВыб4;
Рез4=ЗапросВыб4.Execute();
ПоказатьОшибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Error converting data type varchar to numeric.
Рез4=ЗапросВыб4.Execute();
Почему ты уверено не используешь параметры? (хотя я советовал еще в прошлом твоем вопросе).
1. Запрос по сумма какой-то неправильный. Мне кажется его нужно переписать. Сейчас сказать точно не могу. Как бы он выглядил в 1С?
2. Параметры можно передавать либо сбором строки(в том числе и через стрЗаменить и подобные приемчики). Ну нарыватся на ошибки. Можно в запросе конвертить.Например - Convert(numeric,'10') . И получать дополнительное расходование времени на преобразовании .А можно добавлять параметры в ADO.
SQL_команда = Новый COMОбъект("ADODB.Command"); //Команда выполняемая на Скуль
SQL_Выборка = Новый COMОбъект("ADODB.Recordset"); //Выборка зезультата выполненной команды
SQL_команда.ActiveConnection = Connection;
SQL_команда.CommandText = СтрокаКоманды;
SQL_команда.CommandType = ТипКомандыАДО(ТипКоманды);
Для Каждого СтруктураСтрокиПараметра Из МассивПараметров Цикл
ИмяПараметра = СтруктураСтрокиПараметра.ИмяПараметра;
ТипПараметра = СтруктураСтрокиПараметра.ТипПараметра; // "adParamInput"
ЗначениеПараметра = СтруктураСтрокиПараметра.ИмяПараметра;
ТипЗначенияПараметра = СтруктураСтрокиПараметра.ТипЗначенияПараметра; //"adWChar"
Параметр_SQL_команды = SQL_команда.CreateParameter(ИмяПараметра, КонстантаАДО(ТипЗначенияПараметра),
ТипПараметраАДО(ТипПараметра), 9, ЗначениеПараметра);
SQL_команда.Parameters.Append(Параметр_SQL_команды);
КонецЦикла;
Попытка
SQL_Выборка = SQL_команда.Execute();
Исключение
//#Если Клиент Тогда
////Сообщить(ОписаниеОшибки());
//#КонецЕсли
КонецПопытки;
//////////////
////////////////
////////////////
Функция КонстантаАДО(Конст) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = "adEmpty" Тогда
Возврат 0;
ИначеЕсли АдоКонст = "adtinyint" Тогда
Возврат 16;
ИначеЕсли АдоКонст = "adsmallint" Тогда
Возврат 2;
ИначеЕсли АдоКонст = "adinteger" Тогда
Возврат 3;
ИначеЕсли АдоКонст = "adbigint" Тогда
Возврат 20;
ИначеЕсли АдоКонст = "adunsignedtinyint" Тогда
Возврат 17;
ИначеЕсли АдоКонст = "adunsignedsmallint" Тогда
Возврат 18;
ИначеЕсли АдоКонст = "adunsignedint" Тогда
Возврат 19;
ИначеЕсли АдоКонст = "adunsignedbigint" Тогда
Возврат 21;
ИначеЕсли АдоКонст = "adsingle" Тогда
Возврат 4;
ИначеЕсли АдоКонст = "addouble" Тогда
Возврат 5;
ИначеЕсли АдоКонст = "adcurrency" Тогда
Возврат 6;
ИначеЕсли АдоКонст = "addecimal" Тогда
Возврат 14;
ИначеЕсли АдоКонст = "adnumeric" Тогда
Возврат 131;
ИначеЕсли АдоКонст = "adboolean" Тогда
Возврат 11;
ИначеЕсли АдоКонст = "aderror" Тогда
Возврат 10;
ИначеЕсли АдоКонст = "aduserdefined" Тогда
Возврат 132;
ИначеЕсли АдоКонст = "advariant" Тогда
Возврат 12;
ИначеЕсли АдоКонст = "adidispatch" Тогда
Возврат 9;
ИначеЕсли АдоКонст = "adiunknown" Тогда
Возврат 13;
ИначеЕсли АдоКонст = "adguid" Тогда
Возврат 72;
ИначеЕсли АдоКонст = "addate" Тогда
Возврат 7;
ИначеЕсли АдоКонст = "addbdate" Тогда
Возврат 133;
ИначеЕсли АдоКонст = "addbtime" Тогда
Возврат 134;
ИначеЕсли АдоКонст = "addbtimestamp" Тогда
Возврат 135;
ИначеЕсли АдоКонст = "adbstr" Тогда
Возврат 8;
ИначеЕсли АдоКонст = "adchar" Тогда
Возврат 129;
ИначеЕсли АдоКонст = "advarchar" Тогда
Возврат 200;
ИначеЕсли АдоКонст = "adlongvarchar" Тогда
Возврат 201;
ИначеЕсли АдоКонст = "adwchar" Тогда
Возврат 130;
ИначеЕсли АдоКонст = "advarwchar" Тогда
Возврат 202;
ИначеЕсли АдоКонст = "adlongvarwchar" Тогда
Возврат 203;
ИначеЕсли АдоКонст = "adbinary" Тогда
Возврат 128;
ИначеЕсли АдоКонст = "advarbinary" Тогда
Возврат 204;
ИначеЕсли АдоКонст = "adlongvarbinary" Тогда
Возврат 205;
Иначе Возврат 0;
КонецЕсли;
КонецФункции
Функция ТипПараметраАДО(Конст) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = "adparamunknown" Тогда
Возврат 0;
ИначеЕсли АдоКонст = "adparaminput" Тогда
Возврат 1;
ИначеЕсли АдоКонст = "adparamoutput" Тогда
Возврат 2;
ИначеЕсли АдоКонст = "adparaminputoutput" Тогда
Возврат 3;
ИначеЕсли АдоКонст = "adparamreturnvalue" Тогда
Возврат 4;
КонецЕсли;
КонецФункции
PS ф-ции были на этом сайте, что-то поменял. Справочник по ADO есть где угодно.
1. Запрос по сумма какой-то неправильный. Мне кажется его нужно переписать. Сейчас сказать точно не могу. Как бы он выглядил в 1С?
2. Параметры можно передавать либо сбором строки(в том числе и через стрЗаменить и подобные приемчики). Ну нарыватся на ошибки. Можно в запросе конвертить.Например - Convert(numeric,'10') . И получать дополнительное расходование времени на преобразовании .А можно добавлять параметры в ADO.
SQL_команда = Новый COMОбъект("ADODB.Command"); //Команда выполняемая на Скуль
SQL_Выборка = Новый COMОбъект("ADODB.Recordset"); //Выборка зезультата выполненной команды
SQL_команда.ActiveConnection = Connection;
SQL_команда.CommandText = СтрокаКоманды;
SQL_команда.CommandType = ТипКомандыАДО(ТипКоманды);
Для Каждого СтруктураСтрокиПараметра Из МассивПараметров Цикл
ИмяПараметра = СтруктураСтрокиПараметра.ИмяПараметра;
ТипПараметра = СтруктураСтрокиПараметра.ТипПараметра; // "adParamInput"
ЗначениеПараметра = СтруктураСтрокиПараметра.ИмяПараметра;
ТипЗначенияПараметра = СтруктураСтрокиПараметра.ТипЗначенияПараметра; //"adWChar"
Параметр_SQL_команды = SQL_команда.CreateParameter(ИмяПараметра, КонстантаАДО(ТипЗначенияПараметра),
ТипПараметраАДО(ТипПараметра), 9, ЗначениеПараметра);
SQL_команда.Parameters.Append(Параметр_SQL_команды);
КонецЦикла;
Попытка
SQL_Выборка = SQL_команда.Execute();
Исключение
//#Если Клиент Тогда
////Сообщить(ОписаниеОшибки());
//#КонецЕсли
КонецПопытки;
//////////////
////////////////
////////////////
Функция КонстантаАДО(Конст) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = "adEmpty" Тогда
Возврат 0;
ИначеЕсли АдоКонст = "adtinyint" Тогда
Возврат 16;
ИначеЕсли АдоКонст = "adsmallint" Тогда
Возврат 2;
ИначеЕсли АдоКонст = "adinteger" Тогда
Возврат 3;
ИначеЕсли АдоКонст = "adbigint" Тогда
Возврат 20;
ИначеЕсли АдоКонст = "adunsignedtinyint" Тогда
Возврат 17;
ИначеЕсли АдоКонст = "adunsignedsmallint" Тогда
Возврат 18;
ИначеЕсли АдоКонст = "adunsignedint" Тогда
Возврат 19;
ИначеЕсли АдоКонст = "adunsignedbigint" Тогда
Возврат 21;
ИначеЕсли АдоКонст = "adsingle" Тогда
Возврат 4;
ИначеЕсли АдоКонст = "addouble" Тогда
Возврат 5;
ИначеЕсли АдоКонст = "adcurrency" Тогда
Возврат 6;
ИначеЕсли АдоКонст = "addecimal" Тогда
Возврат 14;
ИначеЕсли АдоКонст = "adnumeric" Тогда
Возврат 131;
ИначеЕсли АдоКонст = "adboolean" Тогда
Возврат 11;
ИначеЕсли АдоКонст = "aderror" Тогда
Возврат 10;
ИначеЕсли АдоКонст = "aduserdefined" Тогда
Возврат 132;
ИначеЕсли АдоКонст = "advariant" Тогда
Возврат 12;
ИначеЕсли АдоКонст = "adidispatch" Тогда
Возврат 9;
ИначеЕсли АдоКонст = "adiunknown" Тогда
Возврат 13;
ИначеЕсли АдоКонст = "adguid" Тогда
Возврат 72;
ИначеЕсли АдоКонст = "addate" Тогда
Возврат 7;
ИначеЕсли АдоКонст = "addbdate" Тогда
Возврат 133;
ИначеЕсли АдоКонст = "addbtime" Тогда
Возврат 134;
ИначеЕсли АдоКонст = "addbtimestamp" Тогда
Возврат 135;
ИначеЕсли АдоКонст = "adbstr" Тогда
Возврат 8;
ИначеЕсли АдоКонст = "adchar" Тогда
Возврат 129;
ИначеЕсли АдоКонст = "advarchar" Тогда
Возврат 200;
ИначеЕсли АдоКонст = "adlongvarchar" Тогда
Возврат 201;
ИначеЕсли АдоКонст = "adwchar" Тогда
Возврат 130;
ИначеЕсли АдоКонст = "advarwchar" Тогда
Возврат 202;
ИначеЕсли АдоКонст = "adlongvarwchar" Тогда
Возврат 203;
ИначеЕсли АдоКонст = "adbinary" Тогда
Возврат 128;
ИначеЕсли АдоКонст = "advarbinary" Тогда
Возврат 204;
ИначеЕсли АдоКонст = "adlongvarbinary" Тогда
Возврат 205;
Иначе Возврат 0;
КонецЕсли;
КонецФункции
Функция ТипПараметраАДО(Конст) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = "adparamunknown" Тогда
Возврат 0;
ИначеЕсли АдоКонст = "adparaminput" Тогда
Возврат 1;
ИначеЕсли АдоКонст = "adparamoutput" Тогда
Возврат 2;
ИначеЕсли АдоКонст = "adparaminputoutput" Тогда
Возврат 3;
ИначеЕсли АдоКонст = "adparamreturnvalue" Тогда
Возврат 4;
КонецЕсли;
КонецФункции
PS ф-ции были на этом сайте, что-то поменял. Справочник по ADO есть где угодно.
(16) cool.vlad4,
ну это понятно, мне всего лишь нужно чтобы параметр правильно вставлялся. Вот попробовал с каст. та же ерунда
ЗапросSQLВыб4="
|SELECT top 1 range , discount
|FROM discount_size
|WHERE (range < cast('"+перСум+"' as decimal(18,2)) )
|order by range desc ";
ну это понятно, мне всего лишь нужно чтобы параметр правильно вставлялся. Вот попробовал с каст. та же ерунда
ЗапросSQLВыб4="
|SELECT top 1 range , discount
|FROM discount_size
|WHERE (range < cast('"+перСум+"' as decimal(18,2)) )
|order by range desc ";
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот