|
v8.3 x64 подключение к бд Oracle не работает классический прием | ☑ | ||
---|---|---|---|---|
0
mimary
10.07.17
✎
12:09
|
Добрый день, хотим мигрировать на 1c x64. Обнаружилась проблема.
1c 8.3.9.2170 x64 на скл клент Oracle 12.2.0 x64 win 2012 x64 Нормально создаются и работают объекты Connection и RecordSet. ConnectString ="Provider=OraOLEDB.Oracle;Data Source=TEST;User Id=ххх;Password=хххх;"; objCon = Новый COMОбъект("ADODB.Connection"); objCon.ConnectionString = ConnectString; objCon.Open(); RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = objCon.Execute("SEleCT * FROM ussd_bis.db_sells_events"); При попытке подсунуть этот коннект в свойство ActiveConnection для объекта Command выдает ошибку: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. ConnectString ="Provider=OraOLEDB.Oracle.1;Data Source=TEST;User Id=ххх;Password=хххх;"; objCon = Новый COMОбъект("ADODB.Connection"); objCon.ConnectionString = ConnectString; objCon.Open(); objCmd = Новый COMОбъект("ADODB.Command"); objCmd.ActiveConnection = objCon; пробовала варианты ConnectString ="Provider=MSDASQL.1 ..." objCmd.ActiveConnection = ConnectString; такая же история. Может кто подскажет - где искать проблему. |
|||
1
МихаилМ
10.07.17
✎
12:36
|
перепишите без ActiveConnection
|
|||
2
mimary
10.07.17
✎
12:55
|
спасибо, но переписать на Connection не получится. надо выполнять запросы с параметрами. Если постоянно склеивать строку с запросом, ругаются что кэш забивается. и еще надо процедуру с параметрами вызывать.
|
|||
3
МихаилМ
10.07.17
✎
13:14
|
опишите задачу развернуто, что бы Вам не предлагали
уже испробованные варианты |
|||
4
mexanik_96
10.07.17
✎
13:25
|
(0) используйте внешние источники(драйвера odbc)
|
|||
5
mimary
10.07.17
✎
13:40
|
пробовала драйвер odbc: ConnectString = "DRIVER={Oracle in OraClient12home1};UID=xxx;PWD=xxxx;DBQ=TEST"; провайдер цепляется MSDASQL.1. Результат аналогичный. 2 объекта работают, третий - нет. Может в этом случае делаю что то не так...
|
|||
6
mimary
10.07.17
✎
13:44
|
все работает на 8.2 x32.
Код был такой: objCmd= Новый COMОбъект("ADODB.Command"); objCon= Новый ComОбъект("ADODB.Connection"); СтрокаСоединения = "Provider=MSDAORA.1;Password="+ПарольАдминистратора+";User ID="+ИмяАдминистратора+";Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+СтрокаСоединенияCервер+")(PORT = 1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME="+ИмяБазы+")));Persist Security Info=False;"; objCon.ConnectionString = СтрокаСоединения; objConL.Open(); Command.ActiveConnection = objCon; TextЗапроса = "select count(1) from ss s | where s.id_promr = ?"; objCmd.CommandText = TextЗапроса; objCmd.Parameters.Append(Command.CreateParameter("id_prom",14,3,,ID)); RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = objCmd.Execute(); Пока RecordSet.EOF()=Ложь Цикл ... RecordSet.MoveNext(); КонецЦикла; RecordSet.Close(); extConnSQL.Close(); //--------------------------------------------------------------------------------------------------- или вызов процедуры objCmd.CommandText ="имя процедуры"; П1 = Command.CreateParameter("id_prom", adInteger, adParamInput, 5, Число(id_prom)); Command.Parameters.Append(П1); Command.Execute(); Для 8.3 х64 поменяла только драйвер на OraOLEDB.Oracle х64 |
|||
7
МихаилМ
10.07.17
✎
13:46
|
попробуйте указать
"OraOLEDB.Oracle.1" без " .1" |
|||
8
mimary
10.07.17
✎
14:22
|
с ".1" или без, все равно objCon.Provider "OraOLEDB.Oracle.1" подставляет. по отладчику видно
|
|||
9
mexanik_96
10.07.17
✎
14:24
|
"Результат аналогичный. 2 объекта работают, третий - нет. Может в этом случае делаю что то не так..." дак там запросом же, вот прям в 1с запросом попробуйте (запросом к внешнему источнику данных) все там должно работать
|
|||
10
mexanik_96
10.07.17
✎
14:26
|
+(9) в конфе добавить внешний источник данных(объект конфигурации). обратится к нему запросом. может так понятно будет
|
|||
11
mimary
10.07.17
✎
14:36
|
ну помимо запроса есть еще вызовы процедур с параметрами:
objCmd.CommandText ="имя процедуры"; П1 = Command.CreateParameter("id_prom", adInteger, adParamInput, 5, Число(id_prom)); Command.Parameters.Append(П1); Command.Execute(); в этом случае внешний источник данных разве спасет? |
|||
12
mexanik_96
10.07.17
✎
17:10
|
+(11) да
|
|||
13
mimary
11.07.17
✎
09:07
|
спасибо, попробую
|
|||
14
mimary
11.07.17
✎
13:39
|
mexanik_96 спасибо. так все работает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |