Можно ли создать use TClientDataSet в невизуальном модуле или внутри объекта класса?
-
05-09-2019 - |
Вопрос
Возможно ли создать и использовать TClientDataSet внутри объекта во время выполнения?
Мне нравится вносить несколько изменений в свою таблицу и применять их все одновременно в виде кэша, и TClientDataSet позволяет мне это делать.Знайте, когда я захочу это сделать, я должен создать TForm.
Возможно ли это?
Обновить
Можно ли его использовать и как, без TDataSetProvider и без TSQLQuery ?Потому что я попробовал это, и это выдало мне сообщение об ошибке no Provider!!
Решение
Компоненты - это просто классы, и вы можете использовать их аналогичным образом:
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 такого требования быть не должно.
Другие советы
Вы можете создать TClientDataSet во время выполнения.(Смотрите ответ Вегара.) Что касается проблемы с поставщиком, решение состоит в том, чтобы определить поля для него, затем открыть dataset с помощью метода CreateDataSet (не Открытого метода!), и тогда это сработает.
Конечно, вы можете это сделать.Но вы также можете рассмотреть это с помощью модуля данных.Вы можете перетащить невидимые компоненты в datamodule и использовать инспектор объектов для установки значений.
Да, вы можете сделать, TClientDataSet не является визуальным компонентом и не предназначен для использования только внутри форм.
Вы можете создать модуль (.pas без .dfm), содержащий классы и методы, которые могут использовать TClientDataSet и возвращать его также в качестве параметров.