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


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Прямой запрос к базе на Oracle. Проблемы
27. Июня 2007 :: 16:38
Печать  
Помогите решить проблему с прямым запросом к Ораклу.
Делаю так:
Код
Выбрать все
DB=СоздатьОбъект("ODBCDatabase");
DB.Соединение("DRIVER={Microsoft ODBC for Oracle};SERVER=***;Uid=***;Pwd=***;");
RS=СоздатьОбъект("ODBCRecordSet");
RS.SetDatabase(DB);
ТЗ=Создатьобъект("ТаблицаЗначений");
ТекстЗапроса="
|SELECT HIS.TXN_DT AS DT, HIS.PART_NO AS NO
|FROM TS_HISTORY HIS
|WHERE trunc (txn_dt,'DDD') between  to_date('"+Строка(Дата1)+"','DD.MM.YY') and  to_date('"+Строка(Дата2)+"','DD.MM.YY')";
ТЗ=RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку(); 


Так, как выше - работает на ура.

Если меняю текст запроса на такой:
Код
Выбрать все
ТекстЗапроса="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 as PURCH, SVC.TS_TRANSIT_D as TRANS, SVC.TS_SUPPL as 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.ВыполнитьИнструкцию(ТекстЗапроса);
{D:\1S BASES\ЗАГРУЗКАСЧЕТОВ.ERT(595)}: State 42000, native 933, message [Microsoft][ODBC driver for Oracle][Oracle]ORA-00933: SQL command not properly ended 


Т.е. такое впечатление, что запрос доходит до сервера в каком-то обрезанном виде.
Как ни крутил, - если в запросе выборка из более одной таблицы, то кампец...

Интересно, что через СоздатьОбъект("ADODB.Connection"), т.е. без 1срр, точно такой запрос нормально работает, а через ОДБС с 1срр не хочет Печаль
А хочется именно через ОДБС, да прямиком в ТЗ и далее в ТП...

Где собака порылась?
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Запрос к Oracle. Проблемы
Ответ #1 - 27. Июня 2007 :: 16:52
Печать  
Пардон: 1С++ v.2.5.0.2 Nightly build 2007-06-04
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #2 - 27. Июня 2007 :: 17:15
Печать  
А через ADODB наверно работает OLEDB провайдер, а не ODBC драйвер.
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #3 - 27. Июня 2007 :: 17:17
Печать  
Ну вроде да:
АДОСтрокаИнициализации = "Provider=MSDASQL.1;Password=***;Persist Security Info=True;User ID=***Смехata Source=***";
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #4 - 27. Июня 2007 :: 17:20
Печать  
Просто не хочется в цикле терзать и себя и сервер: дай очередную запись - на получи, дай очередную запись - на получи
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #5 - 27. Июня 2007 :: 17:28
Печать  
Вспоминаю, что когда-то недавно кто-то из тутошних корифеев предлагал добавить в 1с++ метод, выводящий реально посланный на сервер запрос, что-то типа Отладка(). В этом случае наверное такое очень бы пригодилось...
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #6 - 27. Июня 2007 :: 17:37
Печать  
да нет, так именно ODBC драйвер используется..
для OLEDB провайдера такая строка: Provider=MSDAORA
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #7 - 27. Июня 2007 :: 17:39
Печать  
Kapet писал(а) 27. Июня 2007 :: 17:28:
Вспоминаю, что когда-то недавно кто-то из тутошних корифеев предлагал добавить в 1с++ метод, выводящий реально посланный на сервер запрос, что-то типа Отладка(). В этом случае наверное такое очень бы пригодилось...

Этот метод там был всегда. Вызови перед выполнением запроса Отладка(1).
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

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

Вот тут я не силен...

Просто мне интересно: можно как-то тут сделать такое ТЗ=RS.ВыполнитьИнструкцию(ТекстЗапроса), чтоб быстро загнать запрос в ТЗ?
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #9 - 27. Июня 2007 :: 17:46
Печать  
DmitrO писал(а) 27. Июня 2007 :: 17:39:
Kapet писал(а) 27. Июня 2007 :: 17:28:
Вспоминаю, что когда-то недавно кто-то из тутошних корифеев предлагал добавить в 1с++ метод, выводящий реально посланный на сервер запрос, что-то типа Отладка(). В этом случае наверное такое очень бы пригодилось...

Этот метод там был всегда. Вызови перед выполнением запроса Отладка(1).

Отладка(1) в данном случае выдает желаемое за действительность: реально посланный запрос где-то обрезан, о чем и ругается сервер: SQL command not properly ended
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #10 - 27. Июня 2007 :: 17:52
Печать  
Отладка(1) выдает то, что отправляется на драйвер.
  
Наверх
ICQ  
IP записан
 
Kapet
Senior Member
****
Отсутствует


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

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #11 - 27. Июня 2007 :: 17:54
Печать  
DmitrO писал(а) 27. Июня 2007 :: 17:52:
Отладка(1) выдает то, что отправляется на драйвер.

Ну да, и я о том же: надо то, что реально шлется на сервер, который в моем случае ругается на недолжным образом законченный запрос...
Отладка(1) у меня показывает просто идилию...
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #12 - 27. Июня 2007 :: 18:29
Печать  
как тогда через АДО работает вообще не понятно..
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Прямой запрос к базе на Oracle. Проблемы
Ответ #13 - 27. Июня 2007 :: 18:31
Печать  
to Kapet
А ты попробуй присоединиться через родной Оракловый драйвер ODBC
Примерно так.
DB.Соединение("Driver={Oracle in OraHome92};dbq=***;Uid=***;Pwd=***");
Через майкрософтовский у меня недавно ничего не получлось.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

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

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать