FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
ClientDataset no inserta registros si sistema tarda en inactividad
Hola, disculpen si es muy largo el titulo del hilo.
Tengo algo muy raro en un sistema que ya esta en funcionamiento desde hace algunos meses y aunque así estan trabajando los usuarios, obviamente no es lo mas optimo como se daran cuenta. El escenario es: Delphi 6 Firebird 2.1 ClientDataset Objetos de Interbase para conexion Windows XP Profesional SP3 El asunto es que una tabla que es detalle se "bloquea" y no acepta inserciones si el usuario a durado 5 o mas minutos sin usar el programa. La tabla maestra se llama Contratos y esta a su vez tiene como tablas de detalles a ObjetosEmpeñados, Intereses, Abonos y Aumentos. En la capa de acceso a datos uso IBQuery y con ellos establezco la relacion Maestro/Detalle con la propiedad DataSource de las tablas detalles. Posteriormente en la capa donde van todos los DatasetProvider y ClientDataset conecto las tablas de detalles usando la capacidad de ClientDataset de usar datos anidados con los FieldDataSet. Todas las tablas de detalle funcionan bien todo el tiempo, y también todas las demas tablas de la base de datos trabajan y responden al momento, pero en el caso de una tabla detalle (ObjetosEmpeñados), al ejecutar la instruccion:
Los controles DataAware no responden, no permite al operario escribir nada, pero si cancela la alta presionando el respectivo boton para cancelar la alta, ahora si deja insertar los detalles. Ya revise todo lo que se me ha ocurrido, como la configuracion de los campos(providerFalgs) pero no mas no. Es muy raro el comportamiento, y ya no se me ocurre que mas verificar. Espero haberme explicado y si alguien puede echarme una mano, seran bienvenidas las observaciones. Gracias de antemano
__________________
Salu2 |
#2
|
||||
|
||||
Cita:
Creo que hay que precisar los detalles del caso para que podamos comprender mejor lo que está sucediendo. Saludos. |
#3
|
|||
|
|||
Cita:
Cuando se da de alta en la tabla maestra un nuevo registro, el sistema tiene un candado de que el usuario no puede meter registro detalles, a menos que ya haya guardado por lo menos una vez la cabecera. El procedimiento habitual es: 1.- Usuario presiona botón "Alta de contrato" 2.- Especifica el monto que se prestara al cliente. 3.- Presiona botón "Guardar contrato" (El sistema hace commit, para obtener la clave maestra que servirá como clave foránea con la tabla detalle) 4.- Usuario presiona botón "Insertar objeto a empeñar" [FONT='Calibri','sans-serif'](Hasta aquí siempre va bien)[/font] [FONT='Calibri','sans-serif']5.-[/font][FONT='Calibri','sans-serif'] Se pone el foco en el primer BDEdit que debe almacenar la información del detalle del contrato. [/font][FONT='Calibri','sans-serif'](Aquí es donde a veces falla cuando tiene un ratito el sistema en inactividad)[/font] 6.- Si no se puede poner nada de información en los controles DataAware, el usuario presiona “Cancelar alta de objeto a empeñar”, y después debe presionar otro botón que dice “Deshacer alta del contrato” para que se cancele el alta del nuevo empeño, ese botón, lo que hace es eliminar el nuevo registro que se dio de alta en la tabla que es cabecera (Contratos), para que después el usuario vuelva a presionar el botón “Alta de contrato” o en otras palabras vuelva a iniciar en el paso 1 de este proceimiento. Espero haber respondido dudas.
__________________
Salu2 |
#4
|
||||
|
||||
Cita:
Por otra parte, considera asignar la llave maestra desde que inicia la captura, no importando si el registro termina siendo guardado o no por parte del usuario. Aquí encontrarás varios temas sobre las ventajas de usar esta técnica y lo irrelevante que es el valor que tenga dicha llave (consecutiva o con "huecos") mientras cumpla la indispensable condición de ser única dentro de la tabla (llaves primarias artificiales). También toma en cuenta que una de las ventajas de los conjuntos de datos anidados es poder enviar de un golpe todo el paquete (registro maestro y detalles) a la base de datos. Me resulta un poco extraño que el usuario deba guardar el maestro para luego permitirle capturar los detalles. Saludos. |
#5
|
|||
|
|||
Cita:
1.- Alta del contrato:
2.- Guardar el nuevo contrato:
3.- Una vez guardando el registro maestro, es decir, el contrato se procede a insertar las lineas de detalle del contrato por medio de un boton para agregar registros, con el siguiente codigo:
Aunque se presiona el boton anterior, en ocasiones no se pueden insertar registros al detalle del contrato, por lo que se debe de presionar el boton Dehacer alta de contrato para que se elimine el registro que se genero en la cabecera, volver a insertar un nuevo registro en la cabecera y ahora si es posible añadir registros en el detalle, espero no haberte confundido mas. Saludos Al.
__________________
Salu2 Última edición por Tcmn fecha: 30-03-2012 a las 18:26:58. Razón: Olvide poner etiqueta de codigo Delphi a una seccion del mensaje |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Insercción de registros en clientdataset | briast | Conexión con bases de datos | 9 | 30-05-2017 17:18:23 |
Ordenar registros con ClientDataSet | Jose Roman | Conexión con bases de datos | 2 | 15-01-2010 22:11:27 |
Inserta Registros maestro/detalle | Vlady | Firebird e Interbase | 2 | 28-10-2006 04:35:48 |
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql | Arturo | MySQL | 3 | 05-09-2006 18:39:37 |
|