Delphi: использование TClientDataset как набор данных в оперативной памяти

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

21
задан Fabrizio 15 June 2018 в 08:55
поделиться

8 ответов

Во времени выполнения можно использовать table.CreateDataset или если это находится на поверхности для дизайна, можно щелкнуть правой кнопкой по CDS, и щелчок создают набор данных. Необходимо указать столбцы/типы для CDS, прежде чем можно будет сделать это все же.

22
ответ дан 29 November 2019 в 06:27
поделиться

Если это помогает далее, вот часть кода, где я создал ClientDataset, который используется в качестве таблицы в оперативной памяти:

procedure TfrmPRMain.ConfigureDataset;
begin
  With cdsMain do begin
    FieldDefs.Add('bDelete', ftBoolean);
    FieldDefs.Add('sSource', ftString, 10);
    FieldDefs.Add('iSection', ftInteger);
    FieldDefs.Add('iOrder', ftInteger);
    FieldDefs.Add('sBranch', ftString, 10);
    FieldDefs.Add('sPulseCode', ftString, 10);
    FieldDefs.Add('sCode', ftString, 10);
    FieldDefs.Add('dtWorkDate', ftDate);
    FieldDefs.Add('iWorkWeek', ftInteger);
    FieldDefs.Add('sName', ftString, 50);
    CreateDataSet;
    LogChanges := False;
    Open;
  end;
end;

можно просто заменить собственной информацией о данных и пойти. Jack

20
ответ дан 29 November 2019 в 06:27
поделиться

Можно использовать table.CreateDataSet

7
ответ дан 29 November 2019 в 06:27
поделиться

Не забывайте включать MIDAS.DLL в свою установку или просто включать MidasLib в пункт использования. Иначе использование TClientDataSet повысит ошибку на машине клиента. Возможно, это очевидно, но я на самом деле забыл это однажды.

8
ответ дан 29 November 2019 в 06:27
поделиться

Код от этой страницы не работает ни в КАКОЙ версии Delphi. Вызов к CreateDataSet уже помещает набор данных в активное ("открытое") состояние. Необходимо использовать.CreateDataSet ИЛИ.Open. Не оба.

Использование.Open, когда Вы хотите выбрать данные от Поставщика (через свойство ProviderName) и.CreateDataSet, когда Вы хотите заполнить Набор данных собой.

BTW: Для подробно ссылка о ClientDataSets и его функциях смотрит на превосходном статьи Cary Jensen о Сети разработчиков CodeGear (считайте самые старые, сначала)

6
ответ дан 29 November 2019 в 06:27
поделиться

по некоторым причинам это не работает для меня. Я выполняю CreateDataset во время разработки, но он все равно вылетает из приложения. Это все еще неизвестно для меня. Одно предупреждение. НЕ ДЕЛАЙТЕ ЭТОГО:

XXXClientDataSet.Close;
XXXClientDataSet.Open;

, потому что оно сообщит об ошибке. Вместо Откройте , используйте

xxxClientDataSet.CreateDataset;

. В моем приложении мне нужно было сбросить данные и загрузить их снова, и это снова вызвало сообщение об ошибке.

1
ответ дан 29 November 2019 в 06:27
поделиться

If you'd like a dependency-free, high quality, and feature rich (not to mention free!) in-memory dataset, I highly recommend kbmMemTable. Does everything TClientDataset does and then some.

3
ответ дан 29 November 2019 в 06:27
поделиться

Я предпочитаю управлять набором данных как XML. Вы можете использовать инструменты дизайнера, чтобы создать базовую структуру, а затем сохранить ее на диск. Это позволяет управлять им вне исполняемого файла, компилировать в качестве ресурса или отдельно управлять версиями.

Делая это таким образом, вы можете использовать LoadFromFile / Stream и варианты Save. Не забудьте правильно использовать LogChanges и MergeChangeLog в зависимости от вашего использования.

0
ответ дан 29 November 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: