Ver la Versión Completa : Conectar a un DataSet de otro form.
DarkByte
09-09-2004, 15:40:17
¡¡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
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
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
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:
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:
[Error] uUsuarios.pas(90): Undeclared identifier: 'frmLibros'
cadetill
09-09-2004, 18:18:21
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
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
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?
¿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
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.