Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Conectar a un DataSet de otro form. (https://www.clubdelphi.com/foros/showthread.php?t=14097)

DarkByte 09-09-2004 15:40:17

Conectar a un DataSet de otro form.
 
¡¡Saludos!!: :rolleyes:

Estoy haciendo un programilla de bases de datos, en especial para una biblioteca. Tengo un form para "asignar" un libro a una persona, que es cuando lo coge prestado. El caso es que quiero que en ese form se me muestre, en un DBComboBox, todos los libros disponibles (La columna Título de la tabla TblLibros, que tiene como dataset dsLibros).

Bien, cómo no podía poner el Dataset directamente desde el form para coger libros aún añadiendo las uses, he puesto el siguiente código cuando lo llamo

Código Delphi [-]
procedure TfrmUsuarios.sbCogerLibroClick(Sender: TObject);
begin
  If eNombre.Text = '' Then
  begin
    ShowMessage('Debe de seleccionar un miembro al que añadir el libro');
    Abort;
  end
  Else
  begin
    frmCogerLibro := TfrmCogerLibro.Create(Self);
    frmCogerLibro.eLibro.DataSource := frmPrincipal.frmLibros1.dsLibros;
    frmCogerLibro.eLibro.DataField := 'Titulo';
    frmCogerLibro.ShowModal;
    frmCogerLibro.Free;
  end;
end;

Sin embargo, tampoco me funciona. ¿Cómo podría hacer lo que me propongo?.


Gracias, simplemente, por aguantarme :rolleyes: :p

marcoszorrilla 09-09-2004 16:09:54

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
begin
DbEdit1.DataSource:=Form1.DataSource1;
DbEdit1.DataField:='Addr1';
end;

Mira a ver esta línea me parece que no es correcta:
frmCogerLibro.eLibro.DataSource := frmPrincipal.frmLibros1.dsLibros;

Si el Dataset esta en frmPrincipal, sobraría la alusión a libros.

Un Saludo.

DarkByte 09-09-2004 17:23:43

Lo siento marcos, pero no comprendo lo que me quieres decir, y eso que lo has dicho lo más simple del mundo entero.

Aclaro más la situación, por si las moscas: El botón para llamar al nuevo form (para "asignar" un libro) está en un frame incrustado en el form principal.

roman 09-09-2004 17:30:14

Cita:

Empezado por DarkByte
Lo siento marcos, pero no comprendo lo que me quieres decir, y eso que lo has dicho lo más simple del mundo entero.

O sea, la pregunta es, ¿siquiera te compila el código?

Es que guiándonos por la nomeclatura de tus objetos, la línea a la que Marcos hace referencia:


Código Delphi [-]
frmCogerLibro.eLibro.DataSource := frmPrincipal.frmLibros1.dsLibros;
no tiene sentido a menos que el formulario frmLibros esté contenido en el formulario frmPrincipal, cosa posible pero poco probable.

// Saludos

DarkByte 09-09-2004 18:08:27

Es que es así ;) frmLibros está dentro de frmPrincipal, para llamarlo desde el form principal, pues si no me abofetea con un:

Código:

[Error] uUsuarios.pas(90): Undeclared identifier: 'frmLibros'

__cadetill 09-09-2004 18:18:21

Cita:

Empezado por DarkByte
Es que es así ;) frmLibros está dentro de frmPrincipal, para llamarlo desde el form principal....

Cuando dices "dentro" te refieres a que el Parent es frmPrincipal?? :confused:

Porque, a ver, se puede hacer, pero.......... como dice Román no es muy normal hacerlo (para eso están los frames y otros contenedores)

roman 09-09-2004 18:32:41

Volvamos al inicio

Cita:

Empezado por DarkByte
Bien, cómo no podía poner el Dataset directamente desde el form para coger libros aún añadiendo las uses, he puesto el siguiente código cuando lo llamo

¿Cómo está esto? Un DataSource puedes enlazarlo a cualquier DataSet del proyecto. Eso sí, para hacerlo durante el diseño es necesario tener abierto el formulario que contiene al DataSet.

// Saludos

DarkByte 09-09-2004 21:06:05

El dataset está en un frame, el frame está "incrustado" en el form principal.

roman 09-09-2004 21:35:29

Cita:

Empezado por DarkByte
El dataset está en un frame

¿Y por qué no dijiste esto desde el principio? Sabíamos que el botón estaba en el frame pero no el dataset.

Ya he probado con una estructura similar a la que tienes y funciona bien (que conste que hasta ahora no has dicho qué es lo que no funciona bien). Lo único que se me ocurre es que no tengas enlazado el DataSource al DataSet o bien que en diseño estés activando el DataSet incorrecto, es decir el del Frame externo y no el del incrustado en el formulario.

// Saludos

pd: ¿Para qué pones los DataSource y DataSets en un frame?

DarkByte 09-09-2004 22:05:08

Pues lo que no me funciona bien es que me aparece el DBComboBox vacío :(.

Y los pongo en un frame porqué pense que al agregarlos sería como si fuese contenido del form.. pero me equivoqué.

roman 09-09-2004 22:13:08

Pues ya te dije, debe funcionar así.

Asegurate de que en el frame incrustado el DataSety el DataSource sigan enlazados. Si en algún momento los desconectaste en la ejecución seguirán desconectados aun cuando en el frame externo sigan conectados.

De cualquier forma sí creo que hay algo un poco errado en el diseño. A menos que el dataset lo utilices solo en un lugar, por lo general será más práctico que coloques tus dataset en un data module y los datasource junto con los controles dbaware.

// Saludos

DarkByte 10-09-2004 13:00:44

mmm.¿Estoy a tiempo de moverlo todo a un datamodule? :D. Otra cosa... datamodule no era de BDE?

weke 10-09-2004 13:14:29

¿Qué base de datos utilizas? Yo estoy utilizando el DataModule con una base de datos mysql. No creo que haya ningún problema.
Saludos.

marcoszorrilla 10-09-2004 14:54:06

Puedes utilizar los datamodulos con cualquier base de datos, yo los utilizo con Access, Firebird, Paradox......


Un Saludo.

roman 10-09-2004 16:26:00

Pues sí. Un DataModule prácticamente no difiere de una unidad plana excepto por proporcionar una superficie para poner componenes no visuales durante el diseño.

// Saludos

DarkByte 10-09-2004 16:27:58

Tema solucionado: Colé ya el datamodule y cambié toda la aplicación con éxito ;).

Muchísimas gracias a todos


La franja horaria es GMT +2. Ahora son las 03:17:32.

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