Que tal colegas,
Necesito un par de ojos extra.
Estoy haciendo una app que envía y recibe datos de una base de datos en pc via datasnap. (eso está todo bien)
En la App, debo mantener el listado de clientes actualizado, para ello hay un botón RECIBIR CLIENTES que activa un clientdaset que contiene la info actualizada. Luego lo recorro, y si el cliente NO existe en la DB Sqlite, lo inserto, o si existe lo actualizo.
El problema que tengo es que hay algo en mi Query de actualizar que corta el programa y se sale. Y lo raro es que si compilo y ejecuto la App en win32 funciona bien, pero al compilo en Android se sale al entrar en actualizar.
Código Delphi
[-] QryRec := TFDQuery.Create(Principal);
cdscli.DisableControls;
cdscli.First;
Application.ProcessMessages;
while not cdscli.Eof
do
begin
try
begin
QryRec.Close;
QryRec.SQL.Clear;
QryRec.Connection := datos.FDconmovil;
QryRec.UpdateTransaction := datos.FDTrans;
QryRec.Transaction := datos.FDTrans;
QryRec.SQL.Append('INSERT INTO CLIENTES');
QryRec.SQL.Append('(ID, NOMBRES, CUIT, TEL, CEL, EMAIL, IVA, PROVINCIA, LOCALIDAD, ZONA, LISTA, DESCUENTO, VENDEDOR, DOCUMENTO, LIMITE, FECHA)');
QryRec.SQL.Append('values(:id, :nom, :cuit, :tel, :cel, :mail, :iva, ro, :loc, :zo, :list, :desc, :ven, :doc, :lim, :fe) ');
QryRec.ParamByName('id').AsInteger := cdscliid.Value;
QryRec.ParamByName('fe').AsDateTime := cdscliactualiz.AsDateTime;
QryRec.ParamByName('nom').AsString := cdsclinombres.AsString;
QryRec.ParamByName('cuit').AsString := cdsclicuit.Value;
QryRec.ParamByName('tel').AsString := cdsclitel.AsString;
QryRec.ParamByName('cel').AsString := cdsclicel.AsString;
QryRec.ParamByName('mail').AsString := cdscliemail.AsString;
QryRec.ParamByName('iva').AsString := cdscliiva.Value;
QryRec.ParamByName('pro').AsInteger := cdscliprovincia.Value;
QryRec.ParamByName('loc').AsString := cdsclilocalidad.Value;
QryRec.ParamByName('zo').AsInteger := cdsclizona.Value;
QryRec.ParamByName('list').asinteger := cdsclilista.Value;
QryRec.ParamByName('desc').AsFloat := cdsclidescuento.Value;
QryRec.ParamByName('ven').AsInteger := cdsclivendedor.Value;
QryRec.ParamByName('doc').AsInteger := cdsclidocumento.Value;
QryRec.ParamByName('lim').AsFloat := cdsclilimite.Value;
QryRec.ExecSQL;
nue := nue+1;
Application.ProcessMessages;
end;
except
begin
QryRec.Close;
QryRec.SQL.Clear;
QryRec.Connection := datos.FDconmovil;
QryRec.UpdateTransaction := datos.FDTrans;
QryRec.Transaction := datos.FDTrans;
QryRec.SQL.Append('UPDATE CLIENTES');
QryRec.SQL.Append('SET NOMBRES = :nom, CUIT = :cuit, TEL = :tel, CEL = :cel, EMAIL = :mail, IVA = :iva, PROVINCIA = ro, LOCALIDAD = :loc, ZONA = :zo, LISTA = :list, DESCUENTO = :desc, VENDEDOR = :ven, DOCUMENTO = :doc, LIMITE = :lim, FECHA = :fe');
QryRec.SQL.Append('where ID = :id and (fecha < :fe)');
QryRec.ParamByName('id').AsInteger := cdscliid.Value;
QryRec.ParamByName('fe').AsDateTime := cdscliactualiz.AsDateTime;
QryRec.ParamByName('nom').AsString := cdsclinombres.AsString;
QryRec.ParamByName('cuit').AsString := cdsclicuit.Value;
QryRec.ParamByName('tel').AsString := cdsclitel.AsString;
QryRec.ParamByName('cel').AsString := cdsclicel.AsString;
QryRec.ParamByName('mail').AsString := cdscliemail.AsString;
QryRec.ParamByName('iva').AsString := cdscliiva.Value;
QryRec.ParamByName('pro').AsInteger := cdscliprovincia.Value;
QryRec.ParamByName('loc').AsString := cdsclilocalidad.Value;
QryRec.ParamByName('zo').AsInteger := cdsclizona.Value;
QryRec.ParamByName('list').asinteger := cdsclilista.Value;
QryRec.ParamByName('desc').AsFloat := cdsclidescuento.Value;
QryRec.ParamByName('ven').AsInteger := cdsclivendedor.Value;
QryRec.ParamByName('doc').AsInteger := cdsclidocumento.Value;
QryRec.ParamByName('lim').AsFloat := cdsclilimite.Value;
QryRec.ExecSQL;
act := act+1;
Application.ProcessMessages;
end;
end;
c := c +1;
LbRec.Text := inttostr(c);
Application.ProcessMessages;
cdscli.Next;
end;
QryRec.free;
pnespere.Visible := false;
end;
Showmessage(inttostr(act) + ' Clientes actualizados y '+ inttostr(nue)+ ' nuevos');
cdscli.Close;
En el trozo de código de arriba se ve la creación del Query, el armado de las 2 consultas y la asignación de parámetros.
Que cosa rara o mal ubicada puede estar causando ese problema?