powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Sysdate Oracle передаю в VB, ошибка литерала?
60 сообщений из 60, показаны все 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
Sysdate Oracle передаю в VB, ошибка литерала?
    #35257659
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполнил данную конструкцию, ошибок не вышло, но и процедура не выполнилась. При просмотре cmd вместо переменных передаются почему-то "?", хотя переменные указываю.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258262
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где ? у вас вместо значений
выведите в табличку какую-ниубадь в оракле входящие параметры процедуры или через dbms_output и сразу все поймете.
ктстати, я так и не вижу код вашей процедуры с объявлением в пакете. что-то у вас не так с типами параметров похоже.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258403
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneгде ? у вас вместо значений
выведите в табличку какую-ниубадь в оракле входящие параметры процедуры или через dbms_output и сразу все поймете.
ктстати, я так и не вижу код вашей процедуры с объявлением в пакете. что-то у вас не так с типами параметров похоже.

Вообщем запустил все как вы указали с одной разницей, что внутри процедурки не удалось поэтому запустил след образом:
Код: plaintext
1.
2.
Private Sub Command2_Click()
RunProc Connection1
end sub

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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
[color=yellow] 140  cmd.CommandText = "procedure"[/color]
 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

т.е. пытается передавать следующую строку
Код: plaintext
Call procedure(?,?,?)
и такое ощущение что он до оракла даже не достукивается, и просто ничего не происходит, никаких ошибок не выходит....
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258506
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вы это установили?
синтаксис абсолютно правильный.

проверьте коллекцию ошибок в соединении после cmd.Execute:
Код: plaintext
Debug.Print Connection1.Errors.Count

если есть ошибки, то посмотрите какие:
Код: plaintext
Debug.Print Connection1.Errors( 0 ).Description

и еще, я вам советовал указывать схему перед процедурой:
Код: plaintext
cmd.CommandText = "MYSCHEMA.PROCEDURE"

запустите профайлер в оракле (не помню как он называется), чтобы проверить , что приходит на сервер в момент вызова.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258573
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая ошибка выскакивает:
Код: plaintext
ORA- 06512 : на  line  1 

Да конечно использую схему:
Код: plaintext
billdba.myprocedure
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258687
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те же грабли :( (ошибка литерала)
Пока схема от oo4o лучшая, без глюков пашет. Единственный минус, конечно, менять всю схему во всем коде и вид запросов, придется глобально, на что убью немало времени....
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258718
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да кстати в процедурке это дело ругается на следующую строку с литералами " ' ' ":

Код: plaintext
1.
2.
3.
4.
procedure recalc_number
....................
    if i.date_to is null then date_sys:=to_date(sysdate,'dd.mm.yyyy'); end if;
....................
end;
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258891
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит вы неверный параметр передаете!
а именно в EMPNO
если у вас он содержит знаки ' то их надо удваивать, чтобы все работало
т.е. вместо ' надо делать '' (два апострофа)
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35258999
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneзначит вы неверный параметр передаете!
а именно в EMPNO
если у вас он содержит знаки ' то их надо удваивать, чтобы все работало
т.е. вместо ' надо делать '' (два апострофа)
Да как только я их не передавал, не хочет он исполнять этот код и все, хоть треснись. Ну ничего покопаюсь разберусь. В оракле я решил эту проблему посредством динамического SQL (т.е. весь запрос в динамику и никаких глюков с VB). В VB пока удалось решить это с помощью оо4о.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259018
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может все-таки покажите код своей супер секретной процедуры на оракле. тогда все яснее и станет.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259044
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
procedure recalc_number
 (
 stelnumber varchar,
 smonth number,
 syear number)
 as
 ncost number;
 sstartsaldo number;
 sendsaldo number;
 ppaid number;
 ftelrn number;
 endmonth number;
 endyear number;
 gen_rn number;
 date_sys date;
 ttable varchar( 14 );

 begin

 if smonth =  1  then
 endyear:=syear- 1 ;
 endmonth:=  12 ;
 else
 endmonth:=smonth- 1 ;
 endyear:=syear;
 end if;

 ttable:='table'||syear||lpad(to_char(smonth),2,'0');

 if length(stelnumber)= 7  then
    for i in (select s.telnumber, s.date_from, s.date_to, s.rn, s.pa_id 
                from subscr_num s where s.telnumber=stelnumber) loop 

    if i.date_to is null then date_sys:=to_date(sysdate,'dd.mm.yyyy'); end if;

   begin
    Execute immediate 'select nvl(sum(c.cost),0) from '||ttable||' c where c.telfrom='''||i.telnumber||''' 
     and to_date(c.starttime, ''dd.mm.yyyy'') >= to_date('''||i.date_from||''',''dd.mm.yyyy'') 
     and (to_date(c.starttime, ''dd.mm.yyyy'') <= to_date('''||i.date_to||''',''dd.mm.yyyy'')
      or to_date(c.starttime, ''dd.mm.yyyy'') <= to_date('''||date_sys||''',''dd.mm.yyyy''))' 
     into ncost;
        exception when others then
          ncost:= 0 ;
    end;

    begin
    select nvl(sum(p.nsum), 0 ) into ppaid from payments_num p 
    where p.num_rn=i.rn and p.nmonth=smonth and p.nyear=syear;
        exception when others then
          ppaid:= 0 ;
    end;

    if ppaid is null then  ppaid:= 0 ; end if;


    begin
       select a.num_rn into ftelrn from accounts_num a
                      where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
       exception when others then
               if ncost is null then ncost:= 0 ; end if;
               if ppaid is null then ppaid:= 0 ; end if;
               if sendsaldo is null then sendsaldo:= 0 ; end if;
                 begin
                 select max(a.rn) into gen_rn from accounts_num a;
                 exception when others then gen_rn:= 0 ;
                 end;
                 gen_rn:=gen_rn+ 1 ;
                 if gen_rn is null then gen_rn:= 1 ; end if;
        insert into accounts_num a values (gen_rn, i.rn, i.pa_id, smonth
                                           , syear, sendsaldo, ncost, ppaid
                                           , sendsaldo+ncost- 0 , '1'
                                           , i.date_from, i.date_to);
    end;

    update accounts_num a set a.pa_id=ppaid
                  where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
                  
    begin
      select nvl(a.endsaldo, 0 ) into sendsaldo from accounts_num a
      where a.nmonth=endmonth and a.nyear=endyear and a.num_rn=i.rn;
    exception when others then sendsaldo:= 0 ;
    end;

    begin
       select nvl(a.startsaldo, 0 ) into sstartsaldo from accounts_num a
              where a.nmonth=smonth and a.nyear=syear and a.num_rn=i.rn;
    exception when others then sstartsaldo:= 0 ;
    end;

    update accounts_num a set a.startsaldo=sendsaldo where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
    if ncost is null then ncost:= 0 ; end if;
    update accounts_num a set a.accrued=ncost where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;

    begin
      if ncost is null then ncost:= 0 ; end if;
      if ppaid is null then ppaid:= 0 ; end if;
      select nvl(a.endsaldo, 0 ) into sstartsaldo from accounts_num a where a.nmonth=endmonth and a.nyear=endyear and a.num_rn=i.rn;
      sendsaldo:=sstartsaldo+ncost-ppaid;
       exception when others
      then sendsaldo:= 0 ;
    end;

    update accounts_num a set a.endsaldo=(sstartsaldo+ncost-ppaid)
                     where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;

   end loop;                   

 end if;

 if stelnumber = '000' then
      for i in (select s.telnumber, s.date_from, s.date_to, s.rn, s.pa_id 
                from billdba.subscr_num s) loop

     if i.date_to is null then date_sys:=to_date(sysdate,'dd.mm.yyyy'); end if;

    begin
      Execute immediate 'select sum(c.cost) from '||ttable||' c  
        where c.telfrom ='''||i.telnumber||''' 
        and to_date(c.starttime, ''dd.mm.yyyy'') >= to_date('''||i.date_from||''',''dd.mm.yyyy'') 
        and (to_date(c.starttime, ''dd.mm.yyyy'') <= to_date('''||i.date_to||''',''dd.mm.yyyy'')
        or to_date(c.starttime, ''dd.mm.yyyy'') <= to_date('''||date_sys||''',''dd.mm.yyyy''))' 
        into ncost;
        exception when others then
        ncost:= 0 ;
    end;

    begin
    select sum(p.nsum) into ppaid from payments_num p 
    where p.num_rn=i.rn and p.nmonth=smonth and p.nyear=syear;
        exception when others then
          ppaid:= 0 ;
    end;

    if ppaid is null then  ppaid:= 0 ; end if;

    begin
       select a.num_rn into ftelrn from accounts_num a
                      where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
       exception when others then
               if ncost is null then ncost:= 0 ; end if;
               if ppaid is null then ppaid:= 0 ; end if;
               if sendsaldo is null then sendsaldo:= 0 ; end if;
                 begin
                 select max(a.rn) into gen_rn from accounts_num a;
                 exception when others then gen_rn:= 0 ;
                 end;
                 gen_rn:=gen_rn+ 1 ;
                 if gen_rn is null then gen_rn:= 1 ; end if;
        insert into accounts_num a values (gen_rn, i.rn, i.pa_id, smonth
                                           , syear, sendsaldo, ncost, ppaid
                                           , sendsaldo+ncost- 0 , '1'
                                           , i.date_from, i.date_to);
    end;

    update accounts_num a set a.pa_id=ppaid
                  where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
                  
    begin
      select a.endsaldo into sendsaldo from accounts_num a
      where a.nmonth=endmonth and a.nyear=endyear and a.num_rn=i.rn;
    exception when others then sendsaldo:= 0 ;
    end;

    begin
       select a.startsaldo into sstartsaldo from accounts_num a
              where a.nmonth=smonth and a.nyear=syear and a.num_rn=i.rn;
    exception when others then sstartsaldo:= 0 ;
    end;

    update accounts_num a set a.startsaldo=sendsaldo where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;
    if ncost is null then ncost:= 0 ; end if;
    update accounts_num a set a.accrued=ncost where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;

    begin
      if ncost is null then ncost:= 0 ; end if;
      if ppaid is null then ppaid:= 0 ; end if;
      select a.endsaldo into sstartsaldo from accounts_num a where a.nmonth=endmonth and a.nyear=endyear and a.num_rn=i.rn;
      sendsaldo:=sstartsaldo+ncost-ppaid;
       exception when others
      then sendsaldo:= 0 ;
    end;

    update accounts_num a set a.endsaldo=(sstartsaldo+ncost-ppaid)
                     where a.num_rn=i.rn and a.nmonth=smonth and a.nyear=syear;

    end loop;
   
 end if;

end;
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259052
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все понятно.

Код: plaintext
stelnumber varchar,

меняйте на

Код: plaintext
stelnumber varchar2( 100 ),

и переписывайте свои запросы соответственно данного формата.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259059
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для работы со строками оракла из VB всегда используйте varchar2 тип в своих таблицах и процедурах . varchar - это старый формат 7 оракла и ниже и плохо поддерживается.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259081
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно....
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259101
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда описание параметра в процедурке измените, то измените и определение параметра при вызове:

Код: plaintext
1.
2.
3.
4.
5.
Dim stelnumber as String

stelnumber="000"
...
p.Append cmd.CreateParameter("stelnumber", adVarChar, adParamInput,  100 , stelnumber)
...
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259139
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без разницы все поменял на Varchar2(100), та же трабла.
Спотыкается на строке с ' '
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259155
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой параметр stelnumber передаете?
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259168
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stelnumber=1000000
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259172
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Varchar2(7)
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259190
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub RunProc(Conn As ADODB.Connection)
Dim STELNUMBER As String
Dim cmd As ADODB.command
Dim p As ADODB.Parameters
On Error GoTo err_debug
stelnumber= 1000000 

 100  Set cmd = New ADODB.command
 110  Set cmd.ActiveConnection = Conn
 120  cmd.CommandTimeout =  1 
 130  cmd.CommandType = adCmdStoredProc
 140  cmd.CommandText = "billdba.recalc_number"
 150  Set p = cmd.Parameters
'160 p.Append cmd.CreateParameter("RET", adInteger, adParamReturnValue)
 170  p.Append cmd.CreateParameter("STELNUMBER", adVarChar, adParamInput,  7 , STELNUMBER)
 180  p.Append cmd.CreateParameter("SMONTH", adNumeric, adParamInput, ,  1 )
 190  p.Append cmd.CreateParameter("SYEAR", adNumeric, adParamInput, ,  2008 )
 200  cmd.Execute
Debug.Print Connection1.Errors.Count
Debug.Print Connection1.Errors( 0 ).Description
Exit Sub
err_debug:
Debug.Print Erl & ":" & Err.Number & " " & Err.Description
End Sub
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259216
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
параметр в процедуре сделай размером varchar2(10)
и вызывай так:

Код: 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.
25.
26.
27.
28.
29.
30.
31.
RunProc conn, "1000000",  1 ,  2008 


Sub RunProc(Conn as ADODB.Connection,ByVal stelnumber as String, byval smonth as Integer, Byval syear as Integer)

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 = "billdba.recalc_number"

 150  Set p = CMD.Parameters

 170  p.Append cmd.CreateParameter("stelnumber", adVarChar, adParamInput,  10 , stelnumber)
 180  p.Append cmd.CreateParameter("smonth", adNumeric, adParamInput, , smonth)
 190  p.Append cmd.CreateParameter("syear", adNumeric, adParamInput, , syear)
 200  cmd.Execute

lb_out:
Set cmd=Nothing
Set p=Nothing
exit Sub

err_debug:
Debug.Print Erl & ":" & Err.Number & " " & Err.Description
Resume lb_out
End Sub
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259230
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, а какой тип у поля telnumber в табличке subscr_num ?
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259323
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
varchar2(7)
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259342
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю , что следует упростить процедуру и последовательно ее усложнять по мере выполнения
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259357
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RunProc Connection1, "1000000", 1, 2008

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub RunProc(Conn As ADODB.Connection, ByVal stelnumber As String, ByVal smonth As Integer, ByVal syear As Integer)
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 =  1 
 130  cmd.CommandType = adCmdStoredProc
 140  cmd.CommandText = "billdba.recalc_number"
 150  Set p = cmd.Parameters
'160 p.Append cmd.CreateParameter("RET", adInteger, adParamReturnValue)
 170  p.Append cmd.CreateParameter("STELNUMBER", adVarChar, adParamInput,  7 , stelnumber)
 180  p.Append cmd.CreateParameter("SMONTH", adNumeric, adParamInput, , smonth)
 190  p.Append cmd.CreateParameter("SYEAR", adNumeric, adParamInput, , syear)
 200  cmd.Execute
Debug.Print Connection1.Errors.Count
Debug.Print Connection1.Errors( 0 ).Description
Exit Sub
err_debug:
Debug.Print Erl & ":" & Err.Number & " " & Err.Description
End Sub

Код: plaintext
ORA- 06512 : на  line  1 
Никак :) Уже становится весело :)
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259368
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneдумаю , что следует упростить процедуру и последовательно ее усложнять по мере выполнения

неважно, если я использую в простой процедуре:

Код: plaintext
to_date(sysdate,'''dd.mm.yyyy''')

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE PACKAGE      CUST AS
  FUNCTION TESTPROC(STELNUMBER varchar2( 10 ))
  return varchar2;
end CUST;
/

CREATE OR REPLACE package body   CUST AS
  FUNCTION TESTPROC(STELNUMBER varchar2( 10 ))
  		   return varchar2 is
  v varchar2( 255 );
  begin
  	v :='';
	select 'OK' into v from sys.dual;
    return v;
  end TESTPROC;
end;
/
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259379
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо так

Код: plaintext
to_date(sysdate,''''dd.mm.yyyy'''')
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259432
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneнадо так

Код: plaintext
to_date(sysdate,''''dd.mm.yyyy'''')


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE PACKAGE      CUST AS
  FUNCTION TESTPROC(STELNUMBER varchar2( 10 ))
  return varchar2;
end CUST;
/

CREATE OR REPLACE package body   CUST AS
  FUNCTION TESTPROC(STELNUMBER varchar2( 10 ))
  		   return varchar2 is
  v varchar2( 255 );
  begin
  	v :='';
	select 'OK' into v from sys.dual;
    return v;
  end TESTPROC;
end;
/

Такой вариант работает и в обычной отправке Begin в sqltext... Чем я везде и пользовался, все работает идеально и быстро.
Вся трабла в дате, как я уже указал вначале, он почему-то в упор не запускает это дело.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259489
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Konst_One , что помогаете. Я действительно немало для себя тута нашел :)
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35259593
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подправьте тестовую процедурку как вы используете дату и покажите ее здесь.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35260602
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub RunProc1(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 =  1 
 130  cmd.CommandType = adCmdStoredProc
 140  cmd.CommandText = "billdba.cust.testproc"
 150  Set p = cmd.Parameters
 170  p.Append cmd.CreateParameter("STELNUMBER", adVarChar, adParamInput,  10 ,  1 )
 180  p.Append cmd.CreateParameter("nnumber", adNumeric, adParamInput, ,  1 )
 200  cmd.Execute
Debug.Print Connection1.Errors.Count
Debug.Print Connection1.Errors( 0 ).Description
Exit Sub
err_debug:
Debug.Print Erl & ":" & Err.Number & " " & Err.Description
End Sub

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE OR REPLACE PACKAGE CUST AS
  procedure TESTPROC
  (
  STELNUMBER varchar2,
  nnumber number);

end CUST;
/

create or replace package body CUST AS
  procedure TESTPROC(
  STELNUMBER varchar2,
  nnumber number
  )
 as
 v varchar2( 255 );
 date_sys date;
  begin
    if nnumber= 1  then date_sys:=to_date(sysdate,'dd.mm.yyyy'); end if;
  end TESTPROC;
end;
Вот в точности удалось повторить, эту ошибку.
Если убираю nnumber работает норм, добавляю его и пытаюсь обработать выскакивает ошибка.
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35261399
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
number - это тип с плавающей точкой, так сравнивать некорректно
может вам достаточно целочисленных типов, например int?
...
Рейтинг: 0 / 0
Sysdate Oracle передаю в VB, ошибка литерала?
    #35262201
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ораклом я могу обходить эту проблему, по крайней в этом случае, но сам процесс весьма занимателен. Это всего лишь простейшая моя процедурка, которая не является ключевой. Все гораздо сложнее, с более навороченными пакетниками, которые в комплексе завязаны с множеством функций и процедур, где в огромных количествах встречается тип number, и смысла не вижу менять подход Оракла под VB :)
Проще перелопатить VB, под оо4о :)
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Sysdate Oracle передаю в VB, ошибка литерала?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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