Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   DBlookupcombobox o dbcombobox (https://www.clubdelphi.com/foros/showthread.php?t=21763)

el_barto 26-05-2005 23:15:32

DBlookupcombobox o dbcombobox
 
tengo una lista de proveedores y quiero mostrarla en mi form con un dbcombobox o con un dblookupcombobox pero cada vez que intento asignarle valores de mi tabla proveedores el campo nom_proveedor no me aparece nada, cuales son los pasos para asignarle valores de mi base de datos a combos

droguerman 26-05-2005 23:27:24

en el caso de un dblookupcombobox necesitas un datasource (digamos dsProveedor) el cual apunta a un dataset con datos (digamos dataProveedor)

haces que la propiedad listsource de tu dblookup apunte a dsProveedor

en listField indicas que campo se mostrará en la lista por ejemplo el campo nombre este valor solo sirve para mostrar al usuario

en keyField indicas que campo contiene el valor interno del dblookup por ejemplo podria ser codProveedor, este valor será el que se guarde en la tabla de tu BD, (puedes obtener el valor que actualmente está seleccionado usando la propiedad keyValue).

y eso es todo, obviamente que si quieres que el valor se guarde directamente en tu BD tienes que asignar datasource y datafield hacia la tabla y campo destino respectivamente pero esto se debe de hacer con otro dataset/datasource.

roman 26-05-2005 23:29:25

Usa un DBLookupComboBox con los siguientes ajustes:

ListSource <-- tabla de proveedores
ListField <-- campo nom_provedor
KeyField <-- cod_proveedor

Si ademas quieres usar el combo para editar la llave foránea correspondiente en otra tabla entonces

DataSource <-- la otra tabla
DataField <-- la llave foránea en la otra tabla

EDITO

¡Ups! Me ganaron por dos minutos :)

// Saludos

el_barto 26-05-2005 23:46:28

combobox
 
jeje, gracias ya logre que me muestre en un combo los nombres de mis proveedores, si yo quisiera que cuando pique en uno de esos nombres me listara en una grilla todos los que corresponden por ejemplo: compaq que tendria que hacer

roman 27-05-2005 00:57:52

Puedes poner la tabla de proveedores como MasterSource de la otra tabla. En esa otra tabla tendrías que tener un índice para la llave foránea.

// Saludos

el_barto 27-05-2005 18:10:51

Ehhh no entiendo mucho el concepto MasterSource, yo tengo mi combobox direccionado para que solo me muestre los nombres de lo proveedores, osea que cuando yo pico en un nombre no pasa nada,, lo que quiero es que cuando yo pique en un nombre de mi combo por ejemplo compaq, en una grilla me liste la informacion almacenada de este unico proveedor. eso es muy comun lo he visto pero no tengo ni idea de como hacerlo

roman 27-05-2005 20:50:17

Cita:

Empezado por el_barto
Ehhh no entiendo mucho el concepto MasterSource

¡Pues a ponerse las pilas! Esto es esencial si vas a manejar bases de datos relacionales.

Vamos a suponer que tienes tus tablas

proveedores = (id, nombre, otros campos)
productos = (id, proveedor_id, nombre, otros campos)

Estas dos tablas están relacionadas mediante las llaves:

proveedores.id <--> productos.proveedor.id

en una relación 1 a muchos (cada producto es de un único proveedor y cada proveedor puede tener muchos productos).

Si tú filtras la tabla de productos por un proveedor obtendrás todos los productos de ese proveedor.

En Delphi, estas relaciones se establecen entre dos dataset asociados a las tablas físicas mediante las propiedades MasterSource y MasterFields de la tabla que quieres filtrar.

Así, si tblProductos y tblProveedores son componentes Table asociadas a las tablas productos y proveedores respectivamente y dsrProductos y dsrProveedores son datasource enlazados a ellas, entonces tienes que poner

tblProductos.MasterSource := dsrProveedores

En el inspector de objetos, una vez hecho esto, das doble click sobre la propiedad MasterFields de tblProductos y en la ventana que aparece especificas los campos que hacen la relación en la tabla maestra (proveedores) y la tabla "fuente" o "esclava" (productos).

Normalmente, para poder hacer esto deberás haber definido un índice sobre la llave foránea (proveedor_id) en la tabla esclava.

Con esto, la tabla productos se filtra en automático cada vez que seleccionas un proveedor por lo que al seleccionarlo en el combo, el grid sin más nada mostrará sólo los productos de ese proveedor.

// Saludos

dmagui 27-05-2005 21:14:38

a mi me interesa este tema pero no entiendo para nada cuando dices que
""Así, si tblProductos y tblProveedores son componentes Table asociadas a las tablas productos y proveedores respectivamente y dsrProductos y dsrProveedores son datasource enlazados a ellas, entonces tienes que poner

tblProductos.MasterSource := dsrProveedores""
yo tengo creado un dbdatabase un dbtransaction dos dataset y un datasource, una grilla y un dblookupcombobox, no se como relacionar ese prefijo "tbl" es otro control o que es eso.

roman 27-05-2005 21:37:58

Cita:

Empezado por dmagui
a mi me interesa este tema pero no entiendo para nada cuando dices que
""Así, si tblProductos y tblProveedores son componentes Table asociadas a las tablas productos y proveedores respectivamente y dsrProductos y dsrProveedores son datasource enlazados a ellas, entonces tienes que poner

tblProductos.MasterSource := dsrProveedores""
yo tengo creado un dbdatabase un dbtransaction dos dataset y un datasource, una grilla y un dblookupcombobox, no se como relacionar ese prefijo "tbl" es otro control o que es eso.


Una componente Table es un dataset.

// Saludos

dmagui 27-05-2005 21:53:29

ahhh pero la instruccion tblProductos.MasterSource := dsrProveedores donde la uso y como en el dataset en donde en selectsql o donde???

el_barto 27-05-2005 22:59:12

Oye no, no se si fue que no entendi pero no nada me sale tblproductos y tblproveedores son table cada uno, listo cree los table pero no se como relacionarlos a mi tabla, no se a que dataset deben estar relacionados estos datasource y no se que sentencias sql debe llevar estos dataset, la instruccion ""tblProductos.MasterSource := dsrProveedores" no se en donde colocarla
En conclucion estoy mas perdido que quien sabe que, y necesito de tu ayuda y de tu paciencia para que esto me salga bien y antetodo gracias

droguerman 27-05-2005 23:01:32

Cita:

ahhh pero la instruccion tblProductos.MasterSource := dsrProveedores donde la uso y como en el dataset en donde en selectsql o donde???
la propiedad masterSource (la cual está en el inspector de objetos) debe apuntar a un datasource que a su vez apunte a un Table de Proveedores

tblProductos.masterSource ----> dsrProveedores ----> tblProveedores

pero se debe especificar los campos que relacionan ambas tablas, esto se hace con la propiedad masterFields, solo es cuestión de probar

roman 27-05-2005 23:13:19

¿el_barto = dmagui?

:confused:

¿estamos ante un caso de doble personalidad?

:D

el_barto 27-05-2005 23:14:53

Siiii sisisi entiendo pero este tblproveedores debe apuntar a que datasource o a donde??? gracias

el_barto 27-05-2005 23:20:51

dmagui???? veo que tiene el mismo inconveniente pero ni idea quien es, yo tengo otro usuario que es bartolomeo pero nunca me acorde de la clave, Influye en algo????

roman 27-05-2005 23:25:18

Cita:

Empezado por el_barto
Influye en algo????

No, claro que no, no hay ningún problema. Es sólo que me llamó la atención ya que ambos marcan la misma IP de origen.

// Saludos

el_barto 27-05-2005 23:29:46

Trabajo en una empresa grande y habemos 16 personas haciendo modelos de esta base pudo ser cualquiera, si te moleste en algo disculpame solo quiero hacer bien esto, dado que de esto depende mi practica empresarial y por ende mi proyecto de grado

roman 27-05-2005 23:35:25

Cita:

Empezado por el_barto
si te moleste en algo disculpame

No, no. Soy yo quien te pide disculpas. En ningún momento mi intención fue la de un reclamo- no hay nada que reclamar, ni me molesta, ni nada. Fue sólo curiosidad. (Bien dicen que la curiosidad mató al gato.. :confused: :D )

Por mi parte como si nada hubiera pasado.

// Saludos

el_barto 27-05-2005 23:43:06

Ahhh bueno, igual voy a preguntar mas tarde, pero si me puedes ayudar???, estoy por irme a la u, te recomiendo si me puedes ayudar con esto o si me puedes recomendar algun tutorial, manual curso o algo didactico sencillo de entender debido a mi novatada, para aclarar esta duda gracias

droguerman 28-05-2005 04:38:48

Cita:

Empezado por el_barto
Siiii sisisi entiendo pero este tblproveedores debe apuntar a que datasource o a donde??? gracias

proveedores no apunta a nada, es tblProducto el que apunta a proveedores, mediante masterSource y masterFields

Lepe 28-05-2005 14:56:25

Retomando la pregunta inicial, creo conveniente aclarar los nombres de cada cosa antes de continuar:

tblProductos, se le pone las 3 primeras letras como abreviatura de TTable y logicamente es la tabla de productos

dsProductos, es un DataSource que su propiedad Dataset está apuntando a tblProductos

tblProveedor y dsProveedor, serán: la tabla y el Datasource de Proveedores respectivamente.

La famosa asignación:
tblProductos.MasterSource := dsProveedor

Es simplemente, seleccionar la tabla productos, ir al inspector de objetos, y en la propiedad MasterSource, seleccionar dsProveedor (datasource Proveedor)

Queda el párrafo de Roman para asociar los campos
Cita:

Empezado por roman

En el inspector de objetos, una vez hecho esto, das doble click sobre la propiedad MasterFields de tblProductos y en la ventana que aparece especificas los campos que hacen la relación en la tabla maestra (proveedores) y la tabla "fuente" o "esclava" (productos).

Hecho esto, para comprender el funcionamiento, pon un grid asociado a tblProductos.

Cuando se necesite mostrar los productos en el grid, irá a sacar los datos del tblProductos.MasterSource, y como eso está precisamente apuntando a dsProveedor, buscará todos los productos del proveedor activo (el que tengas seleccionado en el combo).

Un saludo

el_barto 31-05-2005 16:02:38

Mira que al igual me presenta un problema, en el inspector de objetos del tblproductos selecciono como mastersource selecciono como DatabaseName a Dbdemos que es el nombre de mi base pero cuando selecciono masterfields no me lo permite me sale un mensaje ""missingTablename property"" entonces deduje que en tablename debe ir un nombre pero no se cual.

roman 31-05-2005 16:29:54

Cita:

Empezado por el_barto
entonces deduje que en tablename debe ir un nombre pero no se cual.

Esto sí que es grave. Si tú no lo sabes ¿cómo lo vamos a saber nosotros?

¿Por qué no hacemos un paréntesis y recomezamos de cero?

Cuando en el cuarto mensaje escribiste:

Cita:

Empezado por el_barto
yo quisiera que cuando pique en uno de esos nombres me listara en una grilla todos los que corresponden por ejemplo: compaq

¿A qué te estás refiriendo exactamente?

Se supone que en el combo listas los nombre de proveedores, es decir, que el combo está enlazado a una tabla `proveedores` que tiene como mínimo el código y nombre del proveedor.

Entonces, cuando dices "todos los que corresponden" a ¿qué te refieres? Uno hubiera pensado que te referías a alguna tabla- productos sería sólo un ejemplo -uno de cuyos campos es el código del proveedor y de ahí que quieras el filtrado. Pero si no sabes de qué tabla quieres mostrar los que corresponden a entonces yo no he entendido nada y creo que nadie de los que ha participado aquí, incluido tú mismo, tampoco.

// Saludos

el_barto 31-05-2005 16:39:24

Es que el problema se genera en el inspector de objetos cuando selecciono el databasename por que no me permite seleccionar mi base de datos y estube mirando bien y el dbdemos que esta hay no tiene mis tablas, ese dbdemos tiene tablas como employess y customer etc etc por lo visto esta base esta creada por default por delphi y solo es un demo de una base......y por eso cuando llego al tablename no me muestra mis tablas ese es el verdadero inconveniente en este aspecto por eso los campos del masterfield no son los campos de mi tabla, comprendo tu punto no es que no sepa cual tabla seleccionar eso lo tengo claro pero si en el tablename no estan mis tablas y en el databasename no esta mi base no puedo seleccionar lo que deseo....
Bueno al igual gracias

roman 31-05-2005 16:53:29

Cita:

Empezado por el_barto
Es que el problema se genera en el inspector de objetos cuando selecciono el databasename por que no me permite seleccionar mi base de datos

Entonces hay que regresar más allá de cero.

En ese mismo cuarto mensaje, cuando escribiste

Cita:

Empezado por el_barto
gracias ya logre que me muestre en un combo los nombres de mis proveedores

¿Qué, exactamente, es lo que habías logrado?

Porque si no logras asignar el databasename, ¿cómo es que lo hiciste antes?

Si, como supongo, estás usando el BDE para acceder a tu base entonces primero que nada debes crear un alias para ella para que así aparezca listada al igual que DBDEMOS. El cómo hacerlo es algo en lo que no te puedo ayudar porque no trabajo con Interbase (estamos hablando de Interbase ¿verdad?).

Una vez que resuelvas esto ya no tendrás problemas en aplicar lo que te hemos dicho.

Pero encarecidamente te ruego que comiences con leer los fundamentos básicos del acceso a bases de datos con Delphi. De la página de Ian Marteens puedes bajarte de forma gratuita su libro La Cara Oculta de Delphi 4, que, si bien escrito para la versión 4, sirve muy bien para otras versiones. Y en la misma ayuda de Delphi hay un capítulo introductorio al uso de componentes de acceso a datos.

// Saludos

el_barto 31-05-2005 17:07:04

No no no no que tonto fui ya pude asignar mi base utilizando el ibtable y me conecta perfectamente, disculpen todos mi torpeza ahora mi pregunta es mi dblookupcombobox y mi grid los conecto a donde???


La franja horaria es GMT +2. Ahora son las 08:22:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi