Insertar registro dificultoso

Estoy usando un datasource1, un query1, y un dbgrid,
la base de datos tiene 3 campos:
Id alfanumérico, nombre memo, e importe que es integer.
Y quiero insertarle un registro del contenido de un edit(edtid), memo(mmnombre), y un edit(edtimporte), en los tres campos.
Pero no puedo, con lo que he esrito me tira un error de type mistmatch en expression, como si el tipo de los parámetros de la sentencia sql no estuveran declarados, los he declarado de muchas formas y sigo con el error
¿Cómo lo puedo hacer?
procedure TForm1.cmbinsert2Click(Sender: TObject);
begin
with query1 do
begin
close;
SQL.clear;
SQL.add('INSERT INTO "db.db"');
sql.add('(id,Nombre,Importe)');
sql.add('VALUES(:id,:nombre,:importe)');
Params[0].DataType:=ftinteger;
Params[1].DataType:=ftmemo;
Params[2].DataType:=ftinteger;
params.Items[0].Asinteger:=strtoint(edtid.text);
params.Items[1].AsMemo:= mmnombre.text;
params.Items[2].Asinteger:=strtoint(edtimporte.text);
ExecSQL;
Refresh;
end;
end;
También he probado así con una tabla con dos campos uno alpfanumerico y el otro integer y el mismo error
procedure TForm1.cmbinsertClick(Sender: TObject);
begin
with query1 do
begin
close;
sql.Clear;
sql.add('insert into db');
sql.Add('(Id,Numero)');
sql.add('Values(:id,:numero)');
ParamByName('id').Value:= strtoint(edtid.text);
ParamByName('numero').Value:= strtoint(edtnumero.text);
open;
end;
end;

1 respuesta

Respuesta
1
Antes que nada date cuenta que estas cargando cada vez que se pusla sobre el botón las sentencias SQL, lo que deberías hacer es ya dejarlas cargadas en el Query1, en la propiedad SQL, una vez hecho esto configura los parámetros en la propiedad Params, de esta forma el código te queda así:
procedure TForm1.cmbinsert2Click(Sender: TObject);
begin
with Query1 do
begin
Close;
ParamByName('id').Value := StrToInt(edtid.text);
ParamByName('Nombre').Value := mmnombre.text;
ParamByName('Importe').Value := StrToInt(edtimporte.text);
ExecSQL;
Refresh;
end;
end;
Cualquier cosa pregunta, Atentamente. DX.
PD: Acordate de finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas