Ver Mensaje Individual
  #5  
Antiguo 28-10-2008
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 23
StartKill Va por buen camino
Smile DBLooKupComboBox en DBCtrlGrid

Holas,

Con ello no pretendo que cambies tu trabajo, o tu forma de diseño
solo deseo mostrar como lo hago y de ello prodrias obtener lo posiblemente
necesites.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*-*-*-* PRIMERA OPCION (creando a mano DBLoockupComboBox)*-*-*-*
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Tenemos dos tablas
Incidencias
1.-Codigo_principal as integer
2.-codigo_operador as integer
Operadores
1.-codigo_operador as integer
2.-nombre_operador as char(20)

Lo siguiente no es un codigo real, pero la logica es la correcta, espero ayude.

En un primer formulario (frm1)
°°°°°°°°°°°°°°°°°°°°°°
"ClientDataSet">>CDS_incidencias = tabla Incidencias
"ClientDataSet">>CDS_operadores = tabla Operadores
"DataSource">>DS_incidencias = con CDS_incidencias
"DataSource">>DS_operadores =con CDS_operadores

En cada ClientDaset dar doble click y saldrá una lista vacia,
en esa lista presionar click derecho y elejir la opcion "Add all fields"

"TDBGrid">>DBG_incidencias->DataSource-> DS_incidencias
Configuremos nuestra grilla para que llame al formulario2 (frm2) con dobleck click, un enter....


En un segundo Formulario (frm2)
°°°°°°°°°°°°°°°°°°°°°°°°
TDBEdit's para los campos del CDS_incidencias
"codigo_principal" y "codigo_operador"

"TDBloockupComboBox">>DBLCB_operadores
-- datos para la tabla incidencias ---
DBLCB_operadores->DataSource->DS_incidencias
DBLCB_operadores->DataField->codigo_operador (nombre campo/field)
-- datos para la tabla operador ----
DBLCB_operadores->ListSource->DS_operadores
DBLCB_operadores->ListField->nombre_operador (nombre campo/field)
DBLCB_operadores->KeyField->codigo_operador (nombre campo/field)

Sus botones de salvar , cancela... etc, etc.

----------------------------------------------------------------
Bueno, activamos nuestro ClientDaset's

Navegamos por la grilla, presionamos enter y en el segundo formulario
podemos elegir nuestro operador.


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*-*-*-* SEGUNDA OPCION (creando un campo Lookup)*-*-*-*
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Teniendo las mismas tablas de la primera opción

En un primer formulario (frm1)
°°°°°°°°°°°°°°°°°°°°°°
"ClientDataSet">>CDS_incidencias = tabla Incidencias
"ClientDataSet">>CDS_operadores = tabla Operadores
"DataSource">>DS_incidencias = con CDS_incidencias
"DataSource">>DS_operadores =con CDS_operadores

En cada ClientDaset dar doble click y saldra una lista vacia,
en ella presionar click derecho y elejir la opcion "Add all fields"

Creando un campo "lookup" en el CDS_incidencias
Estando dentro de la lista de campos del CDS_inciencias, hacer click derecho,
y elegir la opción "New Field", aparece una caja de dialogo pidiendo datos
para el nuevo campo---..llenamos lo siguente...

en Field Properties
Name:= lk_operadores
Component:= CDS_incidenciaslk_operadores (es automatico)
Type:=String
Size:=20
En Field Type
Elijes el radiobutton "lookup"
En Lookup Definition Type
KeyFields:=codigo_operador
DataSet:=CDS_operador
LookupKey:= codigo_operador
ResultField:= nombre_operador

Prdsionar boton "OK", listo
----------------------------------------------------------------

"TDBGrid">>DBG_incidencias->DataSource-> DS_incidencias
Doble clik en la grilla, aparece una lista vacia...
elegimos el icono "Add all fields" es el tercer icono (parte superior)
Observa que el nuevo campo "lookup" -> lk_operadores tambien está

Configuremos nuestra grilla para que llame al formulario2 (frm2) con doble click, un enter....


En un segundo Formulario (frm2)
°°°°°°°°°°°°°°°°°°°°°°°°
se debe tener activo las lista de campos (el editor de propiedades campos),
aquel se activa con doble click en el CDS_incidencias.

Eliges un campo de la lista (del editor de propiedades de campos) y arrastras
al formulario 2 (frm2) y de forma automatica crea los dbedit's...
Cuando se arrastre el campo lk_operadores, de forma automatica es un
dblookupcombox.

Bueno, activamos nuestro ClientDaset's

Navegamos por la grilla --- y si tratamos de modificar la columna con el campo
lk_operadores -- aparece un combito y eligen su operador ...


Sigamos navegando -- presionamos enter en la grilla y en el segundo
formulario podemos elegir tambien nuestro operador.


*---------------------------------------------------
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*-*-*-* TERCERA OPCION (la que se esta tratando de hacer ....)*-*-*-*
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Hago los mismos paso s de la OPCION 2, pero sin considerar el frm2

-Tratando de utilizar un solo formulario,
-En vez de un DBGrid, utilizar un DBCtrlGrid..

Arrastro los campos del editor de propiedades de campos del CDS_incidencias
al control DBCtrlGrid.

En tiempo de diseño = correcto

En tiempo de ejecucion = puedo navegar sobre el DBCtrlGrid
Al tratar de cambiar un datos del dblookupcombobox me salta un error:
"Operation not Allowed in a DBCtrlGrid"
Operacion no permitida en un DBCtrlGrid

Parece ser que no funciona el dblookupcombobox dentro del componente
DBCtrlGrid...

Por que?, no estoy seguro, pero que creo que si uno trata de modificar el
dblookupcombobox de un registro de incidencias - este tratará de cambiar a
todos los registros de incidencias, ya que todos los registros de
CDS_incidencias apuntan a un mismo CDS_operadores.


Al final, voy a tratar de salir de esa duda, si tu la haces antes o alguien la
tiene, no DUDE en escribirlo en el foro

Your friend

StartKill
Lima-Perú
([email protected])

Última edición por StartKill fecha: 28-10-2008 a las 18:05:35. Razón: Tipografia
Responder Con Cita