![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
DataSource en distinto Form que la tabla
Hola,
Tengo una aplicación en delphi 6, con Interbase 7 y dialecto 3. Tengo todos mis DataSet en un DataModule. El caso es que, del mainForm de mi programa, pulsando un botón, se muestra un nuevo form, form2, que me gestiona una tabla, esto es, nuevos registros, cancelar, aceptar modificaciones.... La tabla en cuestión está en el DataModule del que hablé antes, con todas las demás tablas. Al tratar de asignarle el siguiente código, me daba error si lo ponía directamente en el onStateChange, del DataSource de dicha tabla, estado este dentro del DModule: procedure TFrmDModule.SrcDataSet1StateChange(Sender: TObject); begin if (DataSet1.State = dsInsert) or (DataSet1.State =dsEdit) then begin FrmForm2.BitAceptar.Enabled := True; FrmForm2.BitCancelar.Enabled := True; FrmForm2.BitNew.Enabled := False; FrmForm2.BitBorrar.Enabled := False; FrmForm2.BitSalir.Enabled := False; end else begin FrmForm2.BitAceptar.Enabled := False; FrmForm2.BitCancelar.Enabled := False; FrmForm2.BitNew.Enabled := True; FrmForm2.BitBorrar.Enabled := True; FrmForm2.BitSalir.Enabled := True; end; end; Pero no me da problemas si dicho datasource lo pongo en el Form2, en vez de en el DModule, con este mismo código en OnStateChange. procedure TFrmForm2.SrcDataSet1StateChange(Sender: TObject); begin if (FrmDModule.DataSet1.State = dsInsert) or (FrmDModule.DataSet1.State =dsEdit) then begin BitAceptar.Enabled := True; BitCancelar.Enabled := True; BitNew.Enabled := False; BitBorrar.Enabled := False; BitSalir.Enabled := False; end else begin BitAceptar.Enabled := False; BitCancelar.Enabled := False; BitNew.Enabled := True; BitBorrar.Enabled := True; BitSalir.Enabled := True; end; end; Mis dudas son, 1)¿por que me da error si pongo el datasource en el datamodule, junto a su tabla correspondiente? 2) poniendo así el código, voy a necesitar poner otro datasource en otra parte del programa, refiriendose a esta misma tabla, ¿puedo hacerlo? Muchas gracias por todo de antemano, Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#2
|
||||
|
||||
La verdad es que la forma de preguntar el estado de un Dataset, yo lo hago siempre de una de estas dos formas:
Código:
if Dataset.State in [dsInsert, dsEdit] then .... Código:
if dataset.State in dsEditModes then .... Por otra parte, da igual donde pongas el Datasource o la tabla, siempre y cuando pongas los "uses" correctamente. (En lugar de añadir el uses en el apartado de Implementation, ponlo arriba del todo) Si tienes la tabla en otro lado, y teniendo los uses bien definidos, siempre puedes acceder al dataset de esta forma: Código:
if DataSource.Dataset.State in dsEditModes then.... Un saludo |
#3
|
|||
|
|||
Hola,
Cita:
¿que diferencia hay, de cara al funcionamiento de la aplicación, entre, poner los uses arriba en vez de en el apartado de implementeación? Cita:
Cita:
¿que implica dsEditModes? ¿son todos los estados en los que, de algún modo se "edita" la tabla, o sólo afecta al estado editar? Muchas gracias por la ayuda, Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#4
|
|||||
|
|||||
Cita:
si en la Unit1 pones arriba, uses Unit2. y despues en la Unit2 pones uses Unit1 te dirá que hay referencias circulares, y no te dejará delphi, por tanto, la solución es poner uno de ellos en la parte de implementación. Pero si tienes que poner un Datasource y conectarlo a una tabla que lo tienes en otra unidad, como el Datasource se declara en la zona privada (antes de la implementación) pues necesita saber la unidad donde está la tabla a la que se va a enlazar, Resumiendo: Si el datasource está en el Form2 y la tabla en el datamodule, entonces, pones el uses datamodule arriba Cita:
Cita:
![]() Cita:
Cita:
![]() por cierto.... esto parece un Chat en directo ![]() |
#5
|
|||
|
|||
Hola,
Cita:
![]() Lo dicho, muchas gracias por tu ayuda, me ha sido muy util. Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
![]() |
|
|
![]() |
|