使用TSimpleDataset用于多种用途

时间:2011-09-23 20:22:47

标签: delphi delphi-2010

Delphi 2010

我正在尝试将TSimpleDataset用于多种用途。

var
 q: tsimpledataset;
 row: String;
 n: Integer;
begin
 q:=tsimpledataset.create(nil);
 q.connection:= SQLConnection1 ; 
 q.dataset.commandtype:=ctQuery ;
 q.dataset.commandtext:='select lastid from last_id where tablename=:ARow';
 q.Params.Assign(q.Dataset.Params);
 ShowMessage(q.dataset.commandtext);
 row:='accounts';
 q.params[0].asstring:=  row;
  q.open;
 if q.isempty then
  raise exception.create('No matching row found in LAST_ID table.');
 n:=q.fieldbyname('lastid').asinteger +1;
 q.close;
 q.dataset.commandtype:=ctQuery ;
 q.dataset.commandtext:='update last_id set lastid=22';
 q.execute;  //exception Here!
end;

我在q.Execute行上收到以下错误:

缺少数据提供者或数据包

似乎是关闭TSimpleDataset并重用它的问题。 如果我释放它并重新创建它并重新使用属性和新属性以将其用于执行,它将起作用。但是,我不想这样做。我希望能够关闭它,然后分配一个新的CommandText并重用它。

我已经研究并阅读了很多关于不使用有缺陷的TSimpleDataset的互联网评论,而是使用其他三个组件(ClientDataSet,DataSetProvider和SQLDataSet)。你会认为到2010年Embarcadero会解决TSimpleDataset的任何问题。

除了必须转向除TSimpleDataset以外的其他内容之外,还有其他解决方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

不应该是第二个命令类型。

q.DataSet.CommandType := ctUpdate;