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

Лидеры

Популярный контент

Показан контент с высокой репутацией 30.05.2014 во всех областях

  1. Не за что. Если что спрашивай. XML формат мне всегда был противен, хоть и понятен, но все равно внутренне я был против него и как следствие принципиально не использовал в своих программах. Но вот формат JSON мне очень понравился. Его легко написать от руки, легко читать, даже через регулярки парситься легко, если приспичило. И он не избыточен как XML, а значит по канала связи передается меньше трафика. Так что не бросай этот формат И кстати, что касается утечек. Я когда сам только начинал разбираться в формате JSON и с тем как работать с ним в Delphi, у меня тоже были утечки, ибо я использовал JSON для парсинга ответа с сервера, в потоке. Я тогда начал склоняться к всеобщему мнению что просто сама реализация работы с этим форматом в делфи кривая. Но поколебавшись все таки принял во внимание ту мысль, что разработчики Embacadero на девять жизней умнее меня, и вряд ли они выпустили модуль с таким явным глюком. И решил все таки углубиться дальше. Как оказалось просто поставить JS.Free в конце не достаточно. Т.е. вот так вот делать не стоит: var JS: TJSONObject; begin s := '{"jsonString":"ok"}; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; В процессе работы потока с ним может случиться все что угодно - обрыв связи, тайоут сработает, или некорректные данные, или еще что нибудь. И JS объект может не освободиться. Т.е. поток может уже и не существует, но в оперативке созданный объект лежит. К тому же при таком подходе могут быть и ошибки, например параметра 'jsonString' может и не быть, и все вывалиться в ошибку (но в потоке этого можно и не увидеть) и до JS.Free код никогда не дойдет. А значит будет опять утечка памяти. Так что правильней всего делать через Assigned: var JS: TJSONObject; begin s := '{"jsonString":"ok"}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; if Assigned(JS) then begin ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; end; Тогда утечек не будет. Это я теперь точно знаю!)))
    2 балла
  2. Решение найдено. Пусть, например, есть две таблицы tcredentials (паспортные данные) и tgender (пол). Первая содержит целочисленное поле gender, вторая - целочисленное AutoIncrement поле id и строковое gendername (наименование пола). Кидаем на форму комбобокс и связываем все в Livebindings Designer таким образом: Item.LookupData комбобокса с id из lookuptable (tgender); Item.Text комбобокса связываем с gendername той же таблицы (tgender); SelectedValue комбобокса связываем с полем gender из таблицы tcredentials. Запускаем и наслаждаемся.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...