|
|
|
Как подключиться к БД Oracle? | ☑ | ||
|---|---|---|---|---|
|
0
gar_den
19.01.09
✎
13:56
|
Есть БД на Oracle. имеется имя ODBC источника и пользователь с паролем. Нужно как-то подключиться к БД и достать инфу из таблиц. Как это сделать?
|
|||
|
1
Дуб
19.01.09
✎
13:57
|
||||
|
2
Дуб
19.01.09
✎
13:57
|
+(1) а дальше - вопрос топологии БД
|
|||
|
3
Дуб
19.01.09
✎
13:58
|
Я в своё время из Оракула данные тягал в 1С. Таблицы мне называли прогеры, которые Оракула сопровождали.
|
|||
|
4
чупа
19.01.09
✎
14:01
|
чувак, у меня регулярный обмен в обе стороны с ораклом
щас у меня ночь почти давай свой контакт, завтра вышлю тебе процедуры, если тему эту увижу |
|||
|
5
gar_den
19.01.09
✎
14:03
|
(4) Буду безмерно признателен!)) gar_den@rambler.ru, можно в аську 244417690
|
|||
|
6
gar_den
19.01.09
✎
14:05
|
а у меня щас 15.00, вот дали букмажку как раз с топологией БД и впуть! ща нада как-нить 3 часика отвоевать)))
|
|||
|
7
Дуб
19.01.09
✎
14:08
|
(6) так что мешает? Дерзай!
|
|||
|
8
gar_den
19.01.09
✎
15:26
|
отвлекли...
|
|||
|
9
gar_den
19.01.09
✎
16:09
|
вобщем пишу вот так:
DataBaseConnection = Новый COMObject("ADODB.Connection"); DataBaseConnection.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=itgas;User Id=C1;Password=system1c;"; DataBaseConnection.Open(); В итоге ошибка: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанного поставщика. Вероятно, он установлен неправильно. DataBaseConnection.Open(); |
|||
|
10
ДенисЧ
19.01.09
✎
16:09
|
Драйвер оракля установлен?
|
|||
|
11
Дуб
19.01.09
✎
16:11
|
(10) ты сначала спроси: знает ли автор, где это посмотреть..
|
|||
|
12
ДенисЧ
19.01.09
✎
16:11
|
(11) Он сам сейчас это спросит :-0
|
|||
|
13
gar_den
19.01.09
✎
16:58
|
(10,11,12) а где это посмотреть?
|
|||
|
14
gar_den
19.01.09
✎
16:59
|
(13) внатуре!
|
|||
|
15
ДенисЧ
19.01.09
✎
17:00
|
(144) В апплете ODBC панели управления. А ещё, если ты его специально не ставил, то его скорее всего нет.
Или обратись к DBA, или сходи на сайт оракля. |
|||
|
16
dk
19.01.09
✎
17:22
|
(13) создаешь файл 1.udl и запускаешь, потом ищешь в списке поставщиков данных
если вдруг он там есть: установи все параметры, и потом блокнотом посмотри этот файлик - можешь сильно удивиться :) |
|||
|
17
AquaKosh
19.01.09
✎
17:47
|
(9) Может поможет...
http://www.oracle.com/technology/tech/windows/ole_db/index.html |
|||
|
18
чупа
20.01.09
✎
02:58
|
Итак, можно через ADO, как тут уже советовали,
можно через Oracle Client, что на мой взгляд предпочтительнее делается так: MySession = CreateObject("OracleInProcServer.XOraSession"); Base = MySession.OpenDatabase(SID, Login + "/" + Password, 0); // затем, // если нужен запуск хранимой процедуры, то Base.ExecuteSQL("begin export_1c; end;"); // если нужен возврат курсора (рез-т запроса) то Clients = Base.CreateDynaset("select * from clients",0); Пока Clients.EOF = 0 Цикл сообщить(Clients.Fields("CLIENT_ID").Value); Clients.MoveNext(); КонецЦикла; |
|||
|
19
su_mai
20.01.09
✎
06:38
|
(18) Уважаемый Чупа. У меня аналогичная ситуация! Плиз хелп и ми... кинте на мыло процедурки...
|
|||
|
20
чупа
20.01.09
✎
06:48
|
(19) так все же в (18)
какие-то вопросы остаются? |
|||
|
21
su_mai
20.01.09
✎
07:07
|
(20) Пока нет, но в процессе появятся. Спасибо!
|
|||
|
22
gar_den
20.01.09
✎
14:06
|
Работаю через ADO
(через Oracle Client не получилось) подключаюсь, достаю данные, только вот они в кракозябрах выходят. Как-то кодировку надо установить, а как? кто-нибудь знает? |
|||
|
23
bazvan
20.01.09
✎
14:11
|
НА ИТС есть обработка подключения к БД там вроде и Оракл есть
|
|||
|
24
чупа
20.01.09
✎
14:29
|
(22) клиент на машине установлен?
|
|||
|
25
чупа
20.01.09
✎
14:30
|
сделай tnsping <SID базы>
|
|||
|
26
gar_den
20.01.09
✎
14:40
|
(24) да, подключение же проходит, и данные вытаскивает
|
|||
|
27
Дуб
20.01.09
✎
14:56
|
(22) попробуй другой драйвер. По крайней мере, при работе с *.dbf семёрки читать кириллицу можно не любым драйвером..
|
|||
|
28
чупа
20.01.09
✎
15:00
|
(26) да действительно...
У меня через клиент не получалось пока не делал установку в режиме Administrator (там еще стандарт и кастом кажится). Он без этого ком-объект OracleInProcServer не регистрировал. кодировка выставляется в реестре (щас не могу посмотреть) по памяти local_machine\oracle\home0\ параметр nls_lang. он состоит из 3 частей 1_2.3, у тебя например russian_cis.win1252 1-й язык, 2-й территория, 3й кодовая страница кажется так тебе нужен 3-й бывает требуется с 866 менять на 1252 и наоборот |
|||
|
29
gar_den
20.01.09
✎
15:37
|
в реестре ничего нельзя менять - ITшники шипко против
|
|||
|
30
чупа
21.01.09
✎
00:36
|
(29) скорее всего вы друг друга не поняли.
кодовая страница на клиенте устанавливается в реестре. на сервере есть своя кодовая страница, она в сервере оракл установлена. например, 1252 или юникод сервер передает данные клиенту в этой кодировке, на клиенте стоит тоже кодовая страница, она устанавливается в реестре (если клиент на виндовсе), тут уже может быть кодовая страница, например, 866 будет проходить трансляция из одной в другую кодировки. вообщем, если надо меня кодовыую страницу то именно в реестре. посмотри какая у тебя стоит? какая будет там, для кого ты делаешь разработку? |
|||
|
31
gar_den
22.01.09
✎
10:30
|
разобрался с кодировкой. теперь вопрос с вызовом хранимой процедуры:
DataBaseConnection = Новый COMObject("ADODB.Connection"); Кодировка = "windows-1251"; DataBaseConnection.ConnectionString = "Provider=MSDASQL.1;Password=" + Password + ";Persist Security Info=True;CharSet=" + Кодировка + ";User ID=" + Login + ";Data Source=" + DataSourse; DataBaseConnection.Open(); RecordSet = Новый COMObject("ADODB.Recordset"); RecordSet.ActiveConnection = DataBaseConnection; RecordSet.Open("SELECT * FROM " + Table + " WHERE " + TrimALL(Uslovie)); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = DataBaseConnection; Command.CommandType = 4; //"adCmdStoredProc" (вызов хранимой процедуры); НаборЗаписей = Новый COMОбъект("ADODB.Recordset"); While NOT RecordSet.EOF Do Command.CommandText = "itg.get_prices('АСПЭК', 1, 1, '2008-09-22')"; Command.Execute(); НаборЗаписей.Open(Command); НаборЗаписей.MoveFirst(); RecordSet.MoveNext(); EndDo; На строке НаборЗаписей.MoveFirst(); выдается ошибка: Ошибка при вызове метода контекста (MoveFirst): Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. |
|||
|
32
ДенисЧ
22.01.09
✎
10:33
|
В каком виде itg.get_prices возвращает результаты?
|
|||
|
33
gar_den
22.01.09
✎
11:14
|
(32) число
|
|||
|
34
ДенисЧ
22.01.09
✎
11:16
|
НаборЗаписей = Command.Execute()
? |
|||
|
35
gar_den
22.01.09
✎
11:22
|
все получилось. сделал по-другому:
RecordPrice = DataBaseConnection.Execute("SELECT itg.get_prices('БелкамнефтьПТ(НПУ-2)', 2, 3, '2008-12-12') FROM " + Table); Price = 0; If RecordPrice.Fields.Count > 0 Then Price = RecordPrice.Fields[0].Value; EndIf; |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |