Ir al contenido


Foto

¿porqué no hace el post?


  • Por favor identifícate para responder
16 respuestas en este tema

#1 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 14 abril 2011 - 02:49

Apreciada comunidad:

Tengo el siguiente código en un botón :


delphi
  1. procedure TFProveedores.btnAnadirFacturaClick(Sender: TObject);
  2. begin
  3.   //
  4.   Qfacturaspro.Active:= True;
  5.   QFacturasPro.Append;
  6.   QFacturasPro.FieldByName('id_proveedor').AsInteger :=
  7.       EmpresaActiva.QProveedores.FieldByName('id').AsInteger;
  8.   QFacturasPro.FieldByName('facturanumero').AsString := txtNumFactura.Text;
  9.   QFacturasPro.FieldByName('fechafactura').AsDateTime :=  StrtoDateTime(txtFechaFactura.text);
  10.   QFacturasPro.FieldByName('cif').AsString :=
  11.       EmpresaActiva.QProveedores.FieldByName('cif').AsString;
  12.   QFacturasPro.FieldByName('baseimp1').AsFloat := StrtoFloat(txtBase1.text);
  13.   QFacturasPro.FieldByName('baseimp2').AsFloat := StrtoFloat(txtBase2.text);
  14.   QFacturasPro.FieldByName('baseimp3').AsFloat := StrtoFloat(txtBase3.text);
  15.   QFacturasPro.FieldByName('perc_iva1').AsFloat := StrtoFloat(txtPorcIva1.text);
  16.   QFacturasPro.FieldByName('perc_iva2').AsFloat := StrtoFloat(txtPorcIva2.text);
  17.   QFacturasPro.FieldByName('perc_iva3').AsFloat := StrtoFloat(txtPorcIva3.text);
  18.   QFacturasPro.FieldByName('iva1').AsFloat := StrtoFloat(txtImpIva1.text);
  19.   QFacturasPro.FieldByName('iva2').AsFloat := StrtoFloat(txtImpIva2.text);
  20.   QFacturasPro.FieldByName('iva3').AsFloat := StrtoFloat(txtImpIva3.text);
  21.   QFacturasPro.FieldByName('total1').AsFloat := StrtoFloat(txtParcial1.text);
  22.   QFacturasPro.FieldByName('total2').AsFloat := StrtoFloat(txtParcial2.text);
  23.   QFacturasPro.FieldByName('total3').AsFloat := StrtoFloat(txtParcial3.text);
  24.   QFacturasPro.FieldByName('totalfra').AsFloat:=StrtoFloat(txtTotal.text);
  25.   QFacturasPro.FieldByName('vencimiento').AsDateTime:=strtodate(txtvencimiento.Text);
  26.   QFacturasPro.FieldByName('pagado').AsFloat:=StrtoFloat(txtImpPagado.text);
  27.   QFacturasPro.FieldByName('totalbase').AsFloat:=StrtoFloat(txtTotalBase.Text);
  28.   QFacturasPro.FieldByName('totalIva').AsFloat:=StrtoFloat(txtIVATotal.text);
  29.   QFacturasPro.FieldByName('formapago').AsString:=txtFormaPago.text;
  30.   QFacturasPro.Post;
  31.  
  32.   QFacturasPro.Active :=False;
  33.   QFacturasPro.SQL.Text:='select * from facturaspro where id_proveedor='
  34.   +InttoStr(EmpresaActiva.QProveedores.FieldByName('id').AsInteger);
  35.   QFacturasPro.ExecSQL;
  36.   QFacturasPro.Active = True;
  37.   LimpiarCamposFactura // deja en blanco los campos en el formulario para poder añadir otra factura;                                 



Resulta que no me dá ningún error, sin embargo no me añade el registro, ¿Alguna idea o sugerencia?

Millones de gracias por adelantado.

Marc Miralles
  • 0

#2 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 abril 2011 - 03:36

Hola.

Probablemente el problema es que no confirmas la transacción involucrada. No basta con guardar los datos en la base de datos, hay que confirmar su transacción para que pasen a estar disponibles para todo el mundo.

Salut xiquet.
  • 0

#3 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 14 abril 2011 - 04:31

Leñe, esto no lo tengo en el resto de código y bien que me actualiza, tiene que ser alguna otra chorrada....

De todos modos como hago esto de la transacción?  Estoy usando ZEOS y MySQL

Gracias

Marc Miralles
  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 abril 2011 - 05:12

Hola

Leñe, esto no lo tengo en el resto de código y bien que me actualiza, tiene que ser alguna otra chorrada....

De todos modos como hago esto de la transacción?  Estoy usando ZEOS y MySQL

Gracias

Marc Miralles


No lo sé, nunca he usado Zeos.

En todo caso, si en el resto del código no tienes que pelearte con las transacciones, quiere decir que Zeos las puede gestionar de forma automática.

Así que deberías buscar alguna propiedad del tipo AutoCommit, para activarla en este Query.

Salut.
  • 0

#5 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 14 abril 2011 - 07:28

Que va Marc:

Soy incapaz de encontrar nada respecto al commit en ZEOS. y no sé porqué las demás ventanas funcionan y a esta no le dá la gana, snif, snif :cry:

Dime,¿ que tal con el DB propio de Lazarus?, usé ZEOS para evitar las transacciones ya que me daban algún problemita con el TSQLTransaction (creo recordar que no había forma de que me dejará cerrar la transacción), soy nuevo en Lazarus, pero no en el mundo de la programación en el que llevo más de 20 años (aunque sigo siendo novato, jeje).  ¿Tienes idea de algún programa que se pueda descargar el fuente y que use DB? Tengo que avanzar con mi proyecto de Gestión Médica en Lazarus ya que lo necesito para mi empresa y luego para regalar-lo a todo quien lo quiera.

Espero tu respuesta, gracias por todo

També salut per tu.

Marc
  • 0

#6 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 14 abril 2011 - 07:42

Suponogo que QFacturasPro tira de la talba adecuada... a ver si la estas añadiendo en otra tabla (pasa cuando se copian componenetes de un formulario a otro), te lo digo porque en el codigo se ve que al final haces un select * de la tabla FacturasPro, pero no se puede confirmar si el QFacturasPro está o no igual.

Marc, MySQL no es un motor de bases de datos, internamente puedes usar varios, MySQL es solo "la cascara" vacia, y el motoro original al menos, no tenia ni triggers, ni transacciones, ni control de concurrencia, ni control de consistencia... eso si, es una bala, claro que no se preocupa de casi nada!

Por cierto, los modos que si admiten todo esto, esos creo que ya no son codigo libre ni tan rapidos, claro, ya van a la velocidad "normal", solo que para programacion de webs y esas cosas, un MySQL de los rapidos pero sucios van perfectos.
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 14 abril 2011 - 09:25

El commit se realiza en el ZConnection:



delphi
  1. ZConnection1.commit;



Saludos.


  • 0

#8 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 abril 2011 - 09:44

Hola Sergio.

Marc, MySQL no es un motor de bases de datos, internamente puedes usar varios, MySQL es solo "la cascara" vacia, y el motoro original al menos, no tenia ni triggers, ni transacciones, ni control de concurrencia, ni control de consistencia... eso si, es una bala, claro que no se preocupa de casi nada!

Por cierto, los modos que si admiten todo esto, esos creo que ya no son codigo libre ni tan rapidos, claro, ya van a la velocidad "normal", solo que para programacion de webs y esas cosas, un MySQL de los rapidos pero sucios van perfectos.


Vaya, pensaba que los motores transaccionales venían "de serie" en MySQL desde hace ya algunos años (a partir de MySQL 5, creo recordar).

Habrá que preguntarle a Marc que motor utiliza su MySQL (DBIsam, InnoDB, ...) para confirmar si el problema lo puede tener con las transacciones, o simplemente tiene algo mal en su código y no está guardando lo que él pretende guardar.

En cualquier caso Zeos tiene que tener propiedades para manejar las transacciones involucradas en las consultas, puesto que estos componentes están diseñados para enlazarse con otros motores, y no solo con MySQL (SQL Server, PostgreSQL, Firebird, ...), y todos ellos son transaccionales.

Saludos.
  • 0

#9 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 abril 2011 - 09:59

Hola tocayo :).

Que va Marc:

Soy incapaz de encontrar nada respecto al commit en ZEOS. y no sé porqué las demás ventanas funcionan y a esta no le dá la gana, snif, snif

Dime,¿ que tal con el DB propio de Lazarus?, usé ZEOS para evitar las transacciones ya que me daban algún problemita con el TSQLTransaction (creo recordar que no había forma de que me dejará cerrar la transacción), soy nuevo en Lazarus, pero no en el mundo de la programación en el que llevo más de 20 años (aunque sigo siendo novato, jeje).  ¿Tienes idea de algún programa que se pueda descargar el fuente y que use DB? Tengo que avanzar con mi proyecto de Gestión Médica en Lazarus ya que lo necesito para mi empresa y luego para regalar-lo a todo quien lo quiera.

Espero tu respuesta, gracias por todo

També salut per tu.

Marc


Parece que las transacciones se manejan desde el ZConnection, como ha apuntado enecumene.

Allí deberías tener la propiedad AutoCommit. Si la tienes a True, te puedes olvidar de las transacciones, y todas las modificaciones se aplicarán al instante a la base de datos. En caso contrario es cuando tienes que iniciar y confirmar manualmente las transacciones, con el método que te ha indicado.

http://zeos.firmos.a...ode=article&k=6

Comprueba cual es la conexión de QFacturasPro, y su propiedad AutoCommit.

Salutacions
  • 0

#10 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 14 abril 2011 - 10:44

Hola tocayo :).

[

Parece que las transacciones se manejan desde el ZConnection, como ha apuntado enecumene.

Allí deberías tener la propiedad AutoCommit. Si la tienes a True, te puedes olvidar de las transacciones, y todas las modificaciones se aplicarán al instante a la base de datos. En caso contrario es cuando tienes que iniciar y confirmar manualmente las transacciones, con el método que te ha indicado.

http://zeos.firmos.a...ode=article&k=6

Comprueba cual es la conexión de QFacturasPro, y su propiedad AutoCommit.

Salutacions

Jod**, El Autocommit de la conexión está a True y QFacturasPro apunta a la conexión correcta no se porqué diablos no chuta bien. Además ayer  por la mañana  cuando lo empecé me funcionaba. He repasado propiedad por propiedad, he borrado los objetos no visuales de conexión y los he vuelto a poner por si se había fastidiado algo, pero nanai de nanai, no le da la P* gana de ir. Y lo que más me fastidia es que será una chorrada de esas que te hacen volver loco y luego solo es que te has dejado una ',' en algún sitio.

O eso o es que algo se ha fastidiado en el formulario, porque sino no me lo explico.

Gracias a todos los que estáis aportando ideas y Salut para Marc jeje.

Marc



  • 0

#11 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 14 abril 2011 - 11:12

Jod**, El Autocommit de la conexión está a True y QFacturasPro apunta a la conexión correcta no se porqué diablos no chuta bien. Además ayer  por la mañana  cuando lo empecé me funcionaba. He repasado propiedad por propiedad, he borrado los objetos no visuales de conexión y los he vuelto a poner por si se había fastidiado algo, pero nanai de nanai, no le da la P* gana de ir. Y lo que más me fastidia es que será una chorrada de esas que te hacen volver loco y luego solo es que te has dejado una ',' en algún sitio.

O eso o es que algo se ha fastidiado en el formulario, porque sino no me lo explico.

Gracias a todos los que estáis aportando ideas y Salut para Marc jeje.

Marc


Si utilizas el motor InnoDB, o cualquier otro del estilo (Falcon, ...), ¿ no tendrás triggers en esa tabla ?.

No sea que desde Lazarus le pasas bien el registro, pero que el trigger lo anule.


  • 0

#12 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 14 abril 2011 - 04:36

Pues toma ya, el colmo de la curiosidad:

El mismo código  y los mismos objetos (cortar y pegar) pero en otro form  funciona perfecto, me dan ganas de hacer esto:  8o|  (Antes de lo de cargarme el PC ya solo me quedaba poner el código en otro form por probar).

Ya veis, a saber que diantres pasa pero no creo que sea culpa de  MySQL ni los tiggers (aun no los he creado - o sea que no los hay) Por cierto para la info de quien pueda leer esto más adelante uso MySQL 5 y el motor InnoDB.

Vamos que parece cosa de brujas. Lo único que varía ahora es que antes había un DBGrid en el Form y ahora en esté que funciona el código no está el DBGrid, sino en el formulario desde el que llamo al form para añadir Facturas. Me gustaba más que todo estuviera en un mismo form, pero.... No se puede tener todo jeje.


No, si lo que no me pase a mi :angel:

Marc Miralles (pongo el apellido para diferenciarme de Marc,) -  para él:(que sino encara hem vindràs a buscar)
  • 0

#13 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 14 abril 2011 - 07:22

Apreciada comunidad:

Tengo el siguiente código en un botón :


delphi
  1. procedure TFProveedores.btnAnadirFacturaClick(Sender: TObject);
  2. begin
  3.   //
  4.   Qfacturaspro.Active:= True;
  5.   QFacturasPro.Append;
  6.   QFacturasPro.FieldByName('id_proveedor').AsInteger :=
  7.       EmpresaActiva.QProveedores.FieldByName('id').AsInteger;
  8.   QFacturasPro.FieldByName('facturanumero').AsString := txtNumFactura.Text;
  9.   QFacturasPro.FieldByName('fechafactura').AsDateTime :=  StrtoDateTime(txtFechaFactura.text);
  10.   QFacturasPro.FieldByName('cif').AsString :=
  11.       EmpresaActiva.QProveedores.FieldByName('cif').AsString;
  12.   QFacturasPro.FieldByName('baseimp1').AsFloat := StrtoFloat(txtBase1.text);
  13.   QFacturasPro.FieldByName('baseimp2').AsFloat := StrtoFloat(txtBase2.text);
  14.   QFacturasPro.FieldByName('baseimp3').AsFloat := StrtoFloat(txtBase3.text);
  15.   QFacturasPro.FieldByName('perc_iva1').AsFloat := StrtoFloat(txtPorcIva1.text);
  16.   QFacturasPro.FieldByName('perc_iva2').AsFloat := StrtoFloat(txtPorcIva2.text);
  17.   QFacturasPro.FieldByName('perc_iva3').AsFloat := StrtoFloat(txtPorcIva3.text);
  18.   QFacturasPro.FieldByName('iva1').AsFloat := StrtoFloat(txtImpIva1.text);
  19.   QFacturasPro.FieldByName('iva2').AsFloat := StrtoFloat(txtImpIva2.text);
  20.   QFacturasPro.FieldByName('iva3').AsFloat := StrtoFloat(txtImpIva3.text);
  21.   QFacturasPro.FieldByName('total1').AsFloat := StrtoFloat(txtParcial1.text);
  22.   QFacturasPro.FieldByName('total2').AsFloat := StrtoFloat(txtParcial2.text);
  23.   QFacturasPro.FieldByName('total3').AsFloat := StrtoFloat(txtParcial3.text);
  24.   QFacturasPro.FieldByName('totalfra').AsFloat:=StrtoFloat(txtTotal.text);
  25.   QFacturasPro.FieldByName('vencimiento').AsDateTime:=strtodate(txtvencimiento.Text);
  26.   QFacturasPro.FieldByName('pagado').AsFloat:=StrtoFloat(txtImpPagado.text);
  27.   QFacturasPro.FieldByName('totalbase').AsFloat:=StrtoFloat(txtTotalBase.Text);
  28.   QFacturasPro.FieldByName('totalIva').AsFloat:=StrtoFloat(txtIVATotal.text);
  29.   QFacturasPro.FieldByName('formapago').AsString:=txtFormaPago.text;
  30.   QFacturasPro.Post;
  31.  
  32.   QFacturasPro.Active :=False;
  33.   QFacturasPro.SQL.Text:='select * from facturaspro where id_proveedor='
  34.   +InttoStr(EmpresaActiva.QProveedores.FieldByName('id').AsInteger);
  35.   QFacturasPro.ExecSQL;
  36.   QFacturasPro.Active = True;
  37.   LimpiarCamposFactura // deja en blanco los campos en el formulario para poder añadir otra factura;                                 



Resulta que no me dá ningún error, sin embargo no me añade el registro, ¿Alguna idea o sugerencia?

Millones de gracias por adelantado.

Marc Miralles



despues de QFacturasPro.Post;
deberia ir esto

QFacturasPro.ExecSQL;
  QFacturasPro.close;


  QFacturasPro.SQL.Text:='select * from facturaspro where id_proveedor='
  +
InttoStr(EmpresaActiva.QProveedores.FieldByName('id').AsInteger);
QFacturasPro.open;
  LimpiarCamposFactura
// deja en blanco los campos en el formulario para poder añadir otra factura;

 

Es bueno que revises si  en zconnection
transactionIsolationlevel  esta en  tiReadCommitted
el    problema es que antes de ejecutar la sentencia estabas haciendo un    select con text  el cual hace un clear y por lo tanto borrabas lo que    habias entrado antes de grabarlo.

eso es lo que me parece a mi, ya que las consultas de accion debes terminarlas con execSQL, pero las de busqueda solo
debes poner open o como hacias ponerlas en  active:=true

revisa para saber si te funciona.

  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 14 abril 2011 - 11:00

Hola

Y sí estás trabajando con la misma base de datos ?, digo, en estas circunstancias, hay que agotar todas las posibilidades.

Por cierto, bienvenido a DelphiAccess,  Marcmiralles

Salud OS

  • 0

#15 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 15 abril 2011 - 03:58

despues de QFacturasPro.Post;
deberia ir esto

QFacturasPro.ExecSQL;
  QFacturasPro.close;


  QFacturasPro.SQL.Text:='select * from facturaspro where id_proveedor='
  +
InttoStr(EmpresaActiva.QProveedores.FieldByName('id').AsInteger);
QFacturasPro.open;
  LimpiarCamposFactura
// deja en blanco los campos en el formulario para poder añadir otra factura;

 

Es bueno que revises si  en zconnection
transactionIsolationlevel  esta en  tiReadCommitted
el    problema es que antes de ejecutar la sentencia estabas haciendo un    select con text  el cual hace un clear y por lo tanto borrabas lo que    habias entrado antes de grabarlo.

eso es lo que me parece a mi, ya que las consultas de accion debes terminarlas con execSQL, pero las de busqueda solo
debes poner open o como hacias ponerlas en  active:=true

revisa para saber si te funciona.

Pues, no tampoco funciona, aunque tu explicación es lógica tampoco funciona. Suerte que desde otro form si que funciona. (que cosas más raras)

Saludos Marc Miralles
  • 0

#16 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 15 abril 2011 - 04:39

Hola Marc Milles, no he trabajado nunca con Zeos ni con MySql, pero me pregunto si el problema puede ser el mismo que en los IbDataSet, que si modificas la tabla en la base de datos y no actualizas los datos de las sentencias SQL (Insertar, borrar, et...), te da error, con lo cual en otra parte del programa  alo mejor no te da error por que esta actualizado, o por llevar sentencias SQL diferentes.

Espero no entrometerme, ya que como digo no tengo ni idea  de estos sistemas
  • 0

#17 Marcmiralles

Marcmiralles

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationEspaña

Escrito 17 abril 2011 - 02:58

Como le pasa a todo en la vida, hay varias formas de resolver un mismo problema; en el caso que nos ocupa he encontrado dos soluciones. (Bueno la primera es más una escapatoria que una solución como tal, pero a mi me sacó del apuro.)

La primera fue como ya indiqué más arriba llamar a otro form y hacer el append desde allí.

La segunda (ya que me ha pasado lo mismo en otro form) ha sido añadir otro TDataSource y otro TZQuery que apunten a la misma tabla mySQL.  pero con otro nombre en este caso QAddLineaTPV ya que QLineaTPV no me hacía el post.

¿No será que al haber un DBGrid que tira de QLineaTPV  éste está ocupado con el grid y por eso no hace el post?

Bueno en cualquier caso añadiendo otros controles de llamada a la BD se soluciona el tema. No se si será que tiene que ser así y yo estaba haciendo el tonto o es que la tontería es la de ahora; bueno, lo que se es que ahora me funciona perfectamente.

Gracias a todos/as los que habeis aportado sugerencias e ideas. (y)

Marc Miralles
  • 0




IP.Board spam blocked by CleanTalk.