我有一个保存事件
Private Sub cmdsave_Click()
On Error GoTo ERR:
c_CON.db.BeginTrans'开始事务
for i=1 to 10
'插入入库记录的代码
( 略)
'在这里我有一个全局过程
Call UpdateYmjy(100,150)
next
c_CON.db.CommitTrans '提交事务
ERR:
c_CON.db.RollbackTrans
MsgBox "发生错误,调价不成功 " & Ssql & "", vbCriticalend subPublic Sub UpdateYmjy(sl As Double, je As Double)
Dim Wsl As ADODB.Parameter
Dim Wje As ADODB.Parameter
Dim Mycommand As New ADODB.Command
Mycommand.ActiveConnection = c_CON.db.Connect '对象的连接字符串和上面是一样的即也是 c_con的连接字符串
Set Wsl = New ADODB.Parameter
Wsl.Type = adDouble
Wsl.Value = sl
Mycommand.Parameters.Append Wsl
Set Wje = New ADODB.Parameter
Wje.Type = adDouble
Wje.Value = je
Mycommand.Parameters.Append Wje Mycommand.CommandText = "gxymjyb"‘存储过程
Mycommand.CommandType = adCmdStoredProc
Dim ree As New ADODB.Recordset
Set ree = Mycommand.Execute()
end sub我想请教的问题是:如果错误发生的滚回c_con对象倒是容易,但Mycommand
怎么滚回呢!(mycommand 是在过程内 是不是也可以定义成一个全局的对象叱!)
Private Sub cmdsave_Click()
On Error GoTo ERR:
c_CON.db.BeginTrans'开始事务
for i=1 to 10
'插入入库记录的代码
( 略)
'在这里我有一个全局过程
Call UpdateYmjy(100,150)
next
c_CON.db.CommitTrans '提交事务
ERR:
c_CON.db.RollbackTrans
MsgBox "发生错误,调价不成功 " & Ssql & "", vbCriticalend subPublic Sub UpdateYmjy(sl As Double, je As Double)
Dim Wsl As ADODB.Parameter
Dim Wje As ADODB.Parameter
Dim Mycommand As New ADODB.Command
Mycommand.ActiveConnection = c_CON.db.Connect '对象的连接字符串和上面是一样的即也是 c_con的连接字符串
Set Wsl = New ADODB.Parameter
Wsl.Type = adDouble
Wsl.Value = sl
Mycommand.Parameters.Append Wsl
Set Wje = New ADODB.Parameter
Wje.Type = adDouble
Wje.Value = je
Mycommand.Parameters.Append Wje Mycommand.CommandText = "gxymjyb"‘存储过程
Mycommand.CommandType = adCmdStoredProc
Dim ree As New ADODB.Recordset
Set ree = Mycommand.Execute()
end sub我想请教的问题是:如果错误发生的滚回c_con对象倒是容易,但Mycommand
怎么滚回呢!(mycommand 是在过程内 是不是也可以定义成一个全局的对象叱!)
在这里的操作使用传入的vCnn,这样就会都滚回了end sub
我的c_con 本身就是一个全局连接对象,所以不须要传呀!
再有在 滚回c_con 不见得会滚回 Mycommand.Execute()吧!Mycommand也有自己的
的事务处理耶,在线等!
function A
定义一个连接nCnn call B(byval nCnn)
end function
function B(byval vCnn as adodb.connection)
操作vCnn
end b
可能
Mycommand.ActiveConnection = vCnn 根本就不是同一个类型
Dim Wsl As ADODB.Parameter
Dim Wje As ADODB.Parameter
Dim Mycommand As New ADODB.CommandMycommand.ActiveConnection = vcnn'这样不行吗
Set Wsl = New ADODB.Parameter
Wsl.Type = adDouble
Wsl.Value = sl
Mycommand.Parameters.Append Wsl
Set Wje = New ADODB.Parameter
Wje.Type = adDouble
Wje.Value = je
Mycommand.Parameters.Append Wje Mycommand.CommandText = "gxymjyb"‘存储过程
Mycommand.CommandType = adCmdStoredProc
Dim ree As New ADODB.Recordset
Set ree = Mycommand.Execute()
end sub
改成Dim Mycommand As ADODB.Command
不传Vcnn时我的记录正常(如插入了一条新的记录,)但是用了之后我发现插入的新记录
的字符串fields 只取了最前一个字符串怪事!
改成Dim Mycommand As ADODB.Command这个地方我说错了,你还是用Dim Mycommand As New ADODB.Command
如果传对象的话就是如: s_hh(货号) 值为 x所有字符型字段都是这样数值型正常 我跟踪SQL 模板 看到的结果是:
exec gxymjyb N' ', N'N', 258, N'X', N'无', 1.000000000000000e+001, 1.670000000000000e+002应该是:
exec gxymjyb N' ', N'Nc', 258, N'Xy0020', N'无批号', 1.000000000000000e+001, 1.670000000000000e+002明白了吗前面那句明显只取了最前一位的字符串你说是不是和 mycommand.type 这个变量的类型
定义有关???
Ws_ph.Type = adBSTR
Ws_ph.Value = s_ph
Mycommand.Parameters.Append Ws_ph我讲错了, 是不是
Ws_ph.Type = adBSTR 这个个类型有问题呢!
今天真是不好意思明天晚上就要转到 db2 里去急死人呀再不行真只有把它们写到程序里了唉!
这是一个更新药品月未结余信息的存储过程!CREATE Procedure gxymjyb
@Month char(4),
@s_type char(10),
@dept int,
@HH CHAR(20),
@PH CHAR(50),
@n_sl float,
@n_je float
as
declare @sl_Filed char(20)
declare @je_Filed char(20)
declare @ssql char(1000)
declare @recordcount int
declare @s_yplx char(30)
declare @s_hh char(20)
declare @s_ph char(50) set @s_hh=''''+rtrim(convert(nvarchar,@hh))+''''
set @s_ph=''''+rtrim(convert(nvarchar,@ph))+'''' if left(@hh,2)='XY'
set @s_yplx='西药'
if left(@hh,2)='CY'
set @s_yplx='中成药'
if left(@hh,2)='ZY'
set @s_yplx='中草药' --set @month=MONTH(GETDATE())
set @sl_filed='n_'+rtrim(convert(varchar,@month))+rtrim(convert(varchar,@s_type))+'s'
set @je_filed='n_'+rtrim(convert(varchar,@month))+rtrim(convert(varchar,@s_type))+'je' select @recordcount =count(*) from yk_ymjy where rtrim(s_hh) =rtrim(@hh) and isnull(rtrim(s_ph),'')=convert(nvarchar,rtrim(@ph)) and n_year=convert(nvarchar,year(getdate())) and deptid=@dept
print @recordcount
if isnull(@recordcount,0)>0
begin
set @ssql=' update yk_ymjy set '+ convert(varchar,@sl_filed)+'=isnull('+convert(varchar,@sl_filed)+',0)+('+convert(varchar,@n_sl)+'),'+convert(varchar,@je_filed)+'= isnull('+convert(varchar,@je_filed)+',0)+('+convert(varchar,@n_je)+') where s_hh='+convert(varchar,@s_hh)+' and isnull(s_ph,'''')='+RTRIM(@s_ph)+' and n_year='+convert(varchar,year(getdate())) +' and deptid='+convert(varchar,@dept)
exec(@ssql)
print @ssql
end
if isnull(@recordcount,0)=0
begin
insert into yk_ymjy(deptid,s_hh,s_yplx,s_ph,n_year) values(@dept,@hh,@s_yplx,@ph,year(getdate()))
set @ssql=' update yk_ymjy set '+ convert(varchar,rtrim(@sl_filed))+'= isnull('+convert(varchar,rtrim(@sl_filed))+',0)+('+convert(varchar,rtrim(@n_sl))+'),'+convert(varchar,rtrim(@je_filed))+'= isnull('+isnull(convert(varchar,rtrim(@je_filed)),0)+',0)+('+convert(varchar,rtrim(@n_je))+') where id='+CONVERT(VARCHAR,SCOPE_IDENTITY())
exec(@ssql)
print @ssql
end
GO
Mycommand.ActiveConnection = c_CON.db.Connect 就一切OK 不过今天真是谢你了担误你工作!
wsl.size=20