2

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*」を実行することです。理想的ではありません。これを行うための最良の方法は何ですか?

4

2 に答える 2

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();
于 2012-02-09T14:44:55.193 に答える
2

を開いたときのデータ量が問題である場合は、次のSelect * From TableようなことをしてみませんかSelect * From Table Where 1 <> 1

このようにして、結果をロードせずに挿入することができます。

他のオプションは、代わりに挿入スクリプトを作成することです。

于 2012-02-09T14:46:15.100 に答える