![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Exception Class Segmentation fault(11) en App Android
Hola, soy nuevo en el foro. Me gustaría saber si alguien sabe como resolver la excepción mencionada anteriormente, el problema es algo específico:
Estoy intentando llenar un ComboBox con datos obtenidos a través de un query desde una BD SQL Server. Estoy probando la Aplicación tanto en Windows como en Android, en Windows todo corre de maravilla, no me sale ningún error ni nada, sin embargo al probar con Android me aparecen varios errores, el primero a resolver es el de éste ComboBox. Para hacer las transacciones con la BD estoy usando SDAC de Devart y el componente TMSQuery, el código es el siguiente.
Para éste caso los parámetros que recibe son: -combo: MiForm.ComboBox; -Where: ' '; Este código es el mismo que uso para llenar los ListBox, ya llené dos ListBox para llegar a ese punto y ninguno lanzó error. Para no hacerlo más largo, corre bien hasta llegar a la linea del Execute que es donde truena y aparece el error. P.D. Al ejecutar el Query en SQL Server si me regresa los datos que necesito. Última edición por Casimiro Notevi fecha: 29-03-2018 a las 00:46:08. |
#2
|
||||
|
||||
Esa sentencia sql está mal.
En todo caso sobra el where de abajo:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Más detalles del problema
Hola Casimiro gracias por responder. El Where de ahi está por que ese Procedure lo utilizo para varias partes del código, en algunas de ellas debo agregar una condición adicional a la busqueda, sin embargo como para éste caso no necesito agregar una condición, le mando un espacio en blanco que no le afecta nada al Query, te comento que al correr el Query (Reemplazando los
![]() Código:
DtmClientes.MSQueryCmbPedido.Execute; Código:
Procedure LlenarPlantillasMetaLB(); var strSQL:String; ID_PMeta: String; begin DtmListaPedidos.MSConnectionListaPedidos.Connected:=True; if DtmListaPedidos.MSConnectionListaPedidos.Connected = True then begin strSQL:= 'SELECT ID FROM NtaMeta WHERE (Plataforma = :param1) AND (ID_Status = :param2)' +'ORDER BY NtaMeta_ID'; DtmListaPedidos.MSQueryMetas.SQL.Text := strSQL; DtmListaPedidos.MSQueryMetas.Params[0].Value := 'Ambas'; DtmListaPedidos.MSQueryMetas.Params[1].Value := 2; DtmListaPedidos.MSQueryMetas.Execute; DtmListaPedidos.MSQueryMetas.First; while not DtmListaPedidos.MSQueryMetas.Eof do begin ID_PMeta := DtmListaPedidos.MSQueryMetas.Fields[0].Text; FrmLPedidos.ListBoxTipo.Items.Add(ID_PMeta); DtmListaPedidos.MSQueryMetas.Next; end; end; DtmListaPedidos.MSConnectionListaPedidos.Connected := False; end; |
#4
|
||||
|
||||
¿Quieres decir que ese 'where' es una variable?
Cámbiale el nombre, por ejemplo cWhere, y prueba.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
Cita:
Ya intenté cambiarle el nombre y sigue el mismo error, reemplacé el componente en el módulo, agregué directamente los parámetros y sigue sin funcionar. ¿Por cierto saben por que al correrlo en Android me convierte una variable de String a Short? |
#6
|
||||
|
||||
Hola,
Esto parece un caso típico de referencia débil hacia una instancia, hay que buscar dentro del código (haciendo debug) ¿Cuál es el objeto que Android está liberando automáticamente? y convertir dicha instancia en una referencia fuerte. Para entender esto, recomiendo el libro de DALIJA PRASNIKAR llamado Memory Management For Classic And ARC, el cual trata precisamente este tipo de temas. Si queremos evitar este tipo de sorpresas (Ya sea que usemos Delphi o cualquier otro lenguaje) en dispositivos móviles debemos comprender dicho tema... pues los sistemas operativos móviles como Android o iOS trabajan de ese modo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#7
|
|||
|
|||
Cita:
Código:
DtmClientes.MSQueryCmbPedido.Active := True; DtmClientes.MSQueryCmbPedido.Execute; |
#8
|
||||
|
||||
No he usado SDAC (los componentes que comentas), pero normalmente para una consulta tipo SELECT utilizamos un OPEN o un ACTIVE y para otro tipo de SQL's (INSERT(/DELETE/UPDATE) utilizamos un Execute.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
||||
|
||||
Yo tuve que usarlo en cierta ocasión puntual y el funcionamiento era tal y como describes.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#10
|
|||
|
|||
No estoy muy seguro, pero creo que active por lo que entendí es para mantener el componente activo después de que se cierra la conexión a la BD, pero en el error me funcionó, voy a intentar usar el componente ahora de ésta forma que me comentas. Gracias.
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
raised exception class segmentation fault (11) al iniciar en modo debug | D1360666 | Desarrollo en Delphi para Android | 27 | 04-05-2018 22:13:01 |
Problemas de Exception Class | edwin.simon | OOP | 11 | 23-09-2014 20:35:37 |
Raised exception class | amparog | Varios | 3 | 12-09-2010 00:18:59 |
Exception class EInvvalidOperation... | MON___ | OOP | 2 | 03-10-2007 13:54:38 |
Exception class EAccess violation... | Giniromero | Conexión con bases de datos | 1 | 13-06-2003 12:47:38 |
![]() |
|