Можно ли создать использование TClientDataSet в невизуальном блоке или внутри объекта класса? - PullRequest
1 голос
/ 20 февраля 2009

Можно ли создать и использовать TClientDataSet внутри объекта во время выполнения?

Мне нравится делать несколько изменений в моей Таблице, и все они применяются одновременно в кэше, и TClientDataSet позволяет мне это делать. Знать, когда я хочу сделать это, я должен построить TForm.

Возможно ли это?

UPDATE

Можно ли его использовать, и как, без TDataSetProvider и без TSQLQuery? Потому что я попробовал это, и это дало мне ошибку без провайдера !!

Ответы [ 4 ]

5 голосов
/ 20 февраля 2009

Компоненты - это просто классы, и вы можете использовать их также:

procedure TMyObject.DoSomeDBStuff;
var
  localClientDataset: TClientDataset;
begin
  localClientDataset := TClientDataset.Create( );
  try

  finally
    localClientDataset.Free;
  end;
end;

Вы также можете создать свойство clientdataset, если вам нравится:

type
  TMyObject = class
  private
    FClientDB: TClientDataset;
  published
    property Dataset: TClientDataset read FClientDB;
  end;

Для некоторых визуальных компонентов может потребоваться визуальный родительский элемент, но для TClientDataset такого требования быть не должно.

3 голосов
/ 21 февраля 2009

Вы можете создать TClientDataset во время выполнения. (См. Ответ Вегара.) Что касается проблемы с поставщиком, решение состоит в том, чтобы определить для нее поля, а затем открыть набор данных с помощью метода CreateDataset (а не метода Open!), И тогда он будет работать.

2 голосов
/ 20 февраля 2009

Конечно, вы можете сделать это. Но вы также можете рассмотреть использование модуля данных. Вы можете перетащить невидимые компоненты в модуль данных и использовать инспектор объектов для установки значений.

1 голос
/ 20 февраля 2009

Да, вы можете это сделать, TClientDataSet не является визуальным компонентом и не предназначен для использования только внутри форм.

Вы можете создать модуль (.pas без .dfm), который имеет классы и методы, которые могут использовать TClientDataSet, и возвращать его также в качестве параметров.

...