Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Sysdate Oracle передаю в VB, ошибка литерала? / 25 сообщений из 60, страница 1 из 3
11.04.2008, 14:59
    #35250051
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Доброго времени суток,

Возникла странная ошибка, которая у меня выходила, но потом с помощью динамического запроса, вышел из ситуации (но там не использовал текущее время), теперь просто возникла необходимость использовать sysdate. Собственно все просто, есть вот такая простейшая процедура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Create or replace procedure ......
..........
if i.date_to is null then 
date_sys:=to_date(sysdate,'dd.mm.yyyy'); 
end if;
......................
end;
Делаю простейший запуск и на этой вылетает ошибка литерала, собственно подставил все это дело в динамику, ошибка исчезает, но sysdate определяется неверно, из-за чего возвращается неправильное значение :(
Испробовал много вариантов, не получается подставить системную дату хоть треснись.
В Оракле все работает кул. А с VB ошибка :(

Может знает как с этим бороться :)
...
Рейтинг: 0 / 0
11.04.2008, 15:10
    #35250094
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Вот так запускаю и пытаюсь получить оракловый sysdate в VB :

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Command3_Click()
Dim sSQLString As String
sSQLString = "select to_date(sysdate,'dd.mm.yyyy') from dual"
      Set rs = Connection1.Execute(sSQLString)
      Text1.Text = rs("sysdate")
      Set rs = Nothing
End Sub
...
Рейтинг: 0 / 0
11.04.2008, 15:20
    #35250121
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
ну так вы его неявно в стринг преобразуете сразу!

так надо:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim d as Date

sSQLString = "select sysdate as sd from dual"
Set rs = Connection1.Execute(sSQLString)
d=rs( 0 ) 'или rs!sd

Debug.print Format(d,"dd.mm.yyyy")
...
Рейтинг: 0 / 0
11.04.2008, 15:29
    #35250150
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
А как быть если я использую внутри процедурки sysdate при этом я не возвращаю ничего в VB, он все равно ругается на литерал? И ругается именно когда начинаю использовать to_date(sysdate,'dd.mm.yyyy'), повторюсь в самом оракле обрабатывается нормально, а через VB никак :(
...
Рейтинг: 0 / 0
11.04.2008, 15:33
    #35250159
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
где ругается (на какой строчке кода) и как (точный код ошибки и описание)?
...
Рейтинг: 0 / 0
11.04.2008, 15:43
    #35250199
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Запускаю обычный поиск по датам, при этом когда возвращаются пустые значения, подставляю
Код: plaintext
date_sys:=to_date(sysdate,'dd.mm.yyyy')

И вот тут беда, видимо от того что строка у меня:
Код: plaintext
Dim sSQLString As String

Он видит ее как стринг :(

Ошибка:
ORA-01861: литерал не соотвествует формату строки
ORA-06512 на recalc, на line 37

Полный код запуска:
Код: plaintext
1.
2.
sSQLString = "declare num number :='" & Text1.Text & "'; mon number :=" & Text3.Text & "; yea number :=" & Text4.Text & "; begin billdba.recalc(num,mon,yea); end;"
      Set rs = Connection1.Execute(sSQLString)
      Set rs = Nothing
...
Рейтинг: 0 / 0
11.04.2008, 15:57
    #35250250
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
pl/sql код не поддерживается провайдером OLE-DB.
для выполнение таких пакетов вам придется обратиться к OO4O (см документацию оракла).
...
Рейтинг: 0 / 0
11.04.2008, 15:59
    #35250254
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
для вызова готовых хранимых процедур или функций оракла используйте ADODB.Command с коллекцией параметров. примеры ищите на форуме или в мсдн.
...
Рейтинг: 0 / 0
11.04.2008, 16:00
    #35250258
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Ясно, спасибо, но там особо много по этому поводу не нашел.
...
Рейтинг: 0 / 0
15.04.2008, 14:07
    #35256191
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Решение нашел, реализовал посредством конструкции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim username$, Password$, DatabaseName$, Connect$
username$ = Form3.Text1.Text
Password$ = Form3.Text2.Text
DatabaseName$ = Form3.Text3.Text
Connect$ = username$ + "/" + Password$

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(DatabaseName$, Connect$,  0 &)

OraDatabase.Parameters.Add "EMPNO", Text1.Text, ORAPARM_INPUT
OraDatabase.Parameters("EMPNO").serverType = ORATYPE_VARCHAR

OraDatabase.Parameters.Add "MON", Text3.Text, ORAPARM_INPUT
OraDatabase.Parameters("MON").serverType = ORATYPE_NUMBER

OraDatabase.Parameters.Add "YER", Text4.Text, ORAPARM_INPUT
OraDatabase.Parameters("YER").serverType = ORATYPE_NUMBER

OraDatabase.ExecuteSQL ("declare Begin procedure(:EMPNO, :MON,:YER); end;")

Set OraDatabase = Nothing

Все выполнилось без проблем.
...
Рейтинг: 0 / 0
15.04.2008, 14:15
    #35256221
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Konst_Oneдля вызова готовых хранимых процедур или функций оракла используйте ADODB.Command с коллекцией параметров. примеры ищите на форуме или в мсдн.
Теперь буду копать в сторону ADODB.Command, т.к. у меня все реализовано с помощью этой коллекции. Но она пока упорно не пашет :)
...
Рейтинг: 0 / 0
15.04.2008, 14:26
    #35256269
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
там все почти также, только надо указывать сразу, что это хранимая процедура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim cmd As ADODB.Command
Dim p As ADODB.Parameters

    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = CN_ORA
    cmd.CommandTimeout =  20 
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "CUST.MESSAGE"
    Set p = cmd.Parameters
    p.Append cmd.CreateParameter("RET", adInteger, adParamReturnValue)
    cmd.Execute
    OraMESSAGE = p("RET").Value
    Set p = Nothing
    Set cmd = Nothing
...
Рейтинг: 0 / 0
15.04.2008, 14:49
    #35256351
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
С возвращением, понятно.
А если мне нужно передать в процедуру 3 параметра, и ответ от Оракла соответственно мне не нужен. Как мне их правильно описать?
...
Рейтинг: 0 / 0
15.04.2008, 15:07
    #35256425
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
аналогично:

Код: plaintext
1.
2.
3.
4.
5.
    Set p = cmd.Parameters
    p.Append cmd.CreateParameter("RET", adInteger, adParamReturnValue)
    p.Append cmd.CreateParameter("EMPNO", adVarChar, adParamInput,  50 , EMPNO)
    p.Append cmd.CreateParameter("MON", adNumeric, adParamInput, , MON)
    p.Append cmd.CreateParameter("YER", adNumeric, adParamInput, , YER)
    cmd.Execute
...
Рейтинг: 0 / 0
15.04.2008, 15:18
    #35256463
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Прикольно ругается на литерал :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim p As ADODB.Parameters
cmd.ActiveConnection = Connection1
cmd.CommandTimeout =  20 
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "procedure"
Set p = CMD.Parameters
p.Append cmd.CreateParameter("EMPNO", adVarChar, adParamInput,  50 , Text1.Text)
p.Append cmd.CreateParameter("MON", adNumeric, adParamInput, , Text3.Text)
p.Append cmd.CreateParameter("YER", adNumeric, adParamInput, , Text4.Text)
cmd.Execute
...
Рейтинг: 0 / 0
15.04.2008, 15:29
    #35256515
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim mon as String
Dim yer as String

mon=Text3.Text
yer=Text4.Text


Debug.Print "Mon=" & mon
Debug.Print "Yer=" & yer

у вас похоже вместо десятичной точки запятая.
...
Рейтинг: 0 / 0
15.04.2008, 15:29
    #35256516
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Так где же грабли ?
Судя по конструкции, запросы аналогичные, а ошибка выдается с Adodb.... Странно и непонятно :(
...
Рейтинг: 0 / 0
15.04.2008, 15:33
    #35256539
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
с параметрами разберитесь, что в процедуру передаете. кстати, название процедуры нехорошее, лучше сменить. указывать пакет желательно перед названием процедуры.

попробуйте тестовые параметры :

Код: plaintext
1.
2.
EMPNO="a"
MON= 1 
YER= 2008 

и не через текстбоксы а прям в коде!
...
Рейтинг: 0 / 0
15.04.2008, 15:35
    #35256548
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Konst_One
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim mon as String
Dim yer as String

mon=Text3.Text
yer=Text4.Text


Debug.Print "Mon=" & mon
Debug.Print "Yer=" & yer

у вас похоже вместо десятичной точки запятая.
Ну вот такие переменные:
Mon=3
Yer=2008

Напрямую проставляю:
p.Append cmd.CreateParameter("EMPNO", adVarChar, adParamInput, 50, EMPNO)
p.Append cmd.CreateParameter("MON", adNumeric, adParamInput, , 4)
p.Append cmd.CreateParameter("YER", adNumeric, adParamInput, , 2008)
Те же грабли, параметры ADODB упорно не хотят работать :(
...
Рейтинг: 0 / 0
15.04.2008, 15:35
    #35256550
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
и провайдер нужен: Microsoft OLE DB Provider for Oracle
...
Рейтинг: 0 / 0
15.04.2008, 15:36
    #35256556
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Konst_Oneи провайдер нужен: Microsoft OLE DB Provider for Oracle
Строка подключения:
Код: plaintext
1.
Connection1 = "Provider=OraOLEDB.Oracle.1;Password=" & Text2.Text & ";Persist Security Info=True;
User ID=" & Text1.Text & ";Data Source=" & Text3.Text & ";"
...
Рейтинг: 0 / 0
15.04.2008, 15:37
    #35256559
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
полный код своего пакета с этой процедурой на оракле сюда выкладывайте, посмотрим на объявления.
...
Рейтинг: 0 / 0
15.04.2008, 15:37
    #35256563
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
провайдер не тот!
...
Рейтинг: 0 / 0
15.04.2008, 15:46
    #35256598
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
Konst_Oneпровайдер не тот!

Вот этот?
Код: plaintext
Connection1 = "Provider=MSDAORA.1;Password=" & Text2.Text & ";Persist Security Info=True;User ID=" & Text1.Text & ";Data Source=" & Text3.Text & ";"
А разница?
...
Рейтинг: 0 / 0
15.04.2008, 15:54
    #35256628
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sysdate Oracle передаю в VB, ошибка литерала?
да, именно этот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub RunProc(Conn as ADODB.Connection)

Dim cmd As ADODB.Command
Dim p As ADODB.Parameters

On error goto err_debug

 100  Set cmd=New ADODB.Command
 110  Set cmd.ActiveConnection = Conn
 120  cmd.CommandTimeout =  20 
 130  cmd.CommandType = adCmdStoredProc
 140  cmd.CommandText = "procedure"
 150  Set p = CMD.Parameters
 160  p.Append cmd.CreateParameter("RET", adInteger, adParamReturnValue)
 170  p.Append cmd.CreateParameter("EMPNO", adVarChar, adParamInput,  50 , "a")
 180  p.Append cmd.CreateParameter("MON", adNumeric, adParamInput, ,  1 )
 190  p.Append cmd.CreateParameter("YER", adNumeric, adParamInput, ,  2008 )
 200  cmd.Execute

exit Sub

err_debug:
Debug.Print Erl & ":" & Err.Number & " " & Err.Description
End Sub


пробуйте
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Sysdate Oracle передаю в VB, ошибка литерала? / 25 сообщений из 60, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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