Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-12-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
App se cierra al ejecutar query

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?

Última edición por amadis fecha: 11-12-2019 a las 12:01:27.
Responder Con Cita
  #2  
Antiguo 11-12-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

¿No podrías poner el código en un bloque "try .. except" a ver si se produce alguna excepción?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 13-12-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Que tal Amigos,

les cuento que logré ejecutar el query pero no se cómo.

Resulta, que como el query que fallaba era el segundo (el UPDATE CLIENTES), pues para testear primero reemplacé en la asignación de valores a parametros, el .value del campo del clientdataset por su valor correspondiente (.asstring, .asfloat, etc). Y seguía fallando
Luego lo corté todo y comencé a ejecutar el query con un solo parametro y un campo a actualizar, y funcionaba, y luego fui agregando de a uno los parametros a los respectivos campos. Iba funcionando, hasta que en el campo LOCALIDAD, falló, revisé que podía haber de raro ahí y no encontré nada, lo salteé, agregué el resto de los campos, y funcionó todo incluso agregué un campo DOMICILIO que originalmente había olvidado y actualizó, y después volví a poner el parametro y campo localidad en su lugar y todo funciona, pero no entiendo que cambió.

Así me quedó ahora el bloque del query funcionando

Código Delphi [-]
  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('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, DOMICILIO = :dom, FECHA = :fe');
                                        QryRec.SQL.Append('where ID = :id and (fecha < :fe)');
                                        QryRec.ParamByName('id').AsInteger :=  cdscliid.AsInteger;
                                        QryRec.ParamByName('fe').AsDateTime := cdscliactualiz.AsDateTime;
                                        QryRec.ParamByName('nom').AsString :=  cdsclinombres.AsString;
                                       QryRec.ParamByName('cuit').AsString :=  cdsclicuit.AsString;
                                        QryRec.ParamByName('tel').AsString :=  cdsclitel.AsString;
                                        QryRec.ParamByName('cel').AsString :=  cdsclicel.AsString;
                                        QryRec.ParamByName('mail').AsString :=  cdscliemail.AsString;
                                        QryRec.ParamByName('iva').AsString :=  cdscliiva.AsString;
                                        QryRec.ParamByName('pro').AsInteger :=  cdscliprovincia.AsInteger;
                                        QryRec.ParamByName('loc').AsString :=  cdsclilocalidad.AsString;
                                        QryRec.ParamByName('zo').AsInteger :=  cdsclizona.AsInteger;
                                        QryRec.ParamByName('list').asinteger :=  cdsclilista.AsInteger;
                                        QryRec.ParamByName('desc').AsFloat :=  cdsclidescuento.AsFloat;
                                        QryRec.ParamByName('ven').AsInteger :=  cdsclivendedor.AsInteger;
                                        QryRec.ParamByName('doc').AsInteger :=  cdsclidocumento.AsInteger;
                                        QryRec.ParamByName('dom').AsString :=  cdsclidomicilio.AsString;
                                        QryRec.ParamByName('lim').AsFloat :=  cdsclilimite.AsFloat;
                                        QryRec.ExecSQL;
                                        act := act+1;
                                        Application.ProcessMessages;

Pero no veo ningún cambio significativo que antes hubiese podido causar la falla.
Responder Con Cita
  #4  
Antiguo 13-12-2019
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por amadis Ver Mensaje
...Iba funcionando, hasta que en el campo LOCALIDAD, falló, ... y no encontré nada, lo salteé, ... funcionó todo incluso agregué un campo DOMICILIO ...
No quiero señalar lo obvio, pero ¿no será que el campo LOCALIDAD es el problema? Digo, así lo vería yo...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar query una sola vez al dia giulichajari Conexión con bases de datos 5 28-07-2014 14:28:07
Un query que se cierra solo Angel.Matilla Firebird e Interbase 8 19-10-2013 11:06:39
Ejecutar query look OOP 2 24-10-2007 10:14:05
query no Graba , se cierra juanmaster Tablas planas 9 12-12-2006 23:52:21
Me cierra Delphi totalmente al activar Query JamesBond_Mx SQL 2 12-01-2006 15:47:39


La franja horaria es GMT +2. Ahora son las 19:55:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi