Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-10-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 22
David Va por buen camino
Problemas con un TDBLookupComboBox dentro de un TDBCtrlGrid

Hola

tengo una tabla de incidencias, donde uno de los campos es operador de tipo integer. También tengo otra tabla de operadores, con la clave integer y el nombre varchar(90), estoy con firebird.

El caso es que tengo el control TBDCtrlGrid, ese que multiplica los controles en él insertado, enganchado a la tabla de incidencias, y he pensado en poner un DBLookupComboBox, que me cargue los operadores de la tabla de operadores, de manera que el usuario despliegue la lista con nombres y apellidos y al guardar se guarde el codigo en la tabla incidencias.

La forma de cargar los operadores es asignandole a la propiedad listSource el datasource de Operadores, pero no me deja hacer esta acción, me dice que no esta permitida para dicho control ¿Qué puedo hacer?

Un saludo
Responder Con Cita
  #2  
Antiguo 24-10-2008
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Se puede hacer eso asociando el datasource a un ClientDataset y especificando el campo que quieres usar como ftLookup, el Grid ya tiene todo lo necesario para colocar un dblookup cuando encuentre un campo de ese tipo
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 26-10-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 22
David Va por buen camino
Hola

Estoy utilizando clientDataSet y no me sale. Tengo la tabla incidencia, con el campo operador, he creado en el clientDataSet un campo lookup con otro clientDataSet(obviamente unido a un query con su provider), que tiene la tabla de operadores, así tengo en el clientDataSet cuyo datasource esta ligado al control DBCtrlGrid, el campo lookup OperadorNombre.

Si añado un DBLookupComboBox y le asigno en su propiedad FieldName el nuevo campo operadorNombre, me da un error.

Un saludo
Responder Con Cita
  #4  
Antiguo 26-10-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 22
David Va por buen camino
nadie sabe la respuesta ?
Responder Con Cita
  #5  
Antiguo 28-10-2008
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
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ú
(startkill@hotmail.com)

Última edición por StartKill fecha: 28-10-2008 a las 18:05:35. Razón: Tipografia
Responder Con Cita
  #6  
Antiguo 28-10-2008
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Saludos,

Aca hay una solucion, no es mia, pero funciona , la acabo de probar.

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


Aca el enlace orignal :

http://groups.google.com/group/borla...aca7768f03afd8

Código Delphi [-]
procedure TFrm1.FormCreate(Sender: TObject); 
var 
  I: Integer; 
  MyDataLink: TDataLink; 
begin 
  for I := 0 to DBLookupComboBox1.ControlCount - 1 do 
    if DBLookupComboBox1.Controls[i] is TPopupDataList then 
    begin 
      MyDataLink := TDataLink(DBLookupComboBox1.Controls[i].Perform(CM_GETDATALINK, 0, 0)); 
      if MyDataLink <> nil then 
        MyDataLink.DataSourceFixed := False; 
        MyDataLink.DataSource := nil; 
    end; 
end;

Your friend,

StartKill
Lima-Perú
(startkill@hotmail.com)
Responder Con Cita
  #7  
Antiguo 28-10-2008
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Como hago que el componente DBLookupComboBox se vacie? Es decir... Cuando termino un filtro no quiero que siga mas el nombre anterior y quiero poner en blanco todo. He intentado pero no he tenido exito ya que no tiene estas propiedades:

- DBLookupComboBox.TexT

- DBLookupComboBox1.Caption

...


Saludos amigos...
Responder Con Cita
  #8  
Antiguo 28-10-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
DBLookupComboBox1.KeyValue := Null;
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Es TDBCtrlGrid el control adecuado para un TPV hibero OOP 1 22-04-2008 08:45:18
problemas al integrar una aplicación dentro de otra aranel Varios 1 23-10-2005 01:40:00
Problemas de desplazamiento dentro de un DBgrid? andressanchez Varios 1 29-07-2005 21:55:43
problemas con threads dentro de un componente elcigarra OOP 26 26-05-2005 04:29:35
Problemas con TDBLookupComboBox ramiretor Conexión con bases de datos 3 30-01-2004 23:31:54


La franja horaria es GMT +2. Ahora son las 16:53:19.


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