Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Post Con Demora (https://www.clubdelphi.com/foros/showthread.php?t=73590)

jerry_mdq 03-05-2011 18:13:44

Post Con Demora
 
Hola... Tengo una grilla que toma los datos de un Query. Al hacer Post luego de modificar los datos no encuentro la forma (Cambiando SQL del query, cerrando, refrescansdo, etc) que me muestre los cambios. Salvo que le ponga un Timer y espere 1200 y ahi si. Es como que no termina de grabar a disco los datos del registro. Alguna solución ??? Gracias.

Caral 03-05-2011 19:00:38

Hola
Query1.close, query1.open, es lo logico.
No indicas que BD usas.
Saludos

oscarac 03-05-2011 19:04:32

que base de datos estas usando
cuanta informacion esta grabando
que metodo estas usando para grabar
algo de codigo no vendria mal

afxe 03-05-2011 19:05:28

Qué utilizas? Firebird, Access, Paradox, tablas planas?.

Después del Post, prueba a hacer un CLOSE y un OPEN del Query, si aparecen reflejado las modificaciones realizadas es que el Query tiene cargada la consulta y no la refresca hasta que no se cierre y re-abra. En ese caso te recomiendo que trabajes en modo caché, o con ClientDataSet, o que cierres y abras la tabla tras cada posteo o delete reposicionándote en el registro... pero una respuesta más acertada dependerá de que sepamos qué tipo de datos manejas.

Saludos.

afxe 03-05-2011 19:07:18

Ups... tengo que ser más rápido
 
Vaya... parece que la gente desenfunda rápido... ya han contestado 2 mientras yo escribía mi mensaje...

jerry_mdq 03-05-2011 19:25:52

Respuesta
 
Es verdad. No di detalles del codigo.
El tema es que edito el registro que modifico. Luego pongo

Tabla.Post;

y la grilla no se me refresca. No se que mas datos poner. La base es de Access.

Gracias.

Caral 03-05-2011 19:38:20

Hola
Dices que pones table.post, pero dices que el dbgrid esta enlazado a un query.
Me parece un master detaill, pero solo creo.
No te explicas bien.
Saludos

jerry_mdq 03-05-2011 19:51:10

Problemas con grabacion
 
Mirá... Es Asi. Una Grilla me refleja con un select en la opcion SQL y me muestra los datos. Luego, segun el registro que este parado yo con un numero interno edito en una Tabla aparte y las modificaciones las grabo con POST. Luego al query que maneja la grilla, lo cerre, le cambie el select, lo activo y desactivo, etc. y me sigue mostrando el registro sin cambios. Ahora, si le pongo un timer en 1200 aprox, y luego de eso corro un refresco del query si se ven los cambios. Espero respuestas. Gracias.

Caral 03-05-2011 19:52:59

Hola
Copia y pega aqui el codigo que estas usando en todo este proceso.
A ver donde esta el asunto.
Saludos

jerry_mdq 03-05-2011 19:55:48

Tabla.Edit;
Tabla.FieldValues['Fecha'] := DbFecha.Text;
Tabla.FieldValues['Tipo'] := DbTipo.Text;
Tabla.FieldValues['Num_Sanitario'] := DbNum_Sanitario.Text;
Tabla.FieldValues['Num_Especie'] := ListaEspecies.KeyValue;
Tabla.FieldValues['Num_Producto'] := ListaProductos.KeyValue;
Tabla.FieldValues['Cajas'] := DbCajas.Text;
Tabla.FieldValues['Kilos_Netos'] := DbKilos_Netos.Text;

Tabla.Post;

{RefreshClick(NIL);

Timer.Enabled := True;}
Query.Close;
Query.Open;

Donde Query es de la grilla

Gracias

Caral 03-05-2011 20:03:50

Hola
Bueno:
1- Nunca he usado filevalues, no se el efecto que hara.
2- como defines que el campo que editaste de la tabla corresponde a alguno del dbgrid.
3- Estas seguro que la tabla apunta a la tabla de la BD que ve el query?.
No le veo gran cosa al codigo, solo por confirmacion yo cerraria la tabla despues del post, a ver que pasa.
Tabla.post;
Tabla.close;.
Saludos

oscarac 03-05-2011 20:14:49

Solo por curiosidad
porque usas un query? y no usas la tabla... o es que estas mostrando solo algunos registros (los que determinas con el query) de la tabla

Caral 03-05-2011 20:29:13

Hola
Cita:

Empezado por oscarac (Mensaje 398764)
Solo por curiosidad
porque usas un query? y no usas la tabla... o es que estas mostrando solo algunos registros (los que determinas con el query) de la tabla

Hombre, que curioso eres, recuerda que la curiosidad mato al gato.:D:D:D
Saludos

jerry_mdq 04-05-2011 16:06:11

Hola, Uso Query porque muestro en la grilla valores de un dia determinado y aparte se combina con otras tablas. Es la mejor forma que encontre.
Te cuento que la grabacion me funciono con cerrar la tabla. Ahora me pasa como antes pero para borrar como ves en el codigo. Que hago ? Hice lo mismo y ahora me tarda en mostrar la eliminación...



begin
Tabla.TableName := 'Salidas';
Tabla.Filter := 'Contador = ' + inttostr(Query.FieldValues['Contador']);
Tabla.Active := True;
Tabla.Delete;
Tabla.Close;

Query.Close;
Query.Open;
end;

oscarac 04-05-2011 16:14:46

mmmm
corrigeme si me equivoco...
tu capturas informacion de un determinado dia o dias la muestras en una grilla y luego puedes eliminar, modificar, agregar mas registros verdad?

porque no haces el proceso de "actualizacion" al salir de la grilla?, eliminando primero los datos en la tabla original y luego simplemente grabas todo lo que te "queda" en el query que se muestra en la grilla :rolleyes:

oscarac 04-05-2011 16:15:18

Cita:

Empezado por Caral (Mensaje 398767)
Hola

Hombre, que curioso eres, recuerda que la curiosidad mato al gato.:D:D:D
Saludos

tengo 7 vidas.... bueno ya me quedan como 4...;)

jerry_mdq 04-05-2011 16:34:25

El tema es asi: La grilla se relaciona con un query que tiene el select correcto, y de esa grilla yo saco el numero de registro del query de la grilla para buscar en una tabla y elimino con ese contador. El tema ahora es que con Post y close empezo a funcionar. Pero con Delete no. Se entiende lo que hago ?
La Grabación quedo asi.


Grilla.Height := 318;
BtnAgregar.Visible := true;
BtnModificar.visible := true;
BtnGrabar.visible := false;
BtnCancelar.visible := false;
Tabla.TableName := 'Salidas';
Tabla.Filter := 'Contador = ' + inttostr(Query.FieldValues['Contador']);
Tabla.Active := True;
Tabla.Edit;
Tabla.FieldValues['Fecha'] := DbFecha.Text;
Tabla.FieldValues['Tipo'] := DbTipo.Text;
Tabla.FieldValues['Num_Sanitario'] := DbNum_Sanitario.Text;
Tabla.FieldValues['Num_Especie'] := ListaEspecies.KeyValue;
Tabla.FieldValues['Num_Producto'] := ListaProductos.KeyValue;
Tabla.FieldValues['Cajas'] := DbCajas.Text;
Tabla.FieldValues['Kilos_Netos'] := DbKilos_Netos.Text;
Tabla.Post;
Tabla.Close;
If BtnMostrar.Caption = 'Salidas' Then
Begin
DbFecha.Visible := False;
DbTipo.Visible := False;
DbNum_Sanitario.Visible := False;
ListaEspecies.Visible := False;
ListaProductos.Visible := False;
DbCajas.Visible := False;
DbKilos_Netos.Visible := False;
End;
Query.Close;
Query.Open;



Y la eliminación asi:


if MessageDlg('Desea Eliminar el Registro ???', mtConfirmation, [mbyes, mbno], 0) = mrYes then
Begin
Tabla.TableName := 'Salidas';
Tabla.Filter := 'Contador = ' + inttostr(Query.FieldValues['Contador']);
Tabla.Active := True;
Tabla.Delete;
ShowMessage('El Registro ha sido Eliminado');
Tabla.Filter := '';
Tabla.Close;

Query.Close;
Query.Open;
End;

end;


Que hago mal para que la grabación la tome y la eliminación no... pero si me cambio de dia y vuelvo si. o si refresco a ls 2 segundos tambien.

oscarac 04-05-2011 16:45:59

sabes que se me ocurre

veo que haces un filtro a la base de datos por el numero de contador... no crees que al tener una base de datoas cada dia mas grande.. el filtro de una u otra manera demora?

lo que te recomiendo es buscar el codigo y hacerle el delete

Código Delphi [-]
 
if MessageDlg('Desea Eliminar el Registro ???', mtConfirmation, [mbyes, mbno], 0) = mrYes then
Begin
  Tabla.TableName := 'Salidas';
  Tabla.locate ('Contador', inttostr(Query.FieldValues['Contador'], []);
  Tabla.Delete;
  ShowMessage('El Registro ha sido Eliminado');
  Query.Close;
  Query.Open;
End;

esto funcionaria mucho mas rapido que un filtro

jerry_mdq 04-05-2011 17:07:56

Mirá, el tema es que ahora en la edicion con post y close lo toma perfecto, pero con delete no, si no espero 1 segundo no refresca...

oscarac 04-05-2011 17:12:00

has leido lo que te puse?

jerry_mdq 04-05-2011 17:22:21

Si, pero pongo eso y no borra nada, como que no lo encuentra... puede ser ?

jerry_mdq 04-05-2011 17:25:01

Tenes messenger asi hablamos mas fluido ?

jerry_mdq 04-05-2011 17:26:32

Tenes algun chat ?

oscarac 04-05-2011 17:26:46

entonces verifica si el dato lo encuentra en la base de datos

Código Delphi [-]
 
if locate...... then
  begin
    ....
    ...
  End
Else
 .... registro no encontrado

Caral 04-05-2011 17:28:51

Hola
Es un poco ilógico hacer uso de un query para mostrar y un table para borrar, editar etc.
Lo logico es hacerlo todo con querys, es mas eficiente, mas rapido, mejor.
Saludos

oscarac 04-05-2011 17:30:46

no mencionaste que conexion esas usando
ADO ? BDE ?

Caral 04-05-2011 17:33:12

Hola
Creo que con 10 respuestas ya se puede colocar el programa y la BD en un zip y ponerlo aqui.
Asi seria mucho mas sencillo ver todo esto.
Saludos

afxe 04-05-2011 23:26:45

Otra cosa que no viene al cuento de nada... dices que tras hacer una espera de 1200 ya te funciona bien, pero en el código veo que haces la espera activando un timer a True. Pues bien... eso no hace una espera, para realizar una espera se usa sleep(1200), por lo cual no es cuestión de tiempo (a no ser que en el evento OnTimer hagas un Close y un Open)...

Bueno, ya sé que no aporto nada a la solución del problema... pero es para que nadie que lea este hilo intente hacer una espera usando timers.

Saludos.

jerry_mdq 05-05-2011 16:20:54

CARAL, donde quedamos ? Queres que ye mande una copia con el codigo y la base ? asi lo analizas ? Pasame un mail y te lo mando...

oscarac 05-05-2011 16:35:07

Grabalo en el FTP mete la base de datos de access tambien para revisarlo

jerry_mdq 05-05-2011 17:15:18

Ahi lo mande EXE.ZIP Si pones la bese Ejemplo.mdb en el C:\ deberia funcionar sin que toques nada mas. Saludos y proba eliminar y modificar... el resto no funciona aun. Gracias

oscarac 05-05-2011 17:28:00

lo primero que te recomiendo es que uses DataModule, asi no tendras que colocar la cadena de conexion en los querys..

esta saliendo mensajes de error
Cita:

First chance exception at $7C812AFB. Exception class EDatabaseError with message 'QueryRubros: Field 'Num_Rubro' not found'. Process Ejemplo.exe (4896)

jerry_mdq 05-05-2011 17:29:50

Fijate los ADO no deben estar activos
No los active en el codigo, sino en el diseño. Sorry. Cambia eso, proba y me decis, y si todo va bien me contas como funciona lo que me dijiste.

Caral 05-05-2011 19:03:32

Hola
Encontrar el programa es un reto o que???.
Donde esta?, he revisado el ftp y no lo veo, un link seria bueno.
Saludos

Casimiro Notevi 05-05-2011 19:50:37

¿Ese archivo seguramente es EXE.zip?, creo que ha sido borrado del servidor, estaba en el directorio raiz, dentro tiene un ejecutable, en fin, no es lo más idóneo.
Recomiendo que lo subas de nuevo y lo pongas en el directorio "Varios", además saca el ejecutable de dentro y le pones un nombre más idóneo, por ejemplo: pruebas_usuario_jerry_mdq.zip

Caral 05-05-2011 19:53:56

Hola
jerry_mdq tiene ya 13 mensajes, no lo puede adjuntar aqui mismo?.
Saludos


La franja horaria es GMT +2. Ahora son las 19:36:01.

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