Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Recordset - две команды / 21 сообщений из 21, страница 1 из 1
04.02.2014, 22:52
    #38549469
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Доброго дня господа !
Подскажите пожалуйста

Необходимо выполнить в одном RecordSet-е две команды
В одном так как - уже написана и работает СИСТЕМНАЯ функция
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Dim SqlStr as String
  SqlStr = "alter session set nls_date_format='DD-MM-YYYY'; _
               select * from TABLE where DAY=Cast('10-12-2013' as Date);"

  Dim rsExes As New ADODB.Recordset
  rsExes.CursorLocation = adUseClient
  rsExes.ActiveConnection = "ODBC;........"
  rsExes.Source = SqlStr
  Call rsExes.Open



Как можно такое выполнить ?
Буду признателен за пример
...
Рейтинг: 0 / 0
04.02.2014, 23:37
    #38549496
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
подчеркивание не работает внутри текстовых строк
Код: vbnet
1.
2.
  SqlStr = "alter session set nls_date_format='DD-MM-YYYY'; " + _
               "select * from TABLE where DAY=Cast('10-12-2013' as Date);"


SQL-сервер какой?
...
Рейтинг: 0 / 0
05.02.2014, 00:38
    #38549525
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Shocker.Pro,

Oracle 11G
...
Рейтинг: 0 / 0
05.02.2014, 00:44
    #38549530
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Ну так помогло или проблема осталась? И в чем она, собственно, проблема?
...
Рейтинг: 0 / 0
05.02.2014, 01:21
    #38549555
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Shocker.Pro,

В смысле ПРОБЕЛА ? (это когда в форум копировал текст .... описался)

Суть в том что надо
1. перенастроить NLS формат для даты
2. выполнить запрос
3. вернуть данные

Самостоятельно распарсивать тест запроса (на две части и анализировать) не хотелось бы - ГЕМОРОЙ..

P.S. Применять функцию Oracle To_Date('10-12-2013','DD-MM-YYYY') - нельзя, запрос к распределен-
ной базе, не верно оптимизируеться выполнение

Может сам объект Recordset - может выполнить две команды в одном сессии ? КАК-ТО хитро ...????
...
Рейтинг: 0 / 0
05.02.2014, 01:43
    #38549569
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Так приведенный код не работает или что?

Как вариант, возможен такой вызов:
Код: vbnet
1.
Set rsExes = MyConnection.Execute("sql commands")



Но и твой код должен работать, поэтому спрашиваю, в чем проблема, а ты молчишь, как партизан.
...
Рейтинг: 0 / 0
05.02.2014, 12:37
    #38550036
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Shocker.Pro,

alter session set nls_date_format='DD-MM-YYYY';
select Count(*) from DUAL

В моей транкрипции точно не работает
rsExes.Source = SqlStr
Call rsExes.Open


Ваш пример
Set rsExes = MyConnection.Execute("sql commands")

"sql commands" - здесь может біть две команды ?
что возвращает Execute - RecordSet ? какой именно ?

Например написано по недоразумении ДВА selecta
alter session set nls_date_format='DD-MM-YYYY';
select Count(*) as F1 from DUAL;
select Count(*)+100 as F1 from DUAL



Спасибо за уделенное время ...
...
Рейтинг: 0 / 0
05.02.2014, 12:59
    #38550089
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HOME_Xчто возвращает Execute - RecordSet ? какой именно ?

Например написано по недоразумении ДВА selecta
alter session set nls_date_format='DD-MM-YYYY';
select Count(*) as F1 from DUAL;
select Count(*)+100 as F1 from DUAL



Спасибо за уделенное время ...

как это не странно, но вернёт столько RecordSet, сколько у Вас написано SELECTов и, скорее всего, еще один т.к называемый "пустой", в котором хранится служебная инфа

для перехода по RecordSetам есть метод NextRecordset
...
Рейтинг: 0 / 0
05.02.2014, 13:53
    #38550209
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HOME_Xточно не работаеттак можешь ты, наконец, ответить, что такое "не работает"? в чем проблема????? появляется на экране окошко "я не работаю"???
HOME_Xздесь может біть две команды ?да, любое количество

про NextRecordset уже ответили, применение:
Код: vbnet
1.
set rsExes = rsExes.NextRecordset
...
Рейтинг: 0 / 0
06.02.2014, 17:28
    #38552208
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Shocker.Pro наконец, ответить, что такое "не работает"? в чем проблема????? появляется на экране окошко "я не работаю"???


Прошу прощения господа - малость выпал из беседы !!!!!

Имею рекомендованный код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub CommandButton1_Click()
  Dim A As New ADODB.Connection, B As New ADODB.Recordset
  A.CursorLocation = adUseClient
  A.ConnectionString = "ODBC;Provider=MSDAORA;Driver={Oracle in OraClient11g_home1};UID=loginPWD=password;DBQ=database"
  A.CommandTimeout = 0
  A.Open
  On Error GoTo A
  Set B = A.Execute("alter session set nls_date_format='DD-MM-YYYY';" & vbNewLine & "select Count(*) from DUAL")
A:
  Range("A1").Value = Err.Description
End Sub



Рекомендованный код имеет меня
Если ставлю разделитель между командами = ; [Oracle][ODBC][Ora]ORA-00911: invalid character
Если НЕ ставлю разделитель между командами = [Oracle][ODBC][Ora]ORA-00922: missing or invalid option

Как быть и что ставить для много серийного выполнения ?
...
Рейтинг: 0 / 0
06.02.2014, 17:35
    #38552214
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
для начала
Код: vbnet
1.
Range("A1").Value = Err.Description

будет выполняться всегда, вне зависимости от наличия ошибки
...
Рейтинг: 0 / 0
06.02.2014, 17:39
    #38552218
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
По разделителю:
Я не знаю, требует ли оракл разделитель между командами в пакете команд - это, прежде всего, тебе виднее - дождись спеца по ораклу или задайе вопрос в соответствующем форуме.

далее - ты уверен, что находишься в контексте нужной базы данных?

далее - попробуй выполнить команды по одной, попробуй выполнить набор простых команд, типа select 1; select 2, добейся чтобы сначала просто работал код, а потом работай с реальными данными
...
Рейтинг: 0 / 0
06.02.2014, 18:10
    #38552265
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
команды корректны. ОРКАЛ не позволяет делать такой ерунды (пробовал в PL\SQl Developer)
как вариант предлагают использовать Oracle JDBC driver

может переписать запрос и отказаться от alter session set ?
...
Рейтинг: 0 / 0
06.02.2014, 18:11
    #38552270
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
Shocker.Proдалее - ты уверен, что находишься в контексте нужной базы данных?

Абсолютно уверен
Это служебный обьекты и стандартные команды

Shocker.Proдалее - попробуй выполнить команды по одной, попробуй выполнить набор простых команд, типа select 1; select 2, добейся чтобы
сначала просто работал код, а потом работай с реальными данными

Абсолютно выполнено до использования компонентов ADODB
...
Рейтинг: 0 / 0
06.02.2014, 18:15
    #38552276
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HandKotОРКАЛ не позволяет делать такой ерундыв смысле? он не умеет выполнить пакет команд? что-то не верится.

Ну тогда надо оформить как хранимку
...
Рейтинг: 0 / 0
06.02.2014, 18:17
    #38552280
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HandKot alter session set


Идет преобразование ДАТЫ, надо установить NLS формат
= Cast('20-12-2013' as Date)

P.S. To_Date ('','DD-MM-YYYY')- использовать не могу - распределенн. база не
верно оптимизирует план с использование ИМЕННО этой фукнции.

HandKot Oracle JDBC driver

Слишком сложно - УЖЕ есть системная функция - много переделывать.
...
Рейтинг: 0 / 0
06.02.2014, 18:29
    #38552310
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HOME_XHandKot alter session set


Идет преобразование ДАТЫ, надо установить NLS формат
= Cast('20-12-2013' as Date)

P.S. To_Date ('','DD-MM-YYYY')- использовать не могу - распределенн. база не
верно оптимизирует план с использование ИМЕННО этой фукнции.


так может Вас спасет параметиризованный запрос?
Parameters Collection (ADO)
с ХП это бес проблем, думаю и с SELECT должно прокатить.

ЗЫЖ использование параметров - лучший вариант при работе с АДО (не надо приводить дату в соответствие с установками сессий)
...
Рейтинг: 0 / 0
10.02.2014, 11:10
    #38555384
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HOME_X, у Вас получилось ил "забили" ?
...
Рейтинг: 0 / 0
12.02.2014, 19:46
    #38558983
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HandKot,

С двумя командами нет, имею в виду НЕ только парамт. дата
а просто ДВЕ команду.

С выполнением конкретной задачи по распредленным базам - порядок
обошел через предложение with
...
Рейтинг: 0 / 0
13.02.2014, 08:32
    #38559305
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
HOME_X, подозреваю, что оракл не может выполнить ДВА selectа в одном батче.
По крайней мере, я не смог этого добиться даже в PL-SQL Developere. Но нужно учесть, что я с ораклом не работаю и не знаю всех его тонкостей

А Вашу проблему с alter session решается на уровне параметров, как я и говорил
...
Рейтинг: 0 / 0
14.02.2014, 11:54
    #38560812
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset - две команды
может, но нужно юзать ODAC компоненты
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Recordset - две команды / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]