Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Delphi и Oracle

25K
14 апреля 2007 года
Sax
11 / / 14.04.2007
На домашнем компьютере установлен 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.
10
14 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Sax
При попытке откомпилировать программу выдаётся сообщение:


Откомпилировать?? Это что-то новенькое. Ты что, её прямо на сервер компилишь? :rolleyes:

Цитата: Sax
ORA-12154: TNS:невозможно разрешить имя службы.


Через что идёт подключение клиента: TCP, pipes, IPC? Какие способы именования установлены и в каком порядке? Как называется соответствующий "базе" сервис в $(ORACLE_HOME)\network\admin\tnsnames.ora?

25K
14 апреля 2007 года
Sax
11 / / 14.04.2007
Вот файл tnsnames.ora

# 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)
)
)
10
14 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Sax

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


Ни фига себе название хоста! Оно реально такое? Может ли подключиться SQL*Plus по имени (connection string) probasax?

25K
15 апреля 2007 года
Sax
11 / / 14.04.2007
В SQL*Plus
Имя пользователя - usersax
Пароль - ****
Строка связи - probasax

Появляется сообщение -
Присоединён к:
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

Имя хоста - это полное имя домашнего компьютера, все настройки создались сами при установке, я там ничего не менял.
497
16 апреля 2007 года
IL84
267 / / 24.04.2003
Если через SQL Plus коннектится, значит TNS работает. Попробуй другие компоненты: ODAC или DOA.
13K
19 апреля 2007 года
babe_vampire
17 / / 24.11.2005
Раз отрабатывает Active, но при компилировании( может при запуске все же?) выдает нечто, то лучше покажи код приложения.
13K
19 апреля 2007 года
babe_vampire
17 / / 24.11.2005
Цитата: Sax

При нажатии кнопки "Проверить подключение" появляется сообщение "Проверка подключения выполнена".
При установке свойства Active компонента ADOTable в положение True в компоненте DBGrid повляются три пустых столбца
с именами A, B и C.

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



Скорее всего Oracle тут ни при чем. Видимо у тебя чем-то убивается строка связи. Соединение по указаной строке у тебя явно происходит, иначе не получилось бы считать описание таблицы в TADOTable.

25K
28 апреля 2007 года
Sax
11 / / 14.04.2007
При просмотре 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 (c) 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.
10
29 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Sax
- при уставноке использовалась классическая тема формления Windows

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


К доктору! А если серьёзно:

  • В разработке приложения под сервер стоимостью n тонн зелени глупо экономить несколько сотен на компонентах прямого доступа, вроде ODAC. На микрочленовском ADO под Oracle будут писать только больные, если только не стоит задача приложения, "независимого" от базы. Если такая задача стоит, настоятельно посоветовать руководству нанять специалистов соответствующего уровня - дешевле выйдет.
  • При установке сервера Oracle, особенно Enterprise версии, для простой разработки "под Oracle", полезно большую часть фич отключить. Мы в своё время оставляли только Oracle RDBMS и Oracle Net Services - этого достаточно.
25K
29 апреля 2007 года
Sax
11 / / 14.04.2007
Это диплом в университете по нетехнической специальеости. И никто не объяснял как с ним работать, среди знакомых с Oracle никто не работал, а курс про базы данных ограничился BDE и Paradox.

А компоненты используются Oracle Data Access Components 5.80.0.35 Net Trial for Delphi 7.
10
29 апреля 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Sax
А компоненты используются Oracle Data Access Components 5.80.0.35 Net Trial for Delphi 7.


Так вы, батенька, определитесь-таки, ADO или ODAC: раньше про ADO речь шла, а теперь ODAC вдруг вылез. Возвращаясь к первоначальному вопросу: в OraSession.Options достаточно включить NeverConnect, если правильно понял.

13K
30 апреля 2007 года
babe_vampire
17 / / 24.11.2005
Если используется ODAC (да даже если ADO), то не стоит указывать параметры соединения в самом компоненте доступа к данным. Используй TOraSession (соотв. TADOConnection). При использовании ODAC лучше указать режим NET и задать полностью строку соединения вида server:port:sid (пример 127.0.0.66:1251:orcl). В этом случае ты отвяжешь приложение от необходимости использовать клиент Oracle.
Активировать сессию лучше из кода программы, а ещё лучше расположить все компоненты доступа к данным на TDataModule и на его OnCreate повесить код вида:

function TDmOra.FormCreate(Sender:TObject);
begin
if not osMySession.Connected then
begin
try
osMySession.Connect;
except
on E:EOraError do
begin
{код обработки ошибки соединения, вплоть до закрытия приложения}
end;
end;
end;
end;

Все остальные компоненты лучше активировать после соединения.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог