大侠,救命!!调用存储过程
存储过程中定义了一个Smalldatetime的参数,在VB中调用此存储过程,怎样设置
该参数的属性。盼各位帮忙
问题点数:30、回复次数:21Top
1 楼hhbll_2001(浪人情歌)回复于 2001-11-28 12:30:21 得分 0
请各位帮帮忙啊!!!!Top
2 楼hhbll_2001(浪人情歌)回复于 2001-11-28 12:38:53 得分 0
帮忙啊!!!Top
3 楼yuminggang(独行侠)回复于 2001-11-28 12:45:00 得分 0
用ADO执行存储过程可以直接带参数。Top
4 楼kxcc_sx(开心虫虫)回复于 2001-11-28 13:14:52 得分 0
呵呵!具体说明你的存储过程的参数定义才对呀!
这样我就可以告诉你呀Top
5 楼hhbll_2001(浪人情歌)回复于 2001-11-28 13:32:28 得分 0
比如,存储过程如下
CREATE PROCEDURE a
@code varchar(20),
@Wdate smalldate
as
insert into Stocks(code,wdate)
values(@code,@wdate)
在vb中
Dim a As New ADODB.Parameter
Dim b As New ADODB.Parameter
Dim cmd1 As New ADODB.Command
cmd1.ActiveConnection = cn
cmd1.CommandType = adCmdStoredProc
cmd1.CommandText = "stock_a"
a.Type = adVarChar
a.Size = 10
cmd1.Parameters.Append a
b.Type = adDate ?????
cmd1.Parameters.Append b
a.Value = "aaa"
b.Value = Date
cmd1.Execute
执行时总是出错,为什么??Top
6 楼kxcc_sx(开心虫虫)回复于 2001-11-28 13:33:44 得分 0
呵呵!只要使用相应的语句;
例如:
将id做为一个参数;进行搜索期间调用的存储过程为search_name
并返回ques_teacher字段的值的代码:
set comm=server.createobject("adodb.command")
comm.activeconnection="dsn=test;uid=sa;pwd=;"
comm.commandtext="search_name"
comm.commandtype=4
//传送参数id
set p1=comm.createparameter("in",129,1,10,id)
comm.parameters.append p1
//输出结果
set p1=comm.createparameter("out",129,2,128,0)
comm.parameters.append p1
comm.execute
ques_teacher=comm(1)
set comm=nothing
下面是
search_name的 存储过程的定义,环境win2000/sql2000/vb6.0
CREATE PROCEDURE search_id
@title char(100),
@outname int output
AS
select @outname=ques_id from reading where title=@title
GO
希望对你有所帮助,呵呵:-)
Top
7 楼kxcc_sx(开心虫虫)回复于 2001-11-28 13:37:42 得分 0
你的sql语句验证了吗Top
8 楼kxcc_sx(开心虫虫)回复于 2001-11-28 13:39:17 得分 0
你的数据类型,比如smalltime对应吗Top
9 楼hhbll_2001(浪人情歌)回复于 2001-11-28 13:46:25 得分 0
我还没有验证,正在看command.CreateParameter函数。
不管怎样,先谢谢你了!!!Top
10 楼renxuangigi(企企)回复于 2001-11-28 13:51:20 得分 0
我也同意kxcc_sx的说法。Top
11 楼hhbll_2001(浪人情歌)回复于 2001-11-28 13:56:51 得分 0
不过我弄不清的是SQL中的Smalldatetime对应VB中的类型,是不是Addate?Top
12 楼kxcc_sx(开心虫虫)回复于 2001-11-28 14:03:30 得分 0
呵呵!
我觉得你应该验证以下你的sql语句,其他应该不成问题,特别是类型要对应,特别有关时间,日期的字段最容易出问题Top
13 楼kxcc_sx(开心虫虫)回复于 2001-11-28 14:08:44 得分 0
有问题直接email:gaojun512@sina.comTop
14 楼hhbll_2001(浪人情歌)回复于 2001-11-28 14:11:49 得分 0
存储过程里的参数类型为Smalldatetime,VB中我把参数的Type设为Addate,Addbdate都不行
急死我了Top
15 楼hhbll_2001(浪人情歌)回复于 2001-11-28 14:47:42 得分 0
小弟我这个问题还没解决,还请各位继续帮忙!Top
16 楼csdncb(iter)回复于 2001-11-28 22:19:36 得分 0
'''定义不需要传入参数,只有一个传出参数的过程
Public Function Execute_PLSQL_NoInput(ByVal strProName As String) As Boolean
On Error GoTo ErrHandle:
Dim strErr As String
If strProName = "" Then
Exit Function
End If
With CObj
.ActiveConnection = Con
.CommandType = adCmdStoredProc
.CommandText = strProName ' "stock_package.update_check_input"
End With
With CObj.Parameters
'.Append CObj.CreateParameter("p1", adVariant, adParamInput, 12)
.Append CObj.CreateParameter("p2", adChar, adParamOutput, 12)
End With
'CObj.Parameters(0) = strKey
Set Recrs = CObj.Execute()
strErr = UCase(Trim(CObj.Parameters.Item("p2")))
'CObj.Parameters.Delete (1)
CObj.Parameters.Delete (0)
If strErr = "OK" Then
Execute_PLSQL_NoInput = True
Else
Execute_PLSQL_NoInput = False
End If
Exit Function
ErrHandle:
Execute_PLSQL_NoInput = False
End Function
上面是一具调用oracle存储过程的方法。Top
17 楼kxcc_sx(开心虫虫)回复于 2001-11-29 13:38:18 得分 30
hhbll_2001
呵呵,既然是添加和更新记录,你的/*入库时间*/workdate获得是输入还是从系统获得,若使用系统获得,
就不会出问题,若是进行录入的话,肯定要进行日期时间转换的,否则类型不一样,当然会出错,现在的
错误很明显是传递的参数的类型不对导致实时错误:
‘-2147217887(80040e21)’
[mircrosoft][odbc sql server driver]没有执行可选特性
假如你是字符串的话“2001-11-27 00:00:00”可以将它转换一下成smalltime的类型就可以了,所以不必
强调vb中它的类型,
smalldatetime 数据类型存储日期和每天的时间,但精确度低于 datetime。
SQL Server 将 smalldatetime 的值存储为两个 2 字节的整数。
第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后的分钟数。
日期范围从1900 年 1 月 1 日到 2079 年 6 月 6 日,精确到分钟。
如果你觉得麻烦的话,我这里有一个办法,那就是将workdate的类型该成长整形来记录日期
如果精度要求不高,直接使用8位数字来表示日期,例如:2001-01-01可表示为20010101
如果需要精确到时间 23:15:11则231511,你可以设两个字段,workdate 和worktime
也可以采用14位数字表示日期时间,这样不会出错,而且日期的加减都比较方便!
我这里有几个我写的函数你可以看看:具体在你的邮件里!
Top
18 楼hhbll_2001(浪人情歌)回复于 2001-11-29 13:57:25 得分 0
kxcc_sx(开心虫虫)
十分感谢!!! 这个问题困了我两天了,听了你的介绍,我终于明白了,十分感谢!
能否告诉我你的QQ,方便小弟碰到问题再找你解决。小弟的QQ是:55202734。Top
19 楼kxcc_sx(开心虫虫)回复于 2001-11-29 15:56:20 得分 0
呵呵 好啊,又多了一个朋友!希望多多交流!互相长进!QQ:30092225Top
20 楼command_zhang(Session)回复于 2001-12-01 11:45:53 得分 0
找书
Top
21 楼chickenzzz(打呼噜的小鸡)回复于 2001-12-02 00:17:53 得分 0
Dim Conn as ADODB.Connection
............
.........
theSQL="Exec Storeprocedure '" & smalldatetime & "'"
Set Rs=Conn.Execute(theSQL)
生成SQL语句比较好吧,方便用SQL Server Query Analyzer调试,我一直都是这样做的:)Top




