2012-02-09 2 views
2

Я создаю сервер DataSnap в Delphi XE2, и мне трудно понять, как вставить объект 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 Объект и возвращается моему клиенту, но проблема в том, что это будет большое приложение с плотными таблицами, и поэтому «SELECT *» каждый раз, когда я хочу что-то вставить, не является идеальным. Каков наилучший способ сделать это?

ответ

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

Если какая проблема является объем данных при открытии Select * From Table, почему бы не сделать что-то вроде Select * From Table Where 1 <> 1?

Таким образом, вы сможете вставлять, не загружая результат.

Другой вариант должен был бы создать скрипт Insert.

+0

+1 это было бы лучше, чем я могу видеть в его подходе, но медленно в выборе, потому что он будет проходить по всем записям – ComputerSaysNo

Смежные вопросы