2012-02-09 17 views
2

私はDelphi XE2でDataSnapサーバーを構築していますが、クライアントがデータベースに送信するJSONオブジェクトを挿入するには問題があります。ここでデータベースに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に作られていますObjectに変換してクライアントに返しますが、問題は、密なテーブルを持つ大きなアプリケーションになるため、何かを挿入するたびに「SELECT *」を行うのは理想的ではありません。これを行う最善の方法は何ですか?

答えて

8

代わりにINSERT文を使用してみてください。あなたがSelect * From Tableを開いたときにどのような問題は、データの量がある場合

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(); 
2

、なぜSelect * From Table Where 1 <> 1ような何かをしませんか?

この方法では、結果をロードしていない間に挿入することができます。

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

+0

+1これは私のアプローチで見ることができますが、すべてのレコードでitrateするので、選択が遅くなります – ComputerSaysNo

関連する問題