Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Delphi и Oracle


Автор: Sax 14.4.2007, 14:13
На домашнем компьютере установлен Oracle 9i (9.2.0.1.0). Вместе с ним используется Borland Delphi 7 Enterprise.
Из всех процессов в Панель управления\Администрование\Службы оставлено на автозапуске только три: 
OracleMTSRecoveryService, OracleOraHome92TNSListener и OracleServicePROBASAX.
С помощью Enterprise Manager Console из-под пользователя System создан новый пользователь с именем Usersax.
Все настройки пользователя повторяют настройки пользователя Scott созданного при установке автоматически.
В распроряжении пользователя Usersax одна таблица с именем FTable. Эта таблица содержит три столбца с именами A, B и C. Записей в таблице нет.
В Delphi создано обычное приложение с одной формой. Все настройки по умолчанию.
На форме размещено по одному компоненту DBGrid, DataSource, ADOTable.
В свойстве TableName компонета ADOTable выбрана таблица FTable.
Строка ConnectionString компонента ADOTable содержит следующее:
Provider=OraOLEDB.Oracle.1;Password=sax3;Persist Security Info=True;User ID=Usersax;Data Source=PROBASAX.
То есть драйвер используется Oracle Provider for OLE DB. В настроках установлен checkbox - разрешить сохранение пароля.
При нажатии кнопки "Проверить подключение" появляется сообщение "Проверка подключения выполнена".
При установке свойства Active компонента ADOTable в положение True в компоненте DBGrid повляются три пустых столбца
с именами A, B и C.

При попытке откомпилировать программу выдаётся сообщение: 
ORA-12154: TNS:невозможно разрешить имя службы.
В чём причина. Разобраться сам не могу - только начинаю работать с Oracle.

Автор: ACMilian 14.4.2007, 14:27
могу тока посоветовать установить DOA для работы с ораклом.

Автор: Sax 14.4.2007, 14:33
Существует ли какое-то описание как с DAO работатьи где его взять, если есть?
Скачал, установил, а что с ним делать не совсем понятно.
Хотелось бы что-нибудь на русском языке.

Автор: ACMilian 14.4.2007, 14:42
с DAO или с DOA?
поищи на этом сайте в разделе литература по дэлфи...есть почти фсё

Автор: Sax 14.4.2007, 14:53
Я скачивал Oracle Data Access Components.
version 5.80.0.35 trial for Delphi 7.
И чё-то они не понятно как с ними работать.

Автор: ACMilian 14.4.2007, 15:01
ну так если всё правильно установил то на закладке, которую указал, должны быть компонеты эти. вот с ними и работай. бросай на форму OracleSession. в сво-ве LogonDatabase выбираешь имя совей базы ораклинай и всё.

Автор: Sax 14.4.2007, 15:21
На форме только компонент OraSession1. OracleSession нет
В свойстве ConnectString - usersax/[email protected].
В свойстве HomeName - OraHome92.
В свойстве Schema - usersax.
В свойстве Server - probasax.com.
В свойстве Username - usersax.
Устававливаешь Connected в положение True - запрашивает пароль и OK.
И та же ошибка "ORA-12154: TNS:невозможно разрешить имя службы".

Автор: LSD 14.4.2007, 15:22
1. Из под SQL*Plus и пользователя Usersax коннект нормальный?
2. Если попробовать соединиться с базой под пользователем system, что получится?

Автор: Sax 14.4.2007, 15:31
1. В SQL*Plus при попытке соединения 
Имя пользователя - Usersax
Пароль - ****
Строка связи - probasax.com
То появляется та же ошибка - 
ERROR:
ORA-12154: TNS:невозможно разрешить имя службы

При попытке соединения 
Имя пользователя - Usersax
Пароль - ****
Строка связи - <пусто>
То сообщение
Присоединен к:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

Автор: LSD 14.4.2007, 15:35
Цитата(Sax @  14.4.2007,  15:31 Найти цитируемый пост)
Строка связи - probasax.com

Почему probasax.com а не probasax? У тебя как база называется?

Автор: ACMilian 14.4.2007, 15:36
что я могу сказать..у меня Дэлфи 5, оракл8 и DOA 3.4.3.
с большей версией не сталкивался. почитай встроенный help про сови компанеты
в поисковике ошибку оракла глянь. 
глянь по ссылке мот и у тебя тоже: http://forum.codenet.ru/showthread.php?p=60999

Добавлено через 3 минуты и 43 секунды
а вообще в базу зайти можешь? через SQL Plus например

Автор: Sax 14.4.2007, 15:38
2. Если через Delphi и ADOTable
Строка ConnectionString - 
Provider=OraOLEDB.Oracle.1;Password=sax2;Persist Security Info=True;User ID=system;Data Source=PROBASAX
Свойство TableName - пробовал FTABLE и другая, не моя таблица.

Пытаешься поставить Active в True появляется сообщение - 
ORA-00942 Таблица или представление пользователя не существует

Добавлено через 2 минуты и 35 секунд
Попробавал в SQL*Plus

Имя пользователя - Usersax
Пароль - ****
Строка связи - probasax

Cообщение
Присоединен к:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production 

А в Delphi всё-равно не работает

Автор: LSD 14.4.2007, 15:41
Цитата(Sax @  14.4.2007,  15:38 Найти цитируемый пост)
Свойство TableName - пробовал FTABLE и другая, не моя таблица.

Надо было ставить USERSAX.FTABLE.

Автор: Sax 14.4.2007, 15:46
Так там же список выпадающий со всеми индексами, таблицами и т.п.
Пробовал в свойстве TableName - USERSAX.FTABLE.
Без разницы в конструкторе показывает столбцы, а компилироваться не хочет. С той же ошибкой.

Автор: Sax 14.4.2007, 15:47
Попробавал в SQL*Plus

Имя пользователя - Usersax
Пароль - ****
Строка связи - probasax

Cообщение
Присоединен к:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production 

А в Delphi всё-равно не работает

Автор: ACMilian 14.4.2007, 15:51
а покажите что есть в  tnsnames.ora  и sqlnet.ora

Автор: LSD 14.4.2007, 15:57
Тогда проблема не в Oracle, а или в ADO или в Delphi.

Модератор: перемещено из Oracle

Автор: Sax 14.4.2007, 15:59
Вот файл tnsnames.ora из папки  \oracle\ora92\network\admin

# TNSNAMES.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

INST1_HTTP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 12-4666b460d102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = MODOSE)
      (PRESENTATION = http://HRService)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

PROBASAX =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 12-4666b460d102)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = probasax.com)
    )
  )

Добавлено через 2 минуты и 3 секунды
Вот файл sqlnet.ora из папки  \oracle\ora92\network\admin

# SQLNET.ORA Network Configuration File: D:\oracle\ora92\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

Автор: Sax 14.4.2007, 16:02
Так а где проблема.
Прописываю вроде всё правильно (см. выше)

Автор: ACMilian 14.4.2007, 16:19
хз...а ты пользователю своему дал права на созднание сессии?

Автор: Sax 14.4.2007, 16:22
Так я же говорю, что только начал с oracle работать.
Это где и что устанавливать нужно?

Автор: ACMilian 14.4.2007, 16:27
извини, времени нет. домой нада.
вот тебе помощник: http://www.firststeps.ru/sql/oracle/r.php?1

Автор: Sax 14.4.2007, 18:17
На шаге восьмом в справочнике http://www.firststeps.ru/sql/oracle/r.php?1 написано как создавать пользователя и прилагаются bat и dat файлы.
Пользователь создаётся нормально.
Запускаю через командную строку miller.bat и 
IMP-00058: ORACLE выдал ошибку12154
ORA-12154: TNS:невозможно разрешить имя службы
IMP-00000: Импорт данных завершил неудачно

Автор: Sax 28.4.2007, 13:56
При просмотре log файлов:

в файле D:\oracle\ora92\network\log\nmiconf.log много ошибок:
"
DBSNMP for 32-bit Windows: release 9.2.0.0.0 - Production on 07-APR-07 14:12:57
Discovering services on 12-4666b460d102 configured on host addresses {12-4666b460d102 127.0.0.1}
Warning : Error while sourcing third party discovery file emddiscover.tcl : unable to get value "em_loc" from key "HKEY_LOCAL_MACHINE\Software\Oracle": Не удается найти указанный файл.
"

в файле D:\oracle\ora92\network\log\dbsnmp.log много таких ошибок:
"
DBSNMP for 32-bit Windows: Version 9.2.0.1.0 - Production on 15-АПР-2007 17:11:40

Copyright © 2002 Oracle Corporation.  All rights reserved.

файлом системных параметров является D:\oracle\ora92\network\admin\snmp_ro.ora
сообщения протокола записаны в D:\oracle\ora92\network\log\dbsnmp.log
информация протокола записана в D:\oracle\ora92\network\trace\dbsnmp_2396.trc
текущим уровнем протокола является 0

NMS-00001: Предупреждение: dbsnmp не может соединиться с мастер-агентом SNMP
"

Производились неоднократные установки различных версий (Enterprise Edition, Standard Edition, Perosonal Edition), что не приводило к корректной работе Delphi и Oracle.

При попытке подсоединения к таблице через ADOTable c помощью драйвера Oracle Provider for OLE DB при компилировании программы (Run(F9)) выдавалась ошибка "ORA-12154 TNS:невозможно разрешить имя службы".
При попытке подсоединения к таблице через ADOTable c помощью драйвера Microsoft OLE DB Provider for Oracle при компилировании программы (Run(F9)) выдавалась ошибка "ORA-06413 соедиение не уставлено" (номер такой, а текст ошибки точно не помню).
При попытке подсоединения к таблице через Oracle Data Access Components 5.80.0.35 Net Trial for Delphi 7 с помощью компонент OraSession, OraTable или OraQuery выдавалась ошибка "ORA-06413 соедиение не уставлено".

Была установлена бесплатно распространяемая СУБД "Oracle Database 10g Express Edition" - 206 Мегабайт.
Ошибки аналогичны тем, что и при работе с версией Oracle 9i (9.2.0.1.0).

Произведена переустановка с форматированием Win XP SP2 rus, Oracle 9i (9.2.0.1.0) Enterprise Edition и Borland Delphi 7 Enterprise.
Все настройки стандартные.
Соединение Delphi и Oracle с помощью ADOTable и драйвера Oracle Provider for OLE DB выдает Delphi ошибку "Invalid variant operation".
Соединение Delphi и Oracle с помощью ADOTable и драйвера Microsoft OLE DB Provider for Oracle проходит успешно.

Отличия первого варианта от нового:

- отсутствует DrWeb 4.33.2.12251

- отсутствуют дополнения
WindowsXP-KB884020-x86-rus
WindowsXP-KB911280-v2-x86-RUS
WindowsXP-KB914388-x86-RUS
WindowsXP-KB914389-x86-RUS
WindowsXP-KB917159-x86-RUS
WindowsXP-KB917422-x86-RUS
WindowsXP-KB917953-x86-RUS
WindowsXP-KB920214-x86-RUS
WindowsXP-KB920670-x86-RUS
WindowsXP-KB920683-x86-RUS
WindowsXP-KB921398-x86-RUS
WindowsXP-KB921883-x86-RUS
WindowsXP-KB922616-x86-RUS

- при уставноке использовалась классическая тема формления Windows

- установка прошла не за 60 минут как ранее, а за 20.

Автор: Sax 12.5.2007, 13:43
Дома используются:
- Win XP SP2 rus;
- Oracle 9i (9.2.0.1.0) Enterprise Edition;
- Borland Delphi 7 Enterprise;
- метод доступа - ADO (ADOTable).

В корневом каталоге системного диска созданы папки "Новая папка", "Новая папка (2)", "Новая папка (3)".
Из первой приложение запускается нормально и нормально работает. Из двух других уже при запуске пишет "ORA-06413: Соединение не открыто" с драйвером Microsoft OLE DB Provider for Oracle, а с драйвером Oracle Provider for OLE DB выдаёт ошибку "ORA-12154 TNS:невозможно разрешить имя службы".
Попробовал создать папку со случайным именем "poiuyt" - рабоает, а с имененм "poiuyt (10)" - ошибки.
Причём с именами "Новая папка 2", "Новая папка 3" всё работает.
То есть не понимает закрывающую скобку!!!

Причина непонятна, но ФАКТ!!!

На это потребовалось две недели времени, более 7 раз переставлял Oracle, 1 переустановка Win и куча нервов!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)