VA
Size: a a a
VA
DB
DB
DB
RS
RS
KB
RS
RS
procedure LoadFromJSON(AObject: TObject; const AFileName: String);
var
ADeStreamer: TJSONDeStreamer;
AJSON: TStringList;
begin
if not FileExists(AFileName) then
Exit;
ADeStreamer:=TJSONDeStreamer.Create(nil);
try
AJSON:=TStringList.Create;
try
AJSON.LoadFromFile(AFileName);
ADeStreamer.JSONToObject(AJSON.Text, AObject);
finally
AJSON.Free;
end;
finally
ADeStreamer.Free;
end;
end;
RS
procedure SaveToJSON(AObject: TObject; const AFileName: String);
var
AStreamer: TJSONStreamer;
AJSON: TStringList;
AJSONObject: TJSONObject;
begin
AStreamer:=TJSONStreamer.Create(nil);
AJSON:=TStringList.Create;
try
AJSONObject:=AStreamer.ObjectToJSON(AObject);
try
AJSON.Text:=AJSONObject.FormatJSON();
AJSON.SaveToFile(AFileName);
finally
AJSONObject.Free;
end;
finally
AJSON.Free;
AStreamer.Free;
end;
end;
RS
RS
ADeStreamer.JSONToObject(AJSONString, AObject);
из первого примера и AJSONString:=AJSONObject.FormatJSON();
из второгоRS
function TORM.SetNullTgUserID(aUserID: Int64): Boolean;
var
aUSR: TTB_USRObject;
aNulls: Boolean;
begin
aUSR:=TTB_USRObject.Create;
try
aUSR.USER_ID:=aUserID;
if not opTB_USR.Find(aUSR, 'USER_ID = :USER_ID') then
Exit(False);
aUSR.USER_ID:=0; // dNullInt64 = 0;
aNulls:=opTB_USR.Nulls; // So that some values are treated as Null
try
{ opTB_USR is TopTB_USR = specialize TdGDBEntityOpf<TTB_USRObject>; }
opTB_USR.Table.IgnoredFields.CommaText:='LOGIN_NAME,PASSWD,ENABLED,ID_EMP,USER_ROLE';
opTB_USR.Nulls:=True;
opTB_USR.Modify(aUSR);
finally
opTB_USR.Nulls:=aNulls;
opTB_USR.Table.IgnoredFields.CommaText:=EmptyStr;
end;
opTB_USR.Apply;
finally
aUSR.Free;
end;
Result:=True;
end;
Я присваиваю IgnoredFields
список для избежания функции 0=null, чтобы это работало только для нужного поля USER_ID
. Есть более красивый способ?AS
function TORM.SetNullTgUserID(aUserID: Int64): Boolean;
var
aUSR: TTB_USRObject;
aNulls: Boolean;
begin
aUSR:=TTB_USRObject.Create;
try
aUSR.USER_ID:=aUserID;
if not opTB_USR.Find(aUSR, 'USER_ID = :USER_ID') then
Exit(False);
aUSR.USER_ID:=0; // dNullInt64 = 0;
aNulls:=opTB_USR.Nulls; // So that some values are treated as Null
try
{ opTB_USR is TopTB_USR = specialize TdGDBEntityOpf<TTB_USRObject>; }
opTB_USR.Table.IgnoredFields.CommaText:='LOGIN_NAME,PASSWD,ENABLED,ID_EMP,USER_ROLE';
opTB_USR.Nulls:=True;
opTB_USR.Modify(aUSR);
finally
opTB_USR.Nulls:=aNulls;
opTB_USR.Table.IgnoredFields.CommaText:=EmptyStr;
end;
opTB_USR.Apply;
finally
aUSR.Free;
end;
Result:=True;
end;
Я присваиваю IgnoredFields
список для избежания функции 0=null, чтобы это работало только для нужного поля USER_ID
. Есть более красивый способ?RS
RS
function TORM.SetNullTgUserID(aUserID: Int64): Boolean;
var
aUSR: TTB_USRObject;
aNulls: Boolean;
begin
aUSR:=TTB_USRObject.Create;
try
aUSR.USER_ID:=aUserID;
if not opTB_USR.Find(aUSR, 'USER_ID = :USER_ID') then
Exit(False);
aUSR.USER_ID:=0; // dNullInt64 = 0;
aNulls:=opTB_USR.Nulls; // So that some values are treated as Null
try
{ opTB_USR is TopTB_USR = specialize TdGDBEntityOpf<TTB_USRObject>; }
opTB_USR.Table.IgnoredFields.CommaText:='LOGIN_NAME,PASSWD,ENABLED,ID_EMP,USER_ROLE';
opTB_USR.Nulls:=True;
opTB_USR.Modify(aUSR);
finally
opTB_USR.Nulls:=aNulls;
opTB_USR.Table.IgnoredFields.CommaText:=EmptyStr;
end;
opTB_USR.Apply;
finally
aUSR.Free;
end;
Result:=True;
end;
Я присваиваю IgnoredFields
список для избежания функции 0=null, чтобы это работало только для нужного поля USER_ID
. Есть более красивый способ?AS
RS
Nulls
наследников TdGOpf
некие значения (для разных типов по разному), то они предполагаются как null.const
dNullParam: string = 'null';
dNullStr: string = '';
dNullChar: Char = #0;
dNullInt: Integer = 0;
dNullInt64: Int64 = 0;
и т.д.Modify
, скажем для полей Int, если значение 0, то предполагается, что это null и т.д. Это если установлено свойство Nulls
. Свойство работает для всего объекта и всех его published свойств. Ну а мне захотелось это применить для одного конкретного поля, чтобы обнулить/очистить его типа. По другим полям, мне не нужно, чтобы вместо нулевых значений записывался бы nullRS
IgnoredFields
это стандартное свойство для всех наследников датасетов в dOPF. Если добавить в этот список какое-нибудь published свойство объекта Entity
, то оно будет игнорироваться при записи или чтении запросов в БД