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 22-06-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Pasar Datos de un query a un listbox

Hola Buenas Noches. Estoy trabajando con un formulario de alta de empleados los cuales algunos tienen muchos puestos de trabajos.Para esto uso una tabla intermedia denominada Asignado que contiene las clave primaria de ambas tablas (puesto,empleados). Tengo un formulario de alta de empleados los cuales estoy cargando los datos de los mismo como dni,apellido,dirección,etc y luego tengo un boton que lo llamo "agregar" me abre otro listado llamado "Listado de puestos laborales" el cual tiene los puestos (id,descripción) en lo cual atravez de un boton llamado "seleccionar" quiero llevarme por así decirlo la "descripción" y se guarde en el ListBox del formulario empleados.

Bien aqui dejo el codigo que estube trabajando lo cual me tira error

del boton agregar que llama al formulario "listado de puestos laborales"

Código Delphi [-]
procedure TfEmpleados.AgregarClick(Sender: TObject);
begin
qPuestos.Active:=true;
qPuestos.Insert;
qPuestos.Refresh;
fListadoPuestos:=TfListadoPuestos.Create(self);
fListadoPuestos.ShowModal
end;


y del boton seleccionar que se encuentra en el formulario listado

Código Delphi [-]
procedure TfListadoPuestos.bSeleccionarClick(Sender: TObject);
begin
qAsignado.Active:=true;
qAsignado.Insert;
qAsignados['idpuesto']:=qPuestos['idpuesto'];             // aqui intento guardar la clave primaria de la tabla idpuesto en la tabla dereferencia Asginados
qAsignados['idempleado'] := qEmpleados['idempleado'] ; 
fEmpleados.ListBox1.Items.Add(qPuestos.['descripcion']); // guardar el campo en el listbox
end;
Es hasta donde llegue pero no me carga nada en el listbox y tampoco las clave se cargan en la tabla "Asignado" espero que puedan guiarme en el tema
Estoy trabajando con delphi 2010,Componentes zeos y mysql-5.Dejo de paso las tablas sql por si no quedo claro la relacion

Código SQL [-]
empleados
idempleado
dni
direccion

Código SQL [-]
asignados
idpuesto
idempleado

Código SQL [-]
puestos
idpuesto
descripsion


desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 22-06-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Es que no me queda del todo claro. Si te queres llevar la descripcion, porque estas dando de alta un nuevo registro?

Ademas no es sano que los form se entre conozcan entre si. Es mucho mejor hacer algo como esto:

Agrega esta propiedad en tu TfListadoPuestos:

Código Delphi [-]
type
  TfListadoPuestos = class(TForm)
  private
    FDescripcionPuesto: string;
  public
    function Execute: Boolean;
    property DescripcionPuesto: string read FDescripcionPuesto;
  end;

implementation

function TfListadoPuestos.Execute: Boolean;
begin
  if ShowModal = mrOk then
  begin
    Result := True;
    FDescripcionPuesto := // aca pones el valor del puesto seleccionado
  end
  else
    Result := False; 
end;

Y luego podes invocar a este form asi:

Código Delphi [-]
var
  FListadoPuestos: TfListadoPuestos;
begin
  FListadoPuestos := TfListadoPuestos.Create(Self)
  if FListadoPuestos.Execute then
    FListadoPuestos.DescripcionPuesto // valor que tienes que agregar al listbox
end;

--

Esto es ya mas consejo: Por que accedes a los valores de los campos como Variants?

TDataSet tiene una propiedad indizada y por defecto que devuelve el Variant del campo que pasas por indice. Pero he tenido malas experiencias con esta propiedad.

Te aconsejo usar DataSet.FieldByName('Campo').AsString/AsInteger, etc

A mi tambien me parece espantosamente larga la sintaxis, pero ya que llevas Delphi 2010, lo podes solucionar con una clase de extension:

Código Delphi [-]
interface

uses
  DB;

type
  TDataSetHelper = class helper for TDataSet
  private
    function GetFieldObject(Index: string): TField; inline;
  public
    property FieldObject[Index: string]: TField read GetFieldObject;
  end;

implementation

function TDataSetHelper.GetFieldObject(Index: string): TField;
begin
  Result := FieldByName(Index);
end;

Y ahora podrias escribir:

Código Delphi [-]
  DataSet['NombreCampo'].AsInteger;
Responder Con Cita
  #3  
Antiguo 22-06-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Belen12.

A mi tampoco me queda clara la forma en que deseas implementar la solución. Entiendo que tenes tres tablas,
Código:
Empleados
---------
ID
...

Puestos
-------
ID
...

Asignado
--------
 Empleados_ID,
 Puestos_ID
donde la tabla PUESTOS ya tiene cargado los cargos disponibles y la tabla ASIGNADO se encarga de almacenar las distintas relaciones: empleado_N -> cargo_1, cargo_2, ..., cargo_N.

Pero, ¿ Por que hacer la elección del puesto desde otro formulario ? Podrías hacerlo todo desde el formulario de ingreso de empleado, una imágen de ejemplo a lo que me refiero:


Si no entendí mal tu planteo, podría resultarte una opción mas sencilla de mantener y el código tampoco es muy complejo:
Código Delphi [-]
// Cargar cargo/ID en el TCheckListBox
procedure TForm1.FormCreate(Sender: TObject);
begin
  qyPuesto.Open;
  qyPuesto.DisableControls;
  qyPuesto.First;
  try
    while not qyPuesto.Eof do
    begin
      CheckListBox1.Items.AddObject(
        qyPuesto.FieldByName('CARGO').AsString,
        TObject(qyPuesto.FieldByName('ID').AsInteger));
      qyPuesto.Next;
    end;
    qyPuesto.First;
  finally
    qyPuesto.EnableControls;
  end;
  ...
end;

procedure TForm1.btnSaveClick(Sender: TObject);
var
  i: Integer;
begin
  ...
  ...  ( guardar datos del empleado )
  ...

  for i := 0 to CheckListBox1.Items.Count -1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      tbAsignado.Insert;

      tbAsignado.FieldByName('ID_EMPLEADO').AsInteger :=
        tbEmpleado.FieldByName('ID').AsInteger;

      tbAsignado.FieldByName('ID_PUESTO').AsInteger   :=
        Integer(CheckListBox1.Items.Objects[i]);

      tbAsignado.Post;
    end;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 22-06-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
muchas gracias por responder es muy bueno el codigo funciona sin prolema. Si basicamente queria haceder a otro formulario y traerme la descripsion de los puestos a un listbox

Última edición por Casimiro Notevi fecha: 22-06-2016 a las 20:13:51.
Responder Con Cita
  #5  
Antiguo 22-06-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Gracias Por responder

Muchas gracias funciona perfecto el codigo y tienes razon es mas tedioso ir de un formulario a otro no lo habia pensado con un checklistbox me fue de mucha ayuda

Última edición por Casimiro Notevi fecha: 22-06-2016 a las 20:14:11.
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
Cargar un ListBox con datos de un Query Liz Leon Varios 1 25-02-2015 19:56:20
Pasar datos de varios listbox a una tabla Pedron Varios 5 08-05-2014 10:09:34
Como pasar los datos de un query a un ClientDataSet oscarac OOP 1 08-07-2011 19:52:24
Pasar datos de una Query a una tabla Vanis SQL 3 09-01-2007 02:29:41
pasar de un dbgrid a un listbox Goyo OOP 13 14-12-2006 20:38:47


La franja horaria es GMT +2. Ahora son las 01:17:16.


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