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

Возникла странная ошибка, которая у меня выходила, но потом с помощью динамического запроса, вышел из ситуации (но там не использовал текущее время), теперь просто возникла необходимость использовать 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250094
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так запускаю и пытаюсь получить оракловый 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250121
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так вы его неявно в стринг преобразуете сразу!

так надо:

Код: 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250150
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как быть если я использую внутри процедурки sysdate при этом я не возвращаю ничего в VB, он все равно ругается на литерал? И ругается именно когда начинаю использовать to_date(sysdate,'dd.mm.yyyy'), повторюсь в самом оракле обрабатывается нормально, а через VB никак :(
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250159
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где ругается (на какой строчке кода) и как (точный код ошибки и описание)?
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250199
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запускаю обычный поиск по датам, при этом когда возвращаются пустые значения, подставляю
Код: 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250250
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pl/sql код не поддерживается провайдером OLE-DB.
для выполнение таких пакетов вам придется обратиться к OO4O (см документацию оракла).
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250254
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для вызова готовых хранимых процедур или функций оракла используйте ADODB.Command с коллекцией параметров. примеры ищите на форуме или в мсдн.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35250258
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, спасибо, но там особо много по этому поводу не нашел.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256191
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение нашел, реализовал посредством конструкции:

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

Код: 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256351
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С возвращением, понятно.
А если мне нужно передать в процедуру 3 параметра, и ответ от Оракла соответственно мне не нужен. Как мне их правильно описать?
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256425
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аналогично:

Код: 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256463
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно ругается на литерал :)
Код: 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256515
Фотография 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

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

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

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

и не через текстбоксы а прям в коде!
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256548
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256550
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и провайдер нужен: Microsoft OLE DB Provider for Oracle
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256556
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256559
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полный код своего пакета с этой процедурой на оракле сюда выкладывайте, посмотрим на объявления.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256563
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
провайдер не тот!
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35256598
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneпровайдер не тот!

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

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


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