Primero elimina los with de tu codigo porque
1. No es aconsejable
2. No lo estas "aprovechando"
Debido a 1), casi que prefiero no explicarte el porque no lo estas "aprovechando"
Si te da un error en Query.SQL.Add es porque el query no esta inicializado (no esta creado)
No se de donde sale ADOQuery1, voy a asumir que tenes el componente en el Form actual. Tambien voy a asumir que en ADOQuery1.Connection tenes asignada una TADOConnection
Código Delphi
[-]
if not Assigned(ADOQuery1) then
raise Exception.Create('ADOQuery1 no esta correctamente inicializado');
if not Assigned(ADOQuery1.Connection) then
raise Exception.Create('ADOQuery1.Connection no esta correctamente inicializado');
if not Assigned(ADOQuery1.SQL) then
raise Exception.Create('ADOQuery1.SQL no esta correctamente inicializado');
if not Assigned(form2) then
raise Exception.Create('form2 esta correctamente inicializado');
if ADOQuery1.Active then
ADOQuery1.Close;
ADOQuery1.SQL.Text :=
' INSERT INTO factura (cantfactu,subtfactu,ivafactu,totalfactu,horafactu,idclientef,idpagof,iduserf) ' +
' VALUES (:cantfactu, :subtfactu, :ivafactu, :totalfactu, :horafactu, :idclientef, :idpagof, :iduserF) ';
ADOQuery1.Parameters.ParamByName('cantfactu').Value := combocant.Text;
ADOQuery1.Parameters.ParamByName('subtfactu').Value := cant;
ADOQuery1.Parameters.ParamByName('ivafactu').Value := iva;
ADOQuery1.Parameters.ParamByName('totalfactu').Value := total;
ADOQuery1.Parameters.ParamByName('horafactu').DataType := ftDateTime;
ADOQuery1.Parameters.ParamByName('horafactu').Value := Mfechahora;
ADOQuery1.Parameters.ParamByName('idclientef').Value := form2.edtcedula.Text;
ADOQuery1.Parameters.ParamByName('idpagof').Value := tpago;
ADOQuery1.Parameters.ParamByName('iduserF').Value := '1';
ADOQuery1.Open;