Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный() (число прочтений - 3874 )
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
20. Марта 2009 :: 04:51
Печать  
пер_ODBCRecordSet = СоздатьОбъект("ODBCRecordSet");
пер_ТекстЗапроса = "
|Use "+СокрЛП(рф_ИмяБазыСинхронизации)+"
|DECLARE @Flag int;
|IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Condition_Account]') AND type in (N'U'))
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

//
// Результат пер_ТаблицаСуществует = -1; ???????? Почему?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #1 - 20. Марта 2009 :: 04:57
Печать  
используй
Код
Выбрать все
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса);
пер_ТаблицаСуществует.ВыбратьСтроку(); 

  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #2 - 20. Марта 2009 :: 05:03
Печать  
Z1 писал(а) 20. Марта 2009 :: 04:57:
используй
Код
Выбрать все
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса);
пер_ТаблицаСуществует.ВыбратьСтроку(); 




пер_ТаблицаСуществует.ВыбратьСтроку();
ОШИБКА!!! Значение не представляет агрегатный объект (ВыбратьСтроку)

Не катет я собственно не удивлен! В SQL работает как часы!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #3 - 20. Марта 2009 :: 05:13
Печать  
Код
Выбрать все
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса);
Если ТипЗначенияСтр(пер_ТаблицаСуществует) = "ТаблицаЗначений" Тогда
   пер_ТаблицаСуществует.ВыбратьСтроку();
Иначе
   Сообщить("пер_ТаблицаСуществует = " + пер_ТаблицаСуществует);
КонецЕсли;
 



также надо установить set nocount on
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #4 - 20. Марта 2009 :: 05:14
Печать  
Ward_ED писал(а) 20. Марта 2009 :: 05:03:
Z1 писал(а) 20. Марта 2009 :: 04:57:
используй
Код
Выбрать все
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса);
пер_ТаблицаСуществует.ВыбратьСтроку(); 




пер_ТаблицаСуществует.ВыбратьСтроку();
ОШИБКА!!! Значение не представляет агрегатный объект (ВыбратьСтроку)

Не катет я собственно не удивлен! В SQL работает как часы!




Код
Выбрать все
пер_ТаблицаСуществует = СоздатьОбъект("ТаблицаЗначений");
пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса,пер_ТаблицаСуществует ,1);
пер_ТаблицаСуществует.ВыбратьСтроку(); 


  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #5 - 20. Марта 2009 :: 05:18
Печать  
leov-001 писал(а) 20. Марта 2009 :: 05:14:
Ward_ED писал(а) 20. Марта 2009 :: 05:03:
Z1 писал(а) 20. Марта 2009 :: 04:57:
используй
Код
Выбрать все
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса);
пер_ТаблицаСуществует.ВыбратьСтроку(); 




пер_ТаблицаСуществует.ВыбратьСтроку();
ОШИБКА!!! Значение не представляет агрегатный объект (ВыбратьСтроку)

Не катет я собственно не удивлен! В SQL работает как часы!




Код
Выбрать все
пер_ТаблицаСуществует = СоздатьОбъект("ТаблицаЗначений");
пер_ODBCRecordSet.ВыполнитьИнструкцию(пер_ТекстЗапроса,пер_ТаблицаСуществует ,1);
пер_ТаблицаСуществует.ВыбратьСтроку(); 




Работает! Действительно 1 в таблице! НО блин это косяк метода если возвращаешь значение так возвращай!
Кто нить может сказать в чем причина у меня там 2 десятка проверок и что каждый индивидуально тестит  Злой
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #6 - 20. Марта 2009 :: 05:18
Печать  
т.е
если установишь
set nocount on должен и ВыполнитьСкалярный правильно работать.
  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #7 - 20. Марта 2009 :: 05:23
Печать  
Большое спасибо всем за помощь!!!  Улыбка
  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #8 - 20. Марта 2009 :: 05:36
Печать  
Z1 писал(а) 20. Марта 2009 :: 05:18:
т.е
если установишь
set nocount on должен и ВыполнитьСкалярный правильно работать.


пер_ТекстЗапроса = "
|Use "+СокрЛП(рф_ИмяБазыСинхронизации)+"
|Set nocount on;
|DECLARE @Flag int;
|IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Condition_Account]') AND type in (N'U'))
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

Не-а-а-а не работает!  Плачущий
А еще если выполняешь запрос при рабном соединения отваливается сама 1С!
  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #9 - 20. Марта 2009 :: 05:37
Печать  
Ward_ED писал(а) 20. Марта 2009 :: 05:36:
Z1 писал(а) 20. Марта 2009 :: 05:18:
т.е
если установишь
set nocount on должен и ВыполнитьСкалярный правильно работать.


пер_ТекстЗапроса = "
|Use "+СокрЛП(рф_ИмяБазыСинхронизации)+"
|Set nocount on;
|DECLARE @Flag int;
|IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Condition_Account]') AND type in (N'U'))
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

Не-а-а-а не работает!  Плачущий
А еще если выполняешь запрос при родном соединения отваливается сама 1С!


Невостановимая ошибка базы данных!
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #10 - 20. Марта 2009 :: 05:47
Печать  
Ward_ED писал(а) 20. Марта 2009 :: 05:37:
Ward_ED писал(а) 20. Марта 2009 :: 05:36:
Z1 писал(а) 20. Марта 2009 :: 05:18:
т.е
если установишь
set nocount on должен и ВыполнитьСкалярный правильно работать.


пер_ТекстЗапроса = "
|Use "+СокрЛП(рф_ИмяБазыСинхронизации)+"
|Set nocount on;
|DECLARE @Flag int;
|IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Condition_Account]') AND type in (N'U'))
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

Не-а-а-а не работает!  Плачущий
А еще если выполняешь запрос при родном соединения отваливается сама 1С!


Невостановимая ошибка базы данных!

на этот код qa пишет
Server: Msg 208, Level 16, State 1, Line 3
Invalid object name 'sys.objects'.
в операторах t-sql точку запятой ставить не нужно.
и set nocount должен быть первым оператором а не вторым.

  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #11 - 20. Марта 2009 :: 05:55
Печать  
Z1 писал(а) 20. Марта 2009 :: 05:47:
Ward_ED писал(а) 20. Марта 2009 :: 05:37:
Ward_ED писал(а) 20. Марта 2009 :: 05:36:
Z1 писал(а) 20. Марта 2009 :: 05:18:
т.е
если установишь
set nocount on должен и ВыполнитьСкалярный правильно работать.


пер_ТекстЗапроса = "
|Use "+СокрЛП(рф_ИмяБазыСинхронизации)+"
|Set nocount on;
|DECLARE @Flag int;
|IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Condition_Account]') AND type in (N'U'))
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";
пер_ТаблицаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

Не-а-а-а не работает!  Плачущий
А еще если выполняешь запрос при родном соединения отваливается сама 1С!


Невостановимая ошибка базы данных!

на этот код qa пишет
Server: Msg 208, Level 16, State 1, Line 3
Invalid object name 'sys.objects'.
в операторах t-sql точку запятой ставить не нужно.
и set nocount должен быть первым оператором а не вторым.



Не порите чушь господа! пример взят из литинга 2005 MS SQL, ";" для него по барабану, в студии работает все на ура!  Озадачен
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #12 - 20. Марта 2009 :: 05:58
Печать  
и откуда мы можем знать что у тебя sql2005 ?
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #13 - 20. Марта 2009 :: 06:05
Печать  
Не порите чушь господа! пример взят из литинга 2005 MS SQL, ";" для него по барабану, в студии работает все на ура!

Все равно убери ";" не красиво с ними запрос выглядит
  
Наверх
 
IP записан
 
Ward_ED
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 21
Зарегистрирован: 30. Июля 2008
Пол: Мужской
Re: Подскажите где не прав!!! Не тот ответы функции ВыполнитьСкалярный()
Ответ #14 - 20. Марта 2009 :: 06:05
Печать  
Z1 писал(а) 20. Марта 2009 :: 05:58:
и откуда мы можем знать что у тебя sql2005 ?


Сорри, забыл сказать, не не это самое смешное:

пер_ТекстЗапроса = "
|DECLARE @Flag int;
|IF EXISTS (SELECT * FROM master..sysdatabases WHERE  name = N'"+СокрЛП(рф_ИмяБазыСинхронизации)+"')
|      SET @Flag = 1
|ELSE
|      SET @Flag = 0
|SELECT @Flag;
|";            
пер_БазаСуществует = пер_ODBCRecordSet.ВыполнитьСкалярный(пер_ТекстЗапроса);

отрабатывает корректно! Замечаний нет!  Подмигивание
посему как-то не подумал что здесь играет роль версия MS SQL.
В свете новой информации есть предложение как быть? Уж крайне не красиво и не удобоно использовать ВыполниьИнструкцию а там разбирать таблицу!  Нерешительный
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать