powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с обращением к ХП
17 сообщений из 17, страница 1 из 1
Помогите с обращением к ХП
    #32665474
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите с синтаксисом.
Необходимо передать ХП несколько параметров
Вот строка
Код: plaintext
1.
a = cnt.Execute("dbo.calc_curs N'" & Val_CR & "->" & Val_pay_contract & Chr( 34 ) & Summ_of_CR & Chr( 34 ) & Forms!vvodzayav.Date_time & Chr( 34 ) &  3  & Chr( 34 ) &  1  & "'").Fields( 0 )
,
что не так?
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32665489
guest1187
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое a?
и что не работает?
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32665498
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a- это Variant,
ошибка такая
"Procedure 'calc_curs' expects parameter '@Summ', which was not supplied."
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32665503
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adodb.Command - там явно указываются параметры, их тип и тип направления (input и т.п.)

Exec dbo.calc_curs " & Val_CR & ", " & Val_pay_contract & " и т.д.


Ясно написано: не передан параметр @Summ.

Извращение строить строчки по профайлеру:)
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32665512
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему тогда вот это работает
Код: plaintext
1.
a= cnt.Execute("dbo.MySP N'" & Forms!PassForm.PassForm_nam & "'").Fields( 0 )
+cnt-это Connection
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666134
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у меня не выходит, помогите пожалуйста разобраться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Set cnt = CurrentProject.Connection
cmd.ActiveConnection = cnt
cmd.CommandText = "calc"
cmd.CommandType = adCmdStoredProc
Set prm = cmd.CreateParameter("shem", adLongVarChar, adParamInput, , Val_CR & "->" & Val_pay_contract)
cmd.Parameters.Append prm  '<---------------здесь ошибка 

Set prm = cmd.CreateParameter("summ", adDecimal, adParamInput, , Summ_of_CR)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("Date_cur", adDBTime, adParamInput, , Forms!vvodzayav.Date_time)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("mode", adInteger, adParamInput, ,  3 )
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("Our_curs", adInteger, adParamInput, ,  1 )
cmd.Parameters.Append prm
a = cmd.Execute().Fields( 0 )
Ошибка такая
"Parameter object is improperly defined. Inconsistent or incomplete information was provided."
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666161
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОЙ, заработалонаписал так
Код: plaintext
1.
2.
Set prm = cmd.CreateParameter("shem", adLongVarChar, adParamInput,  100 , Val_CR & "->" & Val_pay_contract)
cmd.Parameters.Append prm 
И всё же, кто-нибудь приведите приблизительный код обращения к ХП с несколькими вх.параметрами через объект Connection
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666268
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim lngNewPLID as long

lngNewPLID=cnn.Execute("dbo.PL_NewIns_p @Doc_ID=" & IIf(cboDoc_ID > 200, 1, Nz(cboDoc_ID, 1)) & " ,@Dp_ID=" & cboDp_ID & " ,@dtData_prm='" & DateFormat(dtGetDateEnd()) & "'").Fields(0).Value

ALTER PROCEDURE dbo.PL_NewIns_p
(@Doc_ID tinyint,
@Dp_ID tinyint,
@dtData_prm smalldatetime)
AS
SET NOCOUNT ON

INSERT INTO PL_Plateg
(Doc_ID, DP_ID, Fir_ID, KtoIzm, Data, UP_ID_Izm, PS_ID_Plat, PS_ID_Pol)
SELECT @Doc_ID AS Expr1, @Dp_ID AS Expr2, 1 AS Expr3, User_Name, @dtData_prm AS Data, ID,
CASE @Doc_ID WHEN 4 THEN 4312 ELSE NULL END AS PS_ID_Plat, CASE @Doc_ID WHEN 21 THEN 4312 ELSE NULL END AS PS_ID_Pol
FROM UP_Current_v

SELECT @@IDENTITY

PS При преобразовании в строку,в случае нецелых чисел и даты, ты должен
позаботится о том чтобы параметры в строке получились в формате
который переварит сервер
DateFormat = Format(DateF, "yyyymmdd")

'Переделывает число в строку с раздетителем точка "."
DecPoint = Replace(Number, Mid(Format(1.1, "0.0"), 2, 1), ".")
'mid вырезает символ разделитель из строки формата от константы
'на случай если у клиента в настройках разделитель не ","
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666308
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, за подсказку.
Однако даты из Акса у меня сервак нормально переваривает
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666441
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Однако даты из Акса у меня сервак нормально переваривает
Это пока национальные настройки на серваке совпадают
с настройками на сервере.
Лучше сразу делай как положенно
(если конечно способен учится на чужих ошибках)
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666449
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>совпадают с настройками на сервере.
на клиенте
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666456
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикинь отработало два раза, а потом начало выдавать ошибку.
Почему не пойму.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim cmd As ADODB.Command
        Dim cnt As ADODB.Connection
        Dim prm As ADODB.Parameter
        Set cnt = New ADODB.Connection
        Set cmd = New ADODB.Command
Set cnt = CurrentProject.Connection
cmd.ActiveConnection = cnt
cmd.CommandText = "calc_f"
cmd.CommandType = adCmdStoredProc
Set prm = cmd.CreateParameter("shem", adLongVarChar, adParamInput,  100 , "rub->rub")  'Val_CR & "->" & Val_pay_contract) 
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("summ", adDecimal, adParamInput, ,  5 )  ' Summ_of_CR) 
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("Date_cur", adDBDate, adParamInput, , # 8 / 8 / 2004 #)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("mode", adInteger, adParamInput, ,  3 )
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("Our_curs", adDecimal, adParamInput, ,  1 )
cmd.Parameters.Append prm
a = cmd.Execute.Fields( 0 )
вот ХП
Код: 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.
ALTER proc dbo.calc_f
@Shem as nvarchar( 100 ), @Summ as float( 8 ), @Date_cur as datetime, @mode as int, @Our_curs as float( 8 )
AS
begin
declare @kurs_r as float( 8 ),@kurs_u as float( 8 ),@kurs_e as float( 8 ),@my_count as int,@my_date as smalldatetime
declare @calc as float( 8 )
select @my_count=count(*)
from Cuuren_K 
where Date_Curren=@Date_cur

if @my_count> 0 
begin
declare batch1 cursor 
for Select kurs_rub, kurs_euro
from Cuuren_K 
where Date_Curren=@Date_cur
open batch1

fetch next from batch1 into @kurs_r, @kurs_e
while @@fetch_status= 0 
begin 
fetch next from batch1 into @kurs_r, @kurs_e
end
close batch1
deallocate batch1
end

else

begin
declare batch2 cursor scroll
for Select date_curren,kurs_rub, kurs_usd,kurs_euro
from Cuuren_K 
open batch2

fetch next from batch2 into @my_date,@kurs_r,@kurs_u ,@kurs_e
if @my_date>@Date_cur
begin
fetch first from batch2 into @my_date,@kurs_r,@kurs_u ,@kurs_e
end
else
begin
fetch last from batch2 into @my_date,@kurs_r,@kurs_u ,@kurs_e
end
while @@fetch_status= 0 
begin 
fetch next from batch2 into @my_date,@kurs_r,@kurs_u, @kurs_e
end
close batch2
deallocate batch2
end

if @mode= 1 
begin
if @shem= 'USD->RUB' Or @Shem = 'RUB->USD' 
set @Calc = Round(@Kurs_R,  4 )
if @Shem =  'USD->EURO' Or @Shem = 'EURO->USD'  
  set @Calc = Round(@Kurs_E,  4 )
If @Shem =  'EURO->RUB' Or @Shem = 'RUB->EURO'  
  set      @Calc = Round((@Kurs_E * @Kurs_R),  4 )
If @Shem =  'EURO->EURO' Or @Shem = 'RUB->RUB' Or @Shem = 'USD->USD'  
       set @Calc =  1 
end
if @mode= 2 
begin
If @Shem =  'USD->RUB' Or @Shem = 'EURO->USD' Or @Shem = 'EURO->RUB'  
     set   @Calc = Round(@Summ * @Our_curs,  2 )
  If @Shem =  'USD->EURO' Or @Shem = 'RUB->USD' Or @Shem = 'RUB->EURO' 
  set  @Calc = Round(@Summ / @Our_curs,  2 )
  If @Shem =  'EURO->EURO' Or @Shem = 'RUB->RUB' Or @Shem = 'USD->USD'  
      set @Calc = Round(@Summ * @Our_curs,  2 )
    
end
if @mode= 3 
begin
If @Shem =  'USD->RUB'  
      set  @Calc = Round(@Summ * @Kurs_R,  2 )
    If @Shem =  'USD->EURO'  
       set @Calc= Round(@Summ / @Kurs_E,  2 )
    If @Shem =  'EURO->USD' 
       set @Calc = Round(@Summ * @Kurs_E,  2 )
    If @Shem =  'EURO->RUB' 
      set  @Calc = Round(@Summ * (@Kurs_E * @Kurs_R),  2 )
    If @Shem =  'RUB->USD'  
       set @Calc = Round(@Summ / @Kurs_R,  2 )
    If @Shem =  'RUB->EURO' 
        set @Calc = Round(@Summ / (@Kurs_E * @Kurs_R),  2 )
    If @Shem =  'EURO->EURO' Or @Shem = 'RUB->RUB' Or @Shem = 'USD->USD'  
        set @Calc = Round(@Summ,  2 )

end
---return @calc
end
select @calc as retcode 
Вот ошибка

---------------------------
Ошибка
---------------------------
Error=-2147467259; The precision is invalid.
---------------------------
OK
---------------------------

...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666523
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧТО, никто не знает?
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666581
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто вдумыватся в твои "простыни" лень
Запусти свою ХП в QA под отладчиком и локализуй ошибку в коде.
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666621
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, что проблема в программе вызова, а ХП в QA нормально(без ошибок) отрабатывает, поэтому и спросил.
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666642
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Function GetCounterRecID(aCNum As Long, aDate As Date) As Long
  With New ADODB.Command
    .CommandText = "dbo.p_CN_Date_To_CntID"
    .CommandType = adCmdStoredProc
    .ActiveConnection = CurrentProject.Connection
    .Parameters.Append .CreateParameter("@ControllerN", adInteger, adParamInput, , aCNum)
    .Parameters.Append .CreateParameter("@Date", adDate, adParamInput, , aDate)
    On Error Resume Next
    With .Execute
      If Err.Number <>  0  Then Utils.ErrMsg Err, "CounterRecExists"
      On Error GoTo  0 
      If Not .EOF Then
        GetCounterRecID = Nz(.Fields("ID"),  0 )
      End If
    End With
  End With
End Function
Если очень часто, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function EM_LastInputDate() As Variant
  On Error GoTo ErrExit
  Static cmd As New ADODB.Command
  If cmd.CommandText = "" Then
    With cmd
      .CommandText = "dbo.[M_p_LastDate]"
      .CommandType = adCmdStoredProc
      .ActiveConnection = CurrentProject.Connection
    End With
  End If
  With cmd.Execute
    If Not .EOF Then
      EM_LastInputDate = .Collect("Date")
    End If
  End With
  Exit Function
ErrExit:
    LogErrMsg Err, "EM_LastInputDate"
End Function
...
Рейтинг: 0 / 0
Помогите с обращением к ХП
    #32666817
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно не решает моей проблемы
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с обращением к ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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