2013-10-07 1 views
1

Я пытаюсь вставить целое значение в мою таблицу в Delphi.
В таблице empusergroup_id является целым числом и label, description являются строковыми типами данных.
Мой код выглядит следующим образом:Как вставить целочисленное значение в таблицу SQLite в Delphi

var 
    gid: Integer; 
    sdescription,ldescription: String; 
begin 
    sdescription := RzEdit1.Text; 
    ldescription := RzMemo1.Text; 
    gid := Integer(RzComboBox1.Items.Objects[RzComboBox1.Items.IndexOf(gname)]); 

    try 
    SQLConnection1.Connected := true; 
    SQLMonitor1.Active := True; 
    sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (gid,''' + sdescription + ''',''' + ldescription + ''')'; 
    SQLConnection1.ExecuteDirect(sSql); 

    except 
    on E: EDatabaseError do 
     ShowMessage('Exception raised with message' + E.Message); 
    end; 
end; 

Это дает мне ошибку в Unknown column gid.
Когда я пытался что-то подобное с фиксированным значением целого числа вместо переменной она работает:

sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (1,''' + sdescription + ''',''' + ldescription + ''')'; 

Он вставляет значения в таблицу успешно.
Как вставить целочисленное значение gid в базу данных с вышеуказанным запросом. Какой будет правильный формат?

ответ

6

Ваш gid становится частью оператора SQL (отсюда ошибка: Unknown column gid).
Вы должны использовать переменную Delphi gid построить оператор SQL (так же, как вы делали с sdescription и ldescription):

sSql := 'INSERT INTO emp(usergroup_id, label, description) VALUES (' + InttoStr(gid) + ', ''' + sdescription + ''',''' + ldescription + ''')'; 

Если Вы использовали бы Параметры вы не имели бы такой грязный запрос/код (который также является предметом инъекции SQL, и т.д ..), например:

qry := TSQLQuery.Create(nil); // or what ever TQuery component you use in your framework 
try 
    qry.SQLConnection := SQLConnection1; 
    qry.SQL.Text := 'INSERT INTO emp(usergroup_id, label, description) VALUES (:usergroup_id, :label, :description)'; 
    qry.Params.ParamByName('usergroup_id').Value := gid; 
    qry.Params.ParamByName('label').Value := sdescription; 
    qry.Params.ParamByName('description').Value := ldescription; 
    qry.ExecSQL; 
finally 
    qry.Free; 
end; 
+0

Бонусный код и подробный ответ помог, однако получение ошибки как параметра не usergroup_id найден, то же самое остроумие h ярлык и описание. Я использую «TSQLQuery» потомок TQuery и модифицированный код следующим образом: qry.Params.ParamByName ('usergroup_id'). Значение: = gid; ' –

+4

Как всегда, +1 для параметров;) – whosrdaddy

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

  • Нет связанных вопросов^_^