Перейти к содержанию
Fire Monkey от А до Я
  • 0

Хранения набора данных


Dozent

Вопрос

Добрый день!

Прошу помощи.

Работая с VCL для набора данных использую TDataSet, какой аналог есть в FMX.

 

Поясню подробнее:

 

У меня есть сервер на PHP обращаясь к которому я получаю ответ в JSON

{"field_names":["ID","VNAME","VPASSWORD","RROLE","VDESCRIPTION","VNAMEE","USERROLE"],"data":[[1,"\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.","123",1,"\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f.","\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.","\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"]]}

Это только по первому пользователю. Их как понимаете мб больше! Хочу результат ответа PHP скрипта засунуть в структуру! В VCL  эту роль хорошо выполняет TDataSet, какой аналог в FMX?

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Да мне не компоненты нужны. Я вот раньше мог в датасете хранить данные полученые из базы через FireDac или ADO не важно. ХОчу положить отпарсеный результат в какуюто структуру типо датасета... 

Подойдёт ли сам датасет или же под FMX более удобная структура

Ссылка на комментарий
  • 0

Пытаюсь решить задачу, преобразования данных полученых в формете JSON в какую-то структуру для дальнейшей удобной обработки данных и отображения в элементах на форме...

Ссылка на комментарий
  • 0

Если структура JSON не меняется, то можно так:

TUserData = record
  ID : Integer;
  VNAME : String;
  VPASSWORD : String;
  ...
end;
TUserDataArray = TArray<TUserData>;

И написать функции добавления, удаления, поиска и еще чего надо, для массива это по паре строк кода на функцию. Можно это все в отдельный класс завернуть. Я обычно так поступаю для временного хранения и обработки данных разумных размеров. Быстро, удобно и не надо тащить в приложение мегабайты кода дополнительных компонентов. 

Ссылка на комментарий
  • 0

Действительно, немного странный вопрос. Подключите модуль DB и используйте TDataSet на здоровье. TClientDataSet тоже можно использовать. А можно TFDMemTable из FireDAC.

Ссылка на комментарий
  • 0

НАшёл для себя такой выход
 

{
"field_names": ["ID", "VNAME", "VPASSWORD", "RROLE", "VDESCRIPTION", "VNAMEE", "USERROLE"],
"data": [
[1, "\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.", "123", 1, "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f.", "\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.", "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"],
[2, "\u041f\u0435\u0442\u0440\u043e\u0432 \u041f.\u041f.", null, 2, null, "\u041f\u0435\u0442\u0440\u043e\u0432 \u041f.\u041f.", "\u0421\u0442\u0443\u0434\u0435\u043d\u0442"],
[4, "\u041b\u043e\u0433\u0438\u043d\u043e\u0432", "321", 2, "", "\u041b\u043e\u0433\u0438\u043d\u043e\u0432", "\u0421\u0442\u0443\u0434\u0435\u043d\u0442"],
[5, "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c", "123", 1, "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f.", "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c", "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"],
[3, "\u0421\u0438\u0434\u043e\u0440\u043e\u0432 \u0421.\u0421.", "321", 2, "", "\u0421\u0438\u0434\u043e\u0440\u043e\u0432 \u0421.\u0421.", "\u0421\u0442\u0443\u0434\u0435\u043d\u0442"],
[8, "\u0422\u0435\u0441\u04421", "123", 1, "\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u0440\u043e\u043b\u044c 123", "\u0422\u0435\u0441\u04421", "\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"]
]
}


 

function TAppData.JsonToDataSet(AJSON: string): TDataSet;
var
DataSet: TClientDataSet;
jsObject, jsItemObject: TJSONObject;
jsArr, jsArrData: TJSONArray;
jsValue: TJSONValue;
i, j: integer;
begin
jsObject := TJSONObject.ParseJSONValue(AJSON) as TJSONObject;
try
// поиск и добавление полей
jsArr := jsObject.GetValue('field_names') as TJSONArray;
if Assigned(jsArr) then
begin
DataSet := TClientDataSet.Create(nil);
DataSet.Close; // Очищаем перед началом работы
DataSet.FieldDefs.Clear; // Очищаем если что было в полях
for i := 0 to jsArr.Count - 1 do
begin
DataSet.FieldDefs.Add(jsArr.Items[i].Value, ftString, 50);
end;
DataSet.CreateDataSet;
end;
// добавление данных
jsArr := jsObject.GetValue('data') as TJSONArray;
if Assigned(jsArr) then
begin
for i := 0 to jsArr.Count - 1 do
begin
jsArrData := jsArr.Items[i] as TJSONArray;
DataSet.Append; // побавляем поля
for j := 0 to jsArrData.Count - 1 do
DataSet.Fields[j].Value := jsArrData.Items[j].Value;
DataSet.Post;
end;
end;
Result := DataSet;
except
on e: Exception do
begin
FreeAndNil(jsObject);
DataSet.Free;
raise;
end;
end;
end;
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...