Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ejemplo de insert, drop, delete, update firebir + delphi (https://www.clubdelphi.com/foros/showthread.php?t=81796)

TOPX 19-12-2012 16:14:56

Cita:

Empezado por darkbits (Mensaje 452124)
busco ejemplos de programitas pequeños de (INSERT, DROP, DELETE, UPDATE,...) para ver como se hace

Tal vez los tutoriales creados por [Caral] le sean de ayuda. A saber:
-

darkbits 19-12-2012 16:20:19

TOPX gracias por el Link
ya li visite la primera vez y llego a cumplir todo del tutorial, busco algun link de ejemplos firebird+ delphi si conoces algun estare agradecidor.

TOPX 19-12-2012 16:24:15

Cita:

Empezado por darkbits (Mensaje 452127)
busco algun link de ejemplos firebird+ delphi

No es sólo un documento, esos tres tutoriales tienen todo el código fuente; descárguelos todos por favor.

Neftali [Germán.Estévez] 19-12-2012 16:26:30

Además de los comentarios y tutoriales a los que te han remitido, yo optaría (centrándome en el código que has puesto), por no mantener las dos consultas abiertas.
En general es una buena costumbre no mantener consultas abiertas más tiempo del necesario.

Por lo que veo, la primera consulta se usa para buscar un valor.
Una vez abierta, recoge ese valor en una variable y ciérrala. Pruébalo y ya dirás...

Código Delphi [-]
  _DM.consulta1.SQL.Text:= 'select * From inalmacen Where id_inal='+idprod.text;
  _DM.consulta1.Open;
  Value := _DM.consulta1.FieldByName('cantidad_inal').Value;
  _DM.consulta1.Close;
  ...

darkbits 19-12-2012 16:34:17

hice el consejo y nada.

Código SQL [-]
      _DM.consulta1.SQL.Text:= 'select * From inalmacen Where id_inal='+ StringGrid1.Cells[1,stringGrid1.Row];
      _DM.consulta1.Open;
      _DM.consulta2.SQL.Text:= 'update INALMACEN set cantidad_inal=:auxcantidad_inal Where id_inal='+ StringGrid1.Cells[1,stringGrid1.Row];
      _DM.consulta2.ParamByName('auxcantidad_inal').Value:=inttostr(strtoint(_DM.consulta1.FieldByName('ca  ntidad_inal').Value) + strtoint(StringGrid1.Cells[5,stringGrid1.Row])) ;
      _DM.consulta1.Close;
      _DM.consulta2.ExecSQL;
      _DM.consulta2.Close;

encontre este detalle si pueden ayudarme:

tengo 10 monitores en stock si la PC1 realiza la venta de 1 Monitor con el codigo q pego arriba me muestra 9 monitores en stock.
pero si habro la aplicacion en otra PC2..a.. PC5 me muestra que tengo sigue 10 monitores a la venta si le digo q quiero vender 1 ahi esta el problema. se bloquea todo,.

entonces veo que le falta algo despues de
_DM.consulta2.ExecSQL;

Neftali [Germán.Estévez] 19-12-2012 16:51:54

¿Estás haciendo algo con transacciones?
Lo he comentado antes. ¿Estás haciendo los Commit?

Casimiro Noteví 19-12-2012 16:52:48

Yo creo que este tema es el mismo que este otro, allí te expliqué y te pregunté cosas, al igual que te están preguntando aquí... y no las contestas :confused:
Mejor voy a unir los dos hilos.

darkbits 19-12-2012 17:10:48

no hay algunos ejemplos por ahi please para mi es mas facil ver como se hace

agradecido.

Casimiro Noteví 19-12-2012 17:32:28

Cita:

Empezado por darkbits (Mensaje 452135)
no hay algunos ejemplos por ahi please para mi es mas facil ver como se hace
agradecido.

¿Ejemplos?, cientos, miles, puede que millones, programas completos, libros que te he aconsejado y no lees, más arriba te puse un trozo de código con lo que se supone que estás haciendo.
Además como sigues sin contestar nuestras preguntas...

orodriguezca 02-01-2013 16:15:50

Hola darkbits,

Ya ha pasado una semana y creo que aún no has solucionado tu problema. Quiero redondear algunas comentarios y sugerencia que ya te han hecho otros foristas y quizás has pasado por alto:

En Firebird todo ocurre siempre dentro de una transacción, aún cuando parezca que tu código no haya iniciado esa transacción. En tu código, cuando vendes un MOUSE y actualizas las cantidades, el registro que se actualiza en la tabla INALMACEN queda "retenido o bloqueado", ningún otro cliente (estación de trabajo) podrá modificar ese registro a menos que lo comprometas. Ahora, si el registro no es comprometido, los demás clientes podrán leer el registro pero en su versión original, no la versión modificada; es por esto que cuando realizas una venta, el PC que hizo la venta muestra en STOCK 9, mientras el resto de PC muestra 10 (la versión original del registro).

Solución: Hay que finalizar la transacción. Al finalizar la transacción el registro o registros insertado/actualizado/borrado queda "visible" (o invisible si fue borrado) para los demás clientes. Para finalizar la transacción debes ejecutar el método commit o commitretaining sobre la transacción, tal cual lo indicó "Casimiro Notevi": _DM.consulta2.Transaction.commitretaining.

En tu caso aconsejo que hagas uso de commitretaining, pues supongo que solo tienes un componente de transacción y cuando es así al ejecutar el método commit no solo se compromete la transacción sino que también se finaliza la conexión a la base de datos, en cambio commitretaining deja la base de datos, la transacción y los dataset abiertos para seguir trabajando sobre ellos.


La franja horaria es GMT +2. Ahora son las 12:45:23.

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