Использование TSimpleDataset для нескольких целей - PullRequest
0 голосов
/ 24 сентября 2011

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 голосов
/ 24 сентября 2011

Не должно быть второго типа команды.

q.DataSet.CommandType := ctUpdate;
...