|
Запрос Oracle из 1с | ☑ | ||
---|---|---|---|---|
0
cmex
27.05.13
✎
13:30
|
Всем привет.
Создал внешний источник данных к таблицам Oracle. Все сработало, список таблиц и полей в источнике виден. Там есть таблица MTL_SECONDARY_INVENTORIES. Из нее выбрал все поля. Делаю запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | INV_MTL_SECONDARY_INVENTORIES.ORGANIZATION_ID |ИЗ | ВнешнийИсточникДанных.Oracle.Таблица.INV_MTL_SECONDARY_INVENTORIES КАК INV_MTL_SECONDARY_INVENTORIES"; тз = Запрос.Выполнить().Выгрузить(); тз.ВыбратьСтроку(); Все выбирается. Однако,когда пишу напрямую запрос Команды = Новый COMObject("ADODB.Command"); Подключение = Новый COMОбъект("ADODB.Connection"); Подключение.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.ru)(PORT=1522))(CONNECT_DATA=(SID=xxx)));Uid=xxx;Pwd=xxx;"; Подключение.Open(); Команды.ActiveConnection = Подключение; Команды.CommandTimeOut = 10000; //Команды.CommandText = "Select * FROM all_objects where object_name = 'MTL_SECONDARY_INVENTORIES'"; Команды.CommandText = "Select ORGANIZATION_ID FROM MTL_SECONDARY_INVENTORIES"; RS = Новый COMОбъект ("ADODB.RecordSet"); RS = Команды.Execute(); выдает ошибку - Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC driver for Oracle][Oracle]ORA-00942: таблица или представление пользователя не существует В чем беда? |
|||
1
ДенисЧ
27.05.13
✎
13:31
|
Права пользователя?
|
|||
2
Buggy01
27.05.13
✎
13:34
|
INV_ во втором примере не забыл подставить?
|
|||
3
cmex
27.05.13
✎
13:35
|
(1) не понял смысла вопроса. если выбирать из Внеш ист данных, то эти данные выбираются в полном объеме. Если писать прямой запрос, то нет таблицы. Права мне предоставляют админы оракловских баз.
|
|||
4
cmex
27.05.13
✎
13:35
|
(2) тот же эффект(
|
|||
5
ДенисЧ
27.05.13
✎
13:36
|
(3) uid одинаковый?
|
|||
6
cmex
27.05.13
✎
13:38
|
(5) uid чего? и где/как его узнать?
|
|||
7
ДенисЧ
27.05.13
✎
13:39
|
(6) логин пользователя в оракле...
|
|||
8
cmex
27.05.13
✎
13:40
|
(7) одинаковый
если поможет, то вот выборка из всех объектов Команды.CommandText = "Select * FROM all_objects where object_name = 'MTL_SECONDARY_INVENTORIES'"; результат INV MTL_SECONDARY_INVENTORIES 42 678 42 678 TABLE APPS MTL_SECONDARY_INVENTORIES 66 752 SYNONYM |
|||
9
Ненавижу 1С
гуру
27.05.13
✎
13:40
|
Execute или Open ?
|
|||
10
cmex
27.05.13
✎
13:41
|
(9) весь код предоставлен выше
|
|||
11
cmex
27.05.13
✎
13:42
|
к (8)
RS = Новый COMОбъект ("ADODB.RecordSet"); RS = Команды.Execute(); Пока НЕ (RS.EOF) Цикл Сообщить(RS.Fields(0).Value()+" "+RS.Fields(1).Value()+" "+RS.Fields(2).Value()+" "+RS.Fields(3).Value()+" "+RS.Fields(4).Value()+" "+RS.Fields(5).Value()); RS.MoveNext(); КонецЦикла; |
|||
12
Маратыч
27.05.13
✎
13:46
|
(8) Это все в рамках юзерспейса того же SID?
|
|||
13
romansun
27.05.13
✎
13:53
|
1С и Оракле ))
1. Имеет ли реальный смысл использовать "Внешние источники данных" когда, по сути, уже всё и так написано (строка подключение, запрос, провайдер), чтобы сделать прямой запрос? 2. проверьте доступность таблиц запросом "SELECT * FROM USER_TABLES". Ошибка у вас из-за того, что нет доступа к таблице, скорее всего. Ну, понятно, если такая такая таблица в принципе есть и правильное имя. |
|||
14
romansun
27.05.13
✎
13:58
|
(13)
ээ, не прочитал детально, что пробуете двумя способами извиняйте ) но ошибка сама по себе, да, у меня возникала, когда для данного логина была недоступна таблица. В USER_TABLES можно увидеть все "свои" доступные поля |
|||
15
cmex
27.05.13
✎
14:14
|
(12) что?
|
|||
16
Маратыч
27.05.13
✎
14:15
|
(16) Собсно, подразумевалось (13), п.2.
|
|||
17
cmex
27.05.13
✎
14:24
|
(14)Спасибо, что то есть.
Если я правильно понял,то в "SELECT * FROM USER_TABLES" нас интересует 2 колонка. В результате моей таблицы не оказалось. Сделал запрос к одной из разрешенных, сработало. Отсюда два вопроса. 1. С какой просьбой обратиться к админам, чтоб увидеть в прямом запросе 2. Как так получилось, что при Внешнем ист данных удалось прочитать таблицу,а в прямом запросе нет? |
|||
18
kihor
27.05.13
✎
15:04
|
Вы не указываете название схемы перед именем таблицы. Очевидно логинитесь не под юзером INV или APPS.
Укажите запрос таким образом: Select ORGANIZATION_ID FROM INV.MTL_SECONDARY_INVENTORIES У меня, по крайней мере, он отработал без ошибок. |
|||
19
romansun
27.05.13
✎
15:06
|
(16) да, +1..
(17) хм... я бы админам так и расписал, что, дескать, вот под данным логином таблица не видна, сделайте там что-нить :) Думаю, они поймут проблему. Ну и, кстати, текст ошибки и скажите им. а вот как и почему 1С-ка так вот волшебно обошла права - хз. логин/пароль и название... эээ... базы (схемы) те же? |
|||
20
cmex
27.05.13
✎
15:34
|
(18) так тоже пробовал, ничего(
(19) абсолютно. причем админы говорят, что делают выборку под этим же логином, все выбирается. |
|||
21
kihor
27.05.13
✎
16:30
|
Попробуйте сами зайти сторонней тулзой, например, TOAD или SQL*Plus, под логином, который указан в ConnectionString как "Uid=xxx" и выполните запрос. Сразу сами увидите в 1С ли дело или в запросе. Кстати, если не секрет, под каким логином Вы коннектитесь?
|
|||
22
cmex
27.05.13
✎
16:39
|
(21) спасибо, попробую. логин, xxiface
|
|||
23
kihor
27.05.13
✎
18:06
|
Судя по всему это не один из стандартных пользователей Oracle Applications и синонима для таблицы INV.MTL_SECONDARY_INVENTORIES для него нет. Тогда еще раз обратите внимание на (18). Я тестировал ситуацию, аналогичную Вашей, и указание схемы у меня решило проблему.
|
|||
24
Живой Ископаемый
27.05.13
✎
19:44
|
А схема где? В схеме этого пользователя есть такая таблица?
|
|||
25
cmex
28.05.13
✎
09:09
|
(24) я с ораклом первый раз встретился, поэтому не совсем понимаю, что вы имеете в виду и как это проверить.
|
|||
26
romansun
28.05.13
✎
11:17
|
(25)
я с ораклом тож, один раз пока.. хотя встреча еще не закончилась )) http://citforum.ru/database/oracle/polzov_shema/ http://oracle-dba.ru/oracle_schemas.php http://www.oracloid.ru/index.php?t=381 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |