Button1按第一次存储过程可以正常运行,按第二次就出错了。procedure TForm1.Button1Click(Sender: TObject);
beginADOStoredProc1.Close;
ADOStoredProc1.Parameters.Refresh();ADOStoredProc1.Parameters.ParamByName('@date1').Value:=date1.DateTime;
ADOStoredProc1.Parameters.ParamByName('@date2').Value:=date2.DateTime;
ADOStoredProc1.Parameters.ParamByName('@strlenght').Value:=StrToInt(length.Text);
ADOStoredProc1.Parameters.ParamByName('@number').Value:=number.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangid').Value:=jiangid.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangxiang').Value:=jiangxiang.Text;
ADOStoredProc1.ExecProc;end;
__________________________________________________________
错误提示:
project project.exe raised exception class eaccessviolation with message 'access violation at address 0190a292 in module 'sqloledb.dll' . read of address 00000018' . process stopped . use step or run to continue .
谢谢~
beginADOStoredProc1.Close;
ADOStoredProc1.Parameters.Refresh();ADOStoredProc1.Parameters.ParamByName('@date1').Value:=date1.DateTime;
ADOStoredProc1.Parameters.ParamByName('@date2').Value:=date2.DateTime;
ADOStoredProc1.Parameters.ParamByName('@strlenght').Value:=StrToInt(length.Text);
ADOStoredProc1.Parameters.ParamByName('@number').Value:=number.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangid').Value:=jiangid.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangxiang').Value:=jiangxiang.Text;
ADOStoredProc1.ExecProc;end;
__________________________________________________________
错误提示:
project project.exe raised exception class eaccessviolation with message 'access violation at address 0190a292 in module 'sqloledb.dll' . read of address 00000018' . process stopped . use step or run to continue .
谢谢~
beginADOStoredProc1.Close;ADOStoredProc1.Parameters.ParamByName('@date1').Value:=date1.DateTime;
ADOStoredProc1.Parameters.ParamByName('@date2').Value:=date2.DateTime;
ADOStoredProc1.Parameters.ParamByName('@strlenght').Value:=StrToInt(length.Text);
ADOStoredProc1.Parameters.ParamByName('@number').Value:=number.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangid').Value:=jiangid.Text;
ADOStoredProc1.Parameters.ParamByName('@jiangxiang').Value:=jiangxiang.Text;
ADOStoredProc1.ExecProc;
end;
第二次就出错了,是不是你修改数据库后没有进行前台刷新后再次使用了些记录?
@date1 datetime
as Declare @lc_date1 char(8),@lc_date2 char(8)
-------------------------------------------------delphi调用procedure TForm1.Button1Click(Sender: TObject);
beginADOStoredProc1.Close;
ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParamByName('@date1').Value:=date1.DateTime;
ADOStoredProc1.ExecProc;
end;也是
Button1按第一次存储过程可以正常运行,按第二次就出错了。
@IdMap varchar(256),
@MaxSendId bigint OUTPUT
/* 功能:
在短信发送后,更新相应的数据库:
1.在tRandIdMap中记录分组信息
2.在把该短信记录从tSentLog_wait表转移到tSentLog_Sending表,并更新相关信息
参数:
@IdMap - 发送记录信息,格式:RandId1#n1*nBegin1,RandId2#n2@nBegin2,......
n1,n2是分组数量,Begin1,Begin2SendId的起点
@MaxSendId - tRandIdMap中Id的最大值,输出
返回:
如果成功返回 0,失败返回负数
*/
AS
DECLARE
@strIdMap varchar(256),
@Rid bigint,
@nPkg smallint,
@nBegin bigint,
@nPos int,
@nPos1 int,
@nPos2 int,
@i intset @strIdMap = @IdMap
set @MaxSendId = -1WHILE(LEN(@strIdMap) > 0)
BEGIN
/*先分解参数*/
set @nPos = CHARINDEX('#',@strIdMap,1)
set @nPos1 = CHARINDEX('*',@strIdMap,1)
set @nPos2 = CHARINDEX(',',@strIdMap,1) set @Rid = CONVERT(int,SUBSTRING(@strIdMap,1,@nPos-1))
set @nPkg = CONVERT(int,SUBSTRING(@strIdMap,@nPos+1,@nPos1-@nPos-1))
set @nBegin = CONVERT(smallint,SUBSTRING(@strIdMap,@nPos1+1,@nPos2-@nPos1-1)) set @strIdMap = STUFF(@strIdMap,1,@nPos2,NULL) --更新数据库
begin tran
-- 从 Wait表复制到Sending表
insert into tSentlog_sending select * from tSentLog_wait where RandId = @Rid
if @@error <> 0 OR @@rowcount =0
goto ERR
-- 更新SentTime,ItemCount字段
update tSentLog_sending set SentTime = GetDate(),ItemCount = @nPkg where RandId = @Rid
if @@error <> 0 OR @@rowcount =0
goto ERR
-- 删除Wait表中原记录
delete tSentLog_wait where RandId = @Rid
if @@error <> 0 OR @@rowcount =0
goto ERR
-- 建立RandId 与 SendId 映射关系
set @i = 0
while(@i < @nPkg)
begin
insert into tRandIdMap(SendId,RandId) values(@nBegin+@i,@Rid)
if @@error <> 0 OR @@rowcount =0
goto ERR
else
set @i = @i+1
end
commit tran print @Rid
print @nPkg
print @nBegin
END
-- 退出前取SendId 字段的最大值`
set @MaxSendId = @@identity
RETURN 0
ERR:
begin
rollback tran
-- 退出前取SendId 字段的最大值`
select @MaxSendId = max(SendId) from tRandIdMap
print @MaxSendId
return -1
end