|
v7: Проблема с прямым запросом через доп. соединение | ☑ | ||
---|---|---|---|---|
0
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 в сторонней базе точно такой же ?
|
|||
4
Franchiser
гуру
23.11.17
✎
14:00
|
(3) я подключаюсь к одной и той же базе, только через другое соединение
|
|||
5
Franchiser
гуру
23.11.17
✎
14:02
|
по первой строке подключение ЕстьСоединение() возвращает = 0
Если так написать СтрокаПодключения = "DRIVER=SQL Server;UID=" + Пользователь + ";Pwd=" + Пароль + ";DataBase=" + БазаДанных + ";Server=" + сервер + ";"; То ЕстьСоединение() возвращает = 1. Но все равно проблема с выборкой осталась. |
|||
6
Franchiser
гуру
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 воткни в начало запроса
|
|||
10
Franchiser
гуру
23.11.17
✎
14:25
|
(8) в выборке миллионы записей, по ним нужно сгенерировать документы, ТЗ загибается как обычно. no count втыкал не помогает. Как же все таки сделать чтобы запрос к этой же базе выполнялся в другом соединении?
|
|||
11
Franchiser
гуру
23.11.17
✎
14:26
|
(7) (nolock) везде стоит
|
|||
12
Franchiser
гуру
24.11.17
✎
00:59
|
Все заработало, спасибо
|
|||
13
Ёпрст
24.11.17
✎
10:26
|
(12) че было ? Как решил ?
|
|||
14
Franchiser
гуру
24.11.17
✎
11:31
|
1. Опечатка в запросе (когда убирал типизацию неправильно называлось поле мпз)
2. Добавил set nocount on в запрос 3. В методе открыть второй параметр 1 должен быть 4. Строка подключения должна быть как указал в прошлом сообщении, т.е. Driver = SQL Server |
|||
15
Franchiser
гуру
24.11.17
✎
11:33
|
Все это обнаружилось при анализе метода recordset описаниеошибки(), как то так
|
|||
16
Ёпрст
24.11.17
✎
12:01
|
ясно, спсб.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |