我正在使用Delphi XE2构建一个DataSnap服务器,而且我很难找到插入客户端将我发送到数据库的JSON对象的最佳方法。
这是我收到的对象的格式:
{"PK":0,"FIELD1":"EXAMPLE","FIELD2":5, "DATE":""}
我找到的解决方案是以下代码
with qryDBMethods do
begin
SQL.Text := 'SELECT * FROM Table';
Open;
Append;
FieldByName('PK') .AsInteger := StrToInt(newId.ToString)
FieldByName('FIELD1').AsString := Object.Get('FIELD1').JsonValue.Value;
FieldByName('FIELD2').AsInteger := StrToInt(Object.Get('FIELD2').JsonValue.Value);
FieldByName('DATE') .AsDateTime:= Now;
Post;
之后,我会将我的查询组件制作成JSON对象并返回给我的客户端,但问题是,这将是一个具有密集表的大应用程序,所以每次我想做一个“SELECT *”插入一些东西并不理想。这样做的最佳方式是什么?
答案 0 :(得分:8)
请尝试使用INSERT语句。
with qryDBMethods do
begin
SQL.Text := 'INSERT INTO Table (PK, FIELD1, FIELD2) VALUES (:PK, :FIELD1, :FIELD2)';
ParamByName('PK') .Value:= StrToInt(newId.ToString)
ParamByName('FIELD1').Value := Object.Get('FIELD1').JsonValue.Value;
ParamByName('FIELD2').Value:= StrToInt(Object.Get('FIELD2').JsonValue.Value);
ExecSQL();
答案 1 :(得分:2)
如果打开Select * From Table
时数据量有什么问题,为什么不执行Select * From Table Where 1 <> 1
之类的操作?
通过这种方式,您可以在不加载任何结果的情况下插入。
其他选项会改为使用Insert脚本。