Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Tmemo y ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=66237)

Aprendiendo 09-02-2010 14:17:10

Tmemo y ADOQuery
 
Hola a todos, mi duda es la siguiente:

Uso delphi6 profesional.

Tengo un campo TMemo donde el usuario escribe sus observaciones, al guardar los datos indicados a base de datos access2003, lo guarda sin problemas mediante TADOTable (sin importar la longitud de lo escrito, ya que supuestamente los campos Memo de access2003 pueden guardar hasta 65.535 caracteres).

Cuando el usuario quiere modificar esas observaciones, lógicamente accedo al campo y muestro los datos que indicó en su día, ahora viene el problema, resulta que las nuevas modificaciones "sea más información o menos" me salta "No hay transacción activa" y he llegado a la conclusión que sólo ocurre cuando el usuario supera los 255 caracteres. ¿por qué motivo me dice esto?.

En las altas no importa la longitud de lo escrito y en las modificaciones sí.

Las modificaciones en la base de datos las realizo mediante TADOQuery.

Esperando una pronta respuesta, reciban un afectuoso saludo...

:):eek::)

Neftali [Germán.Estévez] 09-02-2010 15:52:17

¿Utilizas transacciones para algo?
Si es que sí, puedes explicar para qué y cómo.

En principio ese error no parece que tenga nada que ver con la longitud del campo.

Aprendiendo 10-02-2010 16:13:09

Efectivamente las operaciones de escritura las realizo mediante transacciones.

Estas transacciones las realizo mediante TADOConection.

try
TADOConection.Startransaction;

... líneas necesarias mediante TADOQuery para guardar las modificaciones.

TADOConection.Commit
except
TADOConection.RollBack;
end;

Saludos... :):eek::)

Neftali [Germán.Estévez] 10-02-2010 16:50:55

Cita:

Empezado por Aprendiendo (Mensaje 353431)
...me salta "No hay transacción activa" y he llegado a la conclusión que sólo ocurre cuando el usuario supera los 255 caracteres. ¿por qué motivo me dice esto?.

Normalmente este error se da cuando intentas hacer un RollBack o Commit sobre un elemento al que no le has hecho un StartTransaction o cuando ya no está activa (es decir ya le has hecho el Commit o RollBack anteriormente).

Revisa tu código a ver si puede ser que se esté dando esa posibilidad.

Si tienes dudas y quieres evitarlo, puedes utilizar la función InTransaction, sobre la misma ADOConnection, que te dirá si hay alguna transacción activa y por lo tanto si puedes hacer un Commit/Rollback.

Aprendiendo 11-02-2010 14:59:39

El código lo he revisado en varias ocasiones y está todo correcto, el commit se realiza sobre una TADOConection que ya tiene un StarTransaction activa y el TADOQuery lo trato antes del Commit ó Rollback.

El fallo siempre lo dá en las modificaciones cuando en el TMemo introduzco más de 255 caracteres. Resulta que a la hora de añadir si sobrepasas el límite de 255 caracteres no pasa nada. La única diferencia que para añadir utilizo TADOTable y para modificar TADOQuery.

La verdad que este fallo tonto, me está haciendo perder mucho tiempo.

¿Que podría estar pasando?

Saludos...

Neftali [Germán.Estévez] 11-02-2010 15:38:58

Si ver el código es difícil...

¿Puede ser que tengas algun Try..Except que te esté enmascarando errores?

Aprendiendo 16-02-2010 08:32:09

Al final lo he solucionado con un TADOTable dentro de una Transacción.

Aún no comprendo por qué motivo realizándolo desde un TADOQuery no funciona y con TADOTable sí.

Saludos....


La franja horaria es GMT +2. Ahora son las 21:01:04.

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