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)
-   -   Problema Con Insertsql (https://www.clubdelphi.com/foros/showthread.php?t=14114)

AGAG4 09-09-2004 20:57:17

Problema Con Insertsql
 
Uso FireBird 1.5, IBX 7.08
El problema es parecido al anterior que mencione, ahora me pasa esto, hago un "insert" directo en el SQL-Editor del Ib-Expert pongo codigo :
Código SQL [-]
insert into tfac_facturas
(BODEGA, TIPOMOV, FOLIO, AUTORIZO, AUTORPRE, CLIENTE, CONCEPTO, COTIZADA, CREDCON, DESCTODOC,
DESGLODOC, FECHAFAC, IMPORFAC, IVADOC, ORDENCOMPRA, TASAIVA,VENCE, VENDEDOR, VIGENCIA)
values
(1,'FM',379938, :AUTORIZO, :AUTORPRE, :CLIENTE, :CONCEPTO, :COTIZADA, :CREDCON, :DESCTODOC,
:DESGLODOC, :FECHAFAC, :IMPORFAC, :IVADOC, :ORDENCOMPRA, :TASAIVA,:VENCE, :VENDEDOR, :VIGENCIA)

Ahora bien, la inserción me la hace Correctamente, hago una consulta para checar si existe y me lo muestra.

Pero, si hago esto en delphi por código usando ibDataset, asignando en la propiedad InsertSQL la misma sentencia, no me Inserta el registro despues de haber puesto:
Código:

Tabla.Open
Tabla.Insert

Que estará pasando????

Hago esto, porque una vez llamado "Tabla.Insert" y después le asigno valores a los campos llaves del Maestro y al quere Guardar con un "Tabla.Post" al Maestro me marca el siguiente error
Código:

lock conflict on no wait transaction deadlock
update conflicts with concurrent update

Esto le aparece al segundo Usuario cuando tiene en poseción un registro diferente al Primer Usuario.

roman 09-09-2004 21:08:48

¿No hace falta algo como Tabla.Post después de Tabla.Insert?

// Saludos

jachguate 09-09-2004 21:12:37

ese es todo el código que tenes?

Pues te falta asignar los valores a los campos de la tabla, no te parece:

Código Delphi [-]
  Tabla.Open;
  Tabla.Insert;
  Tabla.FieldByName('bodega').AsInteger := 1;
  Tabla.FieldByName('TipoMov').AsString := 'FM';
  // los demás campos!
  Tabla1.Post;  //<-- si no usas cached updates, 
                //en este momento se lanza la sentencia insert!
  Transacción.Commit;  //<-- y en este momento se confirma la 
                       //transacción, permitiendo su consulta desde otras 
                       //transacciones (dependerá del nivel de aislamiento 
                       //de estas, claro).

Hasta luego.

;)

AGAG4 09-09-2004 21:22:33

????
 
Hago esto..., una vez llamado "Tabla.Insert" , después le asigno valores a los "campos llaves del Maestro" y al quere Guardar con un "Tabla.Post" al Maestro me marca el siguiente error
Cita:

Código:
lock conflict on no wait transaction deadlock update conflicts with concurrent update
Esto le aparece al segundo Usuario cuando tiene en posesión un registro diferente al Primer Usuario.

No acepto la Transacción, porque es el principio de la captura de una Factura, como por ejemplo:
Cita:

Abro Captura de facturas, capturo la SERIE, el FOLIO
En el OnExit del EditFolio, busco si se encuentra el Maestro, SI lo encuentra lo muestra SI NO
Inserto un NUEVO registro al Maestro con sus 2 campos llaves que son SERIE y FOLIO, al Insertarlo me doy cuenta en el Ib-Expert que no lo ha grabado todavía hasta que le doy un POST, pero si esta otro usuario dentro de la captura de Facturas con otro FOLIO distinto a este, me marca el Error que mencione arriba.
Ahora si lo hago como dicen de aceptar la TRansacción con Commit ó CommitRetaining, voy a tener este problema:

Cita:

Al aceptar la Transacción voy a guardar el Maestro en la Base de Datos, y si entra otro Usuario va a guardar el siguiente FOLIO, el problema es que si Termina primero el Segundo usuario, va a imprimir el Folio de Factura INCORRECTO-ADELANTADO al que ya viene impreso en la misma FACTURA.
Si me explico????

editado por jachguate para quitar etiquetas code que hacian ilegible el mensaje

jachguate 09-09-2004 22:45:47

Hola. Te recomiendo usar las etiquetas code solamente para publicar trozos de código, y limitar su contenido a una cantidad de columnas que quepan en la pantalla (o que obliguen a un desplazamiento corto si es imposible).

De la forma que has publicado el mensaje es muy dificil de leer.

Por último, me da la impresión que esto es parte de un problema mas grande, y que pretendes que nosotros sepamos y mantengamos en mente todos el contexto de tus problemas. Mi mensaje anterior sugiere el uso de commit, dado que desconozco que se trate de una transacción mas grande. Basta que me ignores si ya sabes que es asi.

Por último, el problema que tenes, tiene que ver con concurrencia de las operaciones, dado que dos usuarios están tratando de modificar el mismo registro (o un usuario está tratando de modificarlo desde dos transacciones diferentes), y no como lo publicaste originalmente.

Hasta luego.

AGAG4 10-09-2004 01:40:56

????
 
Gracias por su respuesta, pero la verdad no es como usted lo piensa, es sólo que planteo mis problemas como actualmente los tengo, y no tengo 1 usuario con 2 transacciones, y sobre la concurrencia, ya lo revise bien y tampoco, me hace pensar y creo que estoy en lo cierto de que antes de publicar un problema, debo de plantearlos mucho mejor como actualmente los envio, Que tenga buen día.


La franja horaria es GMT +2. Ahora son las 02:08:45.

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