Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
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á :)
Responder Con Cita
  #2  
Antiguo 14-10-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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 ....
o tambien puedes usar esta otra forma:
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
Responder Con Cita
  #3  
Antiguo 14-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola,

Cita:
...siempre y cuando pongas los "uses" correctamente. (En lugar de añadir el uses en el apartado de Implementation, ponlo arriba del todo)

¿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:
...da igual donde pongas el Datasource o la tabla, ...
Pero, ¿puedo poner más de uno, (DataSource), a una misma tabla o no?



Cita:
if dataset.State in dsEditModes then ....
¿que diferencia hay entre esto y lo que yo tengo?

¿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á :)
Responder Con Cita
  #4  
Antiguo 14-10-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Posteado originalmente por Giniromero

¿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?
Ninguno.
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:
Posteado originalmente por Giniromero
Pero, ¿puedo poner más de uno, (DataSource), a una misma tabla o no?
Si pero ojo con lo que haces, porque los dos apuntan a la misma tabla, si en uno estas insertando o editando... en el otro también, lógicamente. Y los dos Datasource apuntaran al mismo Registro siempre.

Cita:
Posteado originalmente por Giniromero
¿que diferencia hay entre esto y lo que yo tengo?
Código:
if dataset.State in dsEditModes then ....
tu usas dos condiciones en el if y yo una, lo cual indica que yo soy más vago que tú

Cita:
Posteado originalmente por Giniromero
¿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?
dsEditModes es que la tabla está en modo Insercion o en modo Edición, es simplemente una abreviatura. Eficiencia creo que es la misma (no he mirado los fuentes) pero desde luego es más cómodo ¿no?
Cita:
Posteado originalmente por Giniromero
Muchas gracias por la ayuda,
Es un placer poder devolver la ayuda que me han prestado a mí
por cierto.... esto parece un Chat en directo
Responder Con Cita
  #5  
Antiguo 14-10-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 22
Giniromero Va por buen camino
Hola,


Cita:
por cierto.... esto parece un Chat en directo
Si lo dices por la rapidéz de respuesta, estoy de acuerdo.



Lo dicho, muchas gracias por tu ayuda, me ha sido muy util.

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:20:40.


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
Copyright 1996-2007 Club Delphi