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)
-   -   Orientación - Manejo del DBLoockupComboBox (https://www.clubdelphi.com/foros/showthread.php?t=21106)

Snoop_mx 06-05-2005 14:29:09

Orientación - Manejo del DBLoockupComboBox
 
Alguien me podría orientar para el manejo del DBLoockupComboBox (Parámetros) para agregar al campo IdProveedor el valor Numérico correspondiente (IdProveedor) en vez del Texto (NombreProveedor) que es mostrado en el DBLookupComboBox para que no cause error.

Me explico:

Mi Tabla: tbProveedores (Hecha en SQL Server 2000)
Mis Atributos: idProveedor, NombreProveedor

Cabe recalcar que lo que he hecho en el Object Inspector es:

ListSource: Apuntando al Datasource y del DataSource Apuntando al ADOQuery y dentro del ADOQuery SELECT * FROM tbProveedores
ListField: NombreProveedor
KeyField: idProveedor

Y me muestra todos los nombres de Proveedores, pero a la hora de invocar el procedimiento de guardar en SQL,obviamente me quiere guardar el Texto (NombreProveedor) y no el Número (IdProveedor).

Mi Procedimiento de Agregar es:

Parameters.ParamByName('IdProveedor').Value := edtIdProveedor.Text;
//Donde edtIdProveedor es el DBLookupComboBox
//y el Parámetro IdProveedor esta para recibir un Integer.

Gracias y espero me entiendan, saludos desde Veracruz, México.
Atte. Carlos Valdez. coolio_mx@hotmail.com

marcoszorrilla 06-05-2005 14:40:00

Desde luego tienes un error de diseño porque hacer casar un campo texto con un numérico ó viceversa no es lógico, una posible solución sería aprovechar el evento BeforeInsert de la tabla receptora y transformar el dato de la manera apropiada, según deduzco StrToInt ó IntToStr, según la dirección te resolverían el problema.

Un Saludo.

Snoop_mx 06-05-2005 15:11:47

Orientación
 
Ok Marcos mira, estaba viendo un link anterior
"Llenar DBLookupComboBox con dos columnas"
http://www.clubdelphi.com/foros/showthread.php?t=21063
Y pues es una buena solucion a mi problema, pero ahora el detalle es:
Cómo hacer para que al seleccionar un registro se cambie automaticamente el (Numero)idProveedor correspondiente así como lo hago en los edits (Texto), (Esto me servirá para poder Modificar un registro y no me marque Error).
Aquí anexo el código donde se ve que los edits que tengo se cambian al que debería de ser cuando se selecciona del DBGrid, no asi los DBLookupComboBox que estan en comentarios.
Código Delphi [-]
procedure TdmProductos.dsProductosDataChange(Sender: TObject;  Field: TField);
 begin
Código Delphi [-]
   frmProductos.edtIdProducto.Text:=     dmProductos.qryVisualiza.Fieldbyname('IdProducto').AsString;
   frmProductos.edtNombreProducto.Text:= dmProductos.qryVisualiza.Fieldbyname('NombreProducto').AsString;
   frmProductos.edtPrecio.Text:=         dmProductos.qryVisualiza.Fieldbyname('Precio').AsString;
  // frmProductos.edtIdProveedor.Text:=    dmProductos.qryVisualiza.Fieldbyname('IdProveedor').AsString;
  // frmProductos.edtIdCategoria.Text:=    dmProductos.qryVisualiza.Fieldbyname('IdCategoria').AsString;
 end;

Snoop_mx 06-05-2005 15:27:24

Orientación
 
Osea, si habilito lo que está en comentario me marca el siguiente error de compilación:

Cannot assign to read-only property.

marcoszorrilla 06-05-2005 21:15:18

No le veo explicación al error, prueba a pasarle un valor cualquiera al edit, por ejemplo Edit1.Text:='2';

Y sino elimina el Edit y lo vuelves a crear con el mismo nombre.

Un Saludo.

Snoop_mx 06-05-2005 21:54:05

Cita:

Empezado por marcoszorrilla
No le veo explicación al error, prueba a pasarle un valor cualquiera al edit, por ejemplo Edit1.Text:='2';

Y sino elimina el Edit y lo vuelves a crear con el mismo nombre.

Un Saludo.

ok, disculpa, creo que no fui claro, el edtIdProveedor y edtIdCategoria no son Edits, sino realmente son DBLookupComboBox, en los edits se visualizan e interactuan según el registro que seleccione del DBGrid mientras que en el DBLookupComboBox no cambia, y quiero saber cómo puede interactuar o cambiarse a la opción al cual le pertenece, como lo estan haciendo ahora los Edits.
Los Edits los estoy manejando como si fueran DBEdits. Cabe recalcar que para manejarlos así me fui al Datasource en DataChange y puse el código antes mencionado. Las 2 líneas que están en comentario son líneas que antes pertenecían a edits, pero OJO, los cambié a DBLookupComboBox y ya no sirven, porque me marca: "Cannot assign to read-only property"

marcoszorrilla 06-05-2005 21:57:24

Pues no te va a funcionar, porque el DbLookUpComboBox, tomará sus valores de una tabla la cual apunte su propiedad ListSource, y la propiedad Text es como apuntas de solo lectura.

Un Saludo.

Snoop_mx 06-05-2005 23:42:25

Por fin
 
Ya estuvo, mira, lo solucioné de esta forma:
frmProductos.edtIdProveedor.KeyValue := dmProductos.qryVisualiza.Fieldbyname('IdProveedor').Value;

Con esto vemos cómo cambia o interactua el DbLookUpComboBox con el DBGrid, por fin salió.

Gracias marcoszorrilla por tu atención.

Saludos desde Veracruz, México.
Atte. Carlos Valdez coolio_mx@hotmail.com


La franja horaria es GMT +2. Ahora son las 19:30:24.

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