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


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