用delphi6.0开发数据库程序,使用ado连接访问数据库(TADOQuery, TADOConnection)如果在sqlserver2000下开发,使用事务成功,用同样的程序连接sqlserver7.0则保错
该事务是先删除后插入,下面是程序的原码的例子
Begin Transactionwith AQuery do
begin
Close;
SQl.Clear;
SQL.Add('delete from table1 where ColID = 1'); //ColID主键
ExecSQL
//这段语句执行成功
SQL.Clear;
SQL.Add('insert into table1 (ColID, ColName,ColMemo) values (');
SQL.Add(':ColID, :ColName, :ColMemo)');
Parameters.ParamValues['ColID'] := 1;
Parameters.ParamValues['ColName'] := 'aa';
Parameters.ParamByName('ColMemo').LoadFromFile(FileName, ftBlob);
ExecSQl; //报错,提示主键重复
end; Commit transaction
为什么报错
该事务是先删除后插入,下面是程序的原码的例子
Begin Transactionwith AQuery do
begin
Close;
SQl.Clear;
SQL.Add('delete from table1 where ColID = 1'); //ColID主键
ExecSQL
//这段语句执行成功
SQL.Clear;
SQL.Add('insert into table1 (ColID, ColName,ColMemo) values (');
SQL.Add(':ColID, :ColName, :ColMemo)');
Parameters.ParamValues['ColID'] := 1;
Parameters.ParamValues['ColName'] := 'aa';
Parameters.ParamByName('ColMemo').LoadFromFile(FileName, ftBlob);
ExecSQl; //报错,提示主键重复
end; Commit transaction
为什么报错
解决方案 »
- VCLZIP应用问题。
- 用delphi解决“将单片机的命令在电脑上显示并控制”
- 求助!!!!为何这里提示[Error] Unit1.pas(100): Undeclared identifier: 'Params'呢?急!谢谢!
- 关于获取系统时间的问题!
- 那里有USB控件下载啊?
- 为什么不能将数据库中指定字段的值动态加入到combobox控件中!我在onshow中的代码入下:
- 初学者请求帮忙:TQuery组件中的数据库问题
- 为什么程序编译执行几次就开始出现insufficient memory的情况.....
- delphi2007如何安装aafont
- 数据转出Excel后,怎么从内存中释放Excel?
- D7中的UDPSocket怎么和D6中的UDP不一样啊??OnReceive事件怎么不能触发呢???
- 指针及Tlist问题?
试试
既然是主键相同的记录,为什么不用UPDATE?出现这种情况原因不祥,你可以用两个Query控件分别执行Delete和Insert看看还出不出错。
with AQuery do
begin
Close;
SQl.Clear;
SQL.Add('insert table1(ColID, ColName,ColMemo) values(1,'aa','file')');
ExecSQL;
end;
begin
Close;
SQl.Clear;
SQL.Add('delete from table1 where ColID = 1'); //ColID主键
ExecSQL
//这段语句执行成功
SQL.Clear;
SQL.Add('insert into table1 (ColID, ColName,ColMemo) values (');
SQL.Add(':ColID, :ColName, :ColMemo)');
Parameters.ParamValues['ColID'] := 1;
Parameters.ParamValues['ColName'] := 'aa';
//在sql7中应该如下使用
★Parameters.ParamByName('ColMemo')->SetBlobData(lpBuf,iBufSize);
ExecSQl; //报错,提示主键重复
end; Commit transaction
begin
Close;
SQl.Clear;
SQL.Add('delete from table1 where ColID = 1'); //ColID主键
ExecSQL
//这段语句执行成功
SQL.Clear;
SQL.Add('insert into table1 (ColID, ColName,ColMemo) values (');
SQL.Add(':ColID, :ColName, :ColMemo)');
Parameters.ParamValues['ColID'] := 1;
Parameters.ParamValues['ColName'] := 'aa';
//在sql7中应该如下使用
★Parameters.ParamByName('ColMemo').SetBlobData(lpBuf,iBufSize);
ExecSQl; //报错,提示主键重复
end; Commit transaction
with AQuery do
begin
Sql.Text :='select * from table1 where ColID =1';
open;
Edit;
FieldByName('ColName').AsString := 'aa';
if FimgFileName<>'' then
begin
ImgStream :=TMemoryStream.Create;
try
ImgStream.LoadFromFile(FileName);
TBlobField(FieldByName('ColMemo')).LoadFromStream(ImgStream);
finally
ImgStream.Free;
end;
end;
post;
Close;
end;