Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Проблема с прямым запросом через доп. соединение

v7: Проблема с прямым запросом через доп. соединение
Я
   Franchiser
 
23.11.17 - 13:47
Нужно сделать запрос не через текущее соединение 1с, а через доп. соединение, но почему то при этом получается бесконечный цикл и не видно количество полей в выборке и сами поля. В чем может быть проблема?
    МД = СоздатьОбъект("MetaDataWork");
    бд = СоздатьОбъект("ODBCDatabase");
    рс = СоздатьОбъект("ODBCRecordset");
    
    сервер = "server";
    
    БазаДанных = "ggg";

    Пользователь = "d";
    Пароль = "d"; 
    
    СтрокаПодключения = "Provider=SQLOLEDB.1;User ID=" + Пользователь + ";Pwd=" + Пароль + ";Initial Catalog=" + БазаДанных + ";Data Source=" + сервер + ";";
    бд.Соединение(СтрокаПодключения);
    рс.Отладка(1);
    рс.УстБД(бд);
    
        
        ТекстЗапроса = "-- qryMaker:Отчет1.2017.11.22.15.03.43
        |SELECT TOP 2 
        |    ТКОстатки.Комитент Комитент
        |    , ТКОстатки.ЮридическоеЛицо ЮридическоеЛицо
        |    , ТКОстатки.МестоХранения МестоХранения
        |    , ТКОстатки.МПЗМ МПЗ
        |    , ТКОстатки.КоличествоОстаток
        |    , МестаХранения.ID МХМПЗ
        |    , Контрагенты.ID ЮЛМПЗ
        |FROM $РегистрОстатки.ТК(,,
        |        (ВидОстатка = $Перечисление.ВидыОстатков.ОтклоненияБухУчета)
        |        AND (Комитент = :Комитент),(Комитент,ЮридическоеЛицо,МестоХранения,МПЗ),(Количество)) AS ТКОстатки
        |    JOIN $Справочник.МПЗ AS МПЗ With (NOLOCK) ON ТКОстатки.МПЗ = МПЗ.ID
        |    JOIN $Справочник.МестаХранения AS МестаХранения With (NOLOCK) ON $МПЗ.МестоХранения = МестаХранения.ID
        |    JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $ПоследнееЗначение.МестаХранения.ЮридическоеЛицо(МестаХранения.ID, :ВыбДата) = Контрагенты.ID
        |Where ТКОстатки.МестоХранения <> МестаХранения.ID OR ТКОстатки.ЮридическоеЛицо <>  Контрагенты.ID 
        |";

    МД.УстановитьТекстовыйПараметр("ВыбДата", ДатаОСт);
    МД.УстановитьТекстовыйПараметр("Комитент", Комитент);
    
    ТекстЗапроса = МД.ОбрМетаСКЛ(ТекстЗапроса);
    
    рс.Открыть(ТекстЗапроса);
    
    рс.ВНачало();
    Пока рс.конец()=0 Цикл
        //Сообщить("" +рс.ПолучитьЗначение("Комитент"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮридическоеЛицо"));

        //Сообщить("" +рс.ПолучитьЗначение("МестоХранения"));

        //Сообщить("" +рс.ПолучитьЗначение("МПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("КоличествоОстаток"));

        //Сообщить("" +рс.ПолучитьЗначение("МХМПЗ"));

        //Сообщить("" +рс.ПолучитьЗначение("ЮЛМПЗ"));

        
        Сообщить("=======");
    
        
        рс.След();
    КонецЦикла;
 
 
   Ёпрст
 
1 - 23.11.17 - 13:53
(0) пустая выборка
   Ёпрст
 
2 - 23.11.17 - 13:53
твой запрос ничего не возвращает, ибо условие на Комитент...
   Ёпрст
 
3 - 23.11.17 - 13:53
это объект Этой базы, где уверенность, что его id в сторонней базе точно такой же ?
   Franchiser
 
4 - 23.11.17 - 14:00
(3) я подключаюсь к одной и той же базе, только через другое соединение
   Franchiser
 
5 - 23.11.17 - 14:02
по первой строке подключение ЕстьСоединение() возвращает = 0
Если так написать
СтрокаПодключения = "DRIVER=SQL Server;UID=" + Пользователь + ";Pwd=" + Пароль + ";DataBase=" + БазаДанных + ";Server=" + сервер + ";";
То ЕстьСоединение() возвращает = 1.
Но все равно проблема с выборкой осталась.
   Franchiser
 
6 - 23.11.17 - 14:19
Смысл всего этого обойти ошибку "State HY000, native 0, message [Microsoft][ODBC SQL Server Driver]Подключение занято до получения результатов для другого hstmt " при обходе выборке курсором при типизации полей.
   Ёпрст
 
7 - 23.11.17 - 14:20
(6) (nolock)
   Ёпрст
 
8 - 23.11.17 - 14:21
И нафига вообще курсор открывать ?
ВыгрузитьИнструкцию же есть
   Ёпрст
 
9 - 23.11.17 - 14:22
ну и это, set nocount on воткни в начало запроса
   Franchiser
 
10 - 23.11.17 - 14:25
(8) в выборке миллионы записей, по ним нужно сгенерировать документы, ТЗ загибается как обычно. no count втыкал не помогает. Как же все таки сделать чтобы запрос к этой же базе выполнялся в другом соединении?
 
 Рекламное место пустует
   Franchiser
 
11 - 23.11.17 - 14:26
(7) (nolock) везде стоит
   Franchiser
 
12 - 24.11.17 - 00:59
Все заработало, спасибо
   Ёпрст
 
13 - 24.11.17 - 10:26
(12) че было ? Как решил ?
   Franchiser
 
14 - 24.11.17 - 11:31
1. Опечатка в запросе (когда убирал типизацию неправильно называлось поле мпз)
2. Добавил set nocount on в запрос
3. В методе открыть второй параметр 1 должен быть
4. Строка подключения должна быть как указал в прошлом сообщении, т.е. Driver = SQL Server
   Franchiser
 
15 - 24.11.17 - 11:33
Все это обнаружилось при анализе метода recordset описаниеошибки(), как то так
   Ёпрст
 
16 - 24.11.17 - 12:01
ясно, спсб.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует