FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Recorrer dataset, no funciona bien.
hace poco tenía un modulo en delphi XE2 con conección a SQL Server 2008 conectados a través de BDE, funcionaba bien, por motivos en los que molestaba la conección con BDE migre a XE8, y la conección
la hice con FireDAC, todo super, el problema es el siguiente, creo con un TFDQuery una consulta que me devuelve 24 registros, estoy recorriendo el query con un for, dentro del ciclo estoy sacando datos de cada registro y actualizo otra tabla con esos datos, al llegar al registro 24 el intenta realizar el update y se queda pegado el modulo. Los registro del 1 al 23 los actualiza bien pero se queda en el ultimo. Espero me entiendan y se los agradezco de ante mano, así tengo el fuente for cont := 1 to Query6.RecordCount do begin qconsr := nil; qconsr := TQuery.create(qconsr); qconsr.DatabaseName := Md_comun.BASEDATOS.DatabaseName; madr := ''; madr := 'update pago set deter = ' + FloatToStr(v1) + ' where nrocredito = ' +Query6.FieldByName('nro_credito').AsString + ' and documento = ' + Query6.FieldByName('documento').AsString + ' and consecutivo = ' + Query6.FieldByName('consecutivo').AsString; with qconsr doQuery6.Next; end; // Fin For |
#2
|
||||
|
||||
Primero de todo, ¡¡¡bienvenido!!!
Por favor, lee nuestra guía de estilo, gracias. No olvides usar las etiquetas para código, ejemplo: También, cuando vayas a preguntar algo, debes crear un hilo nuevo, no escribas cualquier cosa en cualquier hilo. Solamente debes escribir en otros hilos para contestar a los que han iniciado el mismo. Seguidamente, en tu código, seguramente debas cambiar: por
Aunque lo mejor es:
Además veo cosas raras en tu código, estás mezclando qconsr y query6. Supongo que te has despistado y has hecho un copia/pega mal. O lo mismo no lo he llegado a entender bien.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 08-03-2019 a las 22:30:45. |
#3
|
||||
|
||||
Hola.
Agregando a lo que te aconseja Casimiro, siempre que puedas, usa parámetros para evitar la inyección SQL. Algo similar a esto: Escribí el ejemplo sobre la marcha y no está probado, no des por sentado su correcto funcionamiento. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
|||
|
|||
Ecfisa, muchas gracias lo probaré, me tiene cabezón esa linea , no doy ni daré por sentado nada en la vida, en estos momentos solo quiero saber por qué se esta suspendiendo la actualización con SQL
|
#5
|
||||
|
||||
Ya te lo he contestado.
|
#6
|
|||
|
|||
Delphi XE8?, A veces pasan cosas "raras" con el depurador y nos hace creer que la ejecución se ha detenido en una sentencia cuando en realidad se detiene en sentencias posteriores. Sugerencia: Coloca un punto de interrupción en Query6.Next. Esto con el objetivo de verificar si realmente el código se "congela" en ExecSQL.
A Tener en cuenta: 1. La observación de casimiro: al recorrer DataSet de principio a fin lo recomendado es usar 2. NO libera el objeto qconsr . En tu código está ocurriendo una fuga de memoria cada vez que creas el objeto qconsr porque nunca está siendo liberado. En el código mostrado por ecfisa se ilustra una forma correcta de crear y destruir el objeto qconsr 3. Del código se puede deducir que los componentes utilizados son BDE, por lo que supongo que utilizas tanto BDE como FireDac en la aplicación. Pregunta ¿El código funcionaba bien antes de FireDac o FireDac fue necesario para resolver otro problema? 4. Verifica el siguiente código, no probado, en el que se hace uso del while y de try-finally:
5. En un enfoque completamente alternativo, y aprovechando el poder de las bases de datos, prueba a utilizar la sentencia SQL MERGE, la cual te permite actualizar/modificar/borrar masivamente registros de una tabla a partir de otra tabla o de una subconsulta. |
#7
|
|||
|
|||
Casimiro, muchas gracias por cada apunte ya había probado los puntos que me dice pero se sigue pausando allí, este es un ejemplo mas completo
como digo funciona bien hasta llegar al ultimo registro justo en ExecSQL muere, y me bloque al modulo
|
#8
|
|||
|
|||
se bloquea la ejecución de un Query
Buenos días, ya había mandado esta inquietud en un hilo que no hice, y parece ser que lo quitarón , migre de XE2 donde utilizaba BDE, pase el modulo a delphi XE8 y cambie a FireDAC, estoy haciendo pruebas, el recorre el ciclo bien hasta el ultimo registro, cuando va a terminar el ciclo el ultimo registro se queda en
del qrconsr, ya le hice unos cambios que me habían comentado en el anterior Hilo donde copie la inquietud pero sigue el error, pero sigue pegándose en el ultimo registro. envió el código
|
#9
|
||||
|
||||
intenta colocar un
query6.first antes que empiece a recorrer prueba con eso
__________________
Dulce Regalo que Satanas manda para mi..... |
#10
|
|||
|
|||
un saludo
hola [oscarac], ya lo tengo así lo, recorrí las lineas después del while y se queda en ExecSQL, no salta a tirar un error, me dirijo al sqlserver y reviso el monitor de actividades y aparece el Update en
estado suspendido, apenas termino el programa se libera en SQLserver, también copie la cadena del Query6 cuando estoy en el ultimo registro a SQLServer y me funciona bien. Me tiene pensativo ese fragmento de código, cuando lo tenía en XE2 funcionaba bien, pero ahora queda en ese registro. Seguiré mirando y probando, muchas gracias por el aporte. |
#11
|
||||
|
||||
pregunta importante:
te has fijado que exista el registro que quieres actualizar?
__________________
Dulce Regalo que Satanas manda para mi..... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
No funciona bien KillFocusByReturn | oscjae | FireMonkey | 2 | 20-12-2018 21:01:31 |
Recorrer una Dataset hacia atras | IVAND | Varios | 4 | 15-05-2012 22:20:15 |
funciona bien en windows 7 64b pero en XP no funciona | ASAPLTDA | Varios | 5 | 06-05-2011 16:24:50 |
Recorrer fichero txt y almacenarlo en un DataSet | mamen | .NET | 2 | 24-04-2006 19:27:33 |
QRImage no funciona bien | eljinete | Impresión | 4 | 16-12-2005 01:02:05 |
|