Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Прямой запрос к базе на Oracle. Проблемы (число прочтений - 7507 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #15 - 29. Июня 2007 :: 08:37
Печать  
vip писал(а) 27. Июня 2007 :: 18:31:
to Kapet
А ты попробуй присоединиться через родной Оракловый драйвер ODBC
Примерно так.
DB.Соединение("Driver={Oracle in OraHome92};dbq=***;Uid=***;Pwd=***");
Через майкрософтовский у меня недавно ничего не получлось.

DB.Соединение("Driver={Oracle in OraDb10g_Home1};dbq=***;Uid=***;Pwd=***");
Да, соединяется. Но...
ТЗ=RS.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\1S BASES\ЗАГРУЗКАСЧЕТОВ.ERT(596)}: State HY000, native 933, message [Oracle][ODBC][Ora]ORA-00933: SQL command not properly ended
  Печаль
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #16 - 29. Июня 2007 :: 08:39
Печать  
DmitrO писал(а) 27. Июня 2007 :: 18:45:
М.б. он результат до конца обработать не может. Попробуй еще такой код:
Код
Выбрать все
Результат = RS.Открыть(ТекстЗапроса);
Если Результат=0 Тогда
  Сообщить(RS.ПолучитьОписаниеОшибки());
КонецЕсли;
НомерЗаписи=0;
Пока RS.ВКонце()=0 Цикл
  НомерЗаписи=НомерЗаписи+1;
  Сообщить("Получена запись:"+НомерЗаписи);
  Результат = RS.След();
  Если Результат=0 Тогда
    Сообщить(RS.ПолучитьОписаниеОшибки());
  КонецЕсли;
КонецЦикла; 


Весь сыр-бор был уйти от такого цикла и махом получить результат запроса в тз...
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #17 - 29. Июня 2007 :: 09:16
Печать  
Через OLEDBData аналогичная жо:
Код
Выбрать все
DB=СоздатьОбъект("OLEDBData");
DB.Соединение("Provider=MSDASQL.1;Password=***;Persist Security Info=True;User ID=***;Data Source=***");
Команда=DB.СоздатьКоманду();
ТекстЗапроса="Select TRANS.bl_no, trunc(TRANS.receive_dt,'DDD') AS DT, TRANS.part_no, TRANS.part_desc, to_char(TRANS.part_price,'999999999.99') as PRICE, sum(TRANS.transit_qty) as QTY
|from SVC.TS_TRANSIT_D AS TRANS
|inner join SVC.TS_PURC_D as PURCH on (TRANS.purchase_no = PURCH.purchase_no and TRANS.purchase_seq = PURCH.purchase_seq)
|inner join SVC.TS_SUPPL as SUPL on SUPL.supplier_cd = TRANS.supplier_cd
|where
|PURCH.STATUS = 'CLOS'
|and trunc(TRANS.receive_dt,'DDD') between  to_date('"+Строка(Дата1)+"','DD.MM.YY') and  to_date('"+Строка(Дата2)+"','DD.MM.YY')
|and SUPL.nation_cd <> 'NLD'
|group by (TRANS.receive_dt, TRANS.bl_no, SUPL.PAY_TO, TRANS.part_no, TRANS.part_desc, TRANS.part_price) ";
ТЗ=Команда.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();
Команда.Закрыть(); 


ТЗ=Команда.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\1S BASES\ЗАГРУЗКАСЧЕТОВ.ERT(601)}: FAILED! ICommandText::Execute(): [Oracle][ODBC][Ora]ORA-00933: SQL command not properly ended
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #18 - 29. Июня 2007 :: 09:51
Печать  
В общем я почти ничего не понял... Только то, что Оракл еще не дорос до "иннер джойн", и, как писал выше VIP  - мелкомягкий дривер "Microsoft ODBC for Oracle" тут  действительно не работает...

Всё заработало так:
Код
Выбрать все
DB=СоздатьОбъект("OLEDBData");
DB.Соединение("Provider=MSDASQL.1;Password=***;Persist Security Info=True;User ID=***;Data Source=***");
Команда=DB.СоздатьКоманду();
ТЗ=Создатьобъект("ТаблицаЗначений");
ТекстЗапроса="select TRANS.bl_no, trunc(TRANS.receive_dt,'DDD') AS DT, SUPL.PAY_TO, TRANS.part_no, TRANS.part_desc, to_char(TRANS.part_price,'999999999.99') as PRICE, sum(TRANS.transit_qty) as QTY
|from SVC.TS_PURC_D PURCH,
|SVC.TS_TRANSIT_D TRANS, SVC.TS_SUPPL SUPL
|where
|PURCH.purchase_no = TRANS.purchase_no and
|PURCH.purchase_seq = TRANS.purchase_seq and
|PURCH.STATUS = 'CLOS' and
|TRANS.supplier_cd = SUPL.supplier_cd
|and trunc(TRANS.receive_dt,'DDD') between  to_date('"+Строка(Дата1)+"','DD.MM.YY') and  to_date('"+Строка(Дата2)+"','DD.MM.YY')
|and SUPL.nation_cd <> 'NLD'
|group by TRANS.receive_dt, TRANS.bl_no, SUPL.PAY_TO, TRANS.part_no,  TRANS.part_desc, TRANS.part_price";
ТЗ=Команда.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку(); 



и так;
Код
Выбрать все
DB=СоздатьОбъект("ODBCDatabase");
DB.Соединение("Driver={Oracle in OraDb10g_Home1};dbq=***;Uid=***;Pwd=***");
RS=СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);
ТЗ=Создатьобъект("ТаблицаЗначений");
ТекстЗапроса="select TRANS.bl_no, trunc(TRANS.receive_dt,'DDD') AS DT, SUPL.PAY_TO, TRANS.part_no, TRANS.part_desc, to_char(TRANS.part_price,'999999999.99') as PRICE, sum(TRANS.transit_qty) as QTY
|from SVC.TS_PURC_D PURCH,
|SVC.TS_TRANSIT_D TRANS, SVC.TS_SUPPL SUPL
|where
|PURCH.purchase_no = TRANS.purchase_no and
|PURCH.purchase_seq = TRANS.purchase_seq and
|PURCH.STATUS = 'CLOS' and
|TRANS.supplier_cd = SUPL.supplier_cd
|and trunc(TRANS.receive_dt,'DDD') between  to_date('"+Строка(Дата1)+"','DD.MM.YY') and  to_date('"+Строка(Дата2)+"','DD.MM.YY')
|and SUPL.nation_cd <> 'NLD'
|group by TRANS.receive_dt, TRANS.bl_no, SUPL.PAY_TO, TRANS.part_no,  TRANS.part_desc, TRANS.part_price";
ТЗ=RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку(); 


А с мелкомягкими дровами таки жо:
Код
Выбрать все
DB.Соединение("DRIVER={Microsoft ODBC for Oracle}...
ТЗ=RS.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\1S BASES\ЗАГРУЗКАСЧЕТОВ.ERT(646)}: State 01S01, native 0, message [Microsoft][ODBC driver for Oracle]Ошибка в строке 1  


Всем спасибооооооо!
« Последняя редакция: 29. Июня 2007 :: 11:26 - Kapet »  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #19 - 29. Июня 2007 :: 10:06
Печать  
DmitrO писал(а) 27. Июня 2007 :: 17:37:
да нет, так именно ODBC драйвер используется..
для OLEDB провайдера такая строка: Provider=MSDAORA

Сорри за святотатство, но судя по рабочему варианту выше - вроде таки OLEDB провайдер используется...
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать