Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Во времени выполнения можно использовать table.CreateDataset
или если это находится на поверхности для дизайна, можно щелкнуть правой кнопкой по CDS, и щелчок создают набор данных. Необходимо указать столбцы/типы для CDS, прежде чем можно будет сделать это все же.
Если это помогает далее, вот часть кода, где я создал 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
Не забывайте включать MIDAS.DLL в свою установку или просто включать MidasLib в пункт использования. Иначе использование TClientDataSet
повысит ошибку на машине клиента. Возможно, это очевидно, но я на самом деле забыл это однажды.
Код от этой страницы не работает ни в КАКОЙ версии Delphi. Вызов к CreateDataSet уже помещает набор данных в активное ("открытое") состояние. Необходимо использовать.CreateDataSet ИЛИ.Open. Не оба.
Использование.Open, когда Вы хотите выбрать данные от Поставщика (через свойство ProviderName) и.CreateDataSet, когда Вы хотите заполнить Набор данных собой.
BTW: Для подробно ссылка о ClientDataSets и его функциях смотрит на превосходном статьи Cary Jensen о Сети разработчиков CodeGear (считайте самые старые, сначала)
по некоторым причинам это не работает для меня. Я выполняю CreateDataset
во время разработки, но он все равно вылетает из приложения. Это все еще неизвестно для меня.
Одно предупреждение. НЕ ДЕЛАЙТЕ ЭТОГО:
XXXClientDataSet.Close;
XXXClientDataSet.Open;
, потому что оно сообщит об ошибке. Вместо Откройте
, используйте
xxxClientDataSet.CreateDataset;
. В моем приложении мне нужно было сбросить данные и загрузить их снова, и это снова вызвало сообщение об ошибке.
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.
Я предпочитаю управлять набором данных как XML. Вы можете использовать инструменты дизайнера, чтобы создать базовую структуру, а затем сохранить ее на диск. Это позволяет управлять им вне исполняемого файла, компилировать в качестве ресурса или отдельно управлять версиями.
Делая это таким образом, вы можете использовать LoadFromFile / Stream и варианты Save. Не забудьте правильно использовать LogChanges и MergeChangeLog в зависимости от вашего использования.