Catálogos cascada en Delphi

Hola Bienvenidos otra semana a nuestro blog de programación, esta semana para darle continuidad al primer post del año acerca de comparar propuestas salariales, les quiero platicar acerca de los diferentes puestos de trabajo en el área de sistemas y como siempre haciendo un ejemplo de esto. 

Al hacer este post pensé en las siguientes preguntas: 
  • ¿Como sub-dividirías los puestos de Trabajo en TI?
Desde mi punto de vista las dividiría en : Infraestructura, Comunicaciones, Helpdesk, Software, Seguridad, Inteligencia Artificial (incluyendo BI,Datamining) y cada área se puede subdividir más 


  • ¿Qué área es la que tiene más demanda de Staff?
Creo que Software y Seguridad
  • ¿Que áreas crees que tengan más desarrollo?
Fullstack, Inteligencia Artificial, Seguridad de la Información 
  • ¿Les recomendarías a las personas aprender a programar?
Les diría claro que si, vale la pena estudiarlo, vi un articulo de OCC de Javier Castillo titulado
Las 10 carreras y áreas mejor pagadas para el 2020 en México  y entre ellas esta sistemas,software y programación con sueldos promedio de $30,000.00 MXN


Esquema Areas de Tecnologias de la Información

Ojala si algún consultor de RH o reclutador lee este post nos ayude con sus comentarios de estas preguntas.

Ahora entrando a materia en el ejemplo de este Post:

Objetivo del Programa en Delphi 7.0


Cuando nos piden ingresar una dirección, normalmente hacemos uso de una lista y otros campos se habilitan en dependencia del primer valor esto son son los Combobox o Listas desplegable en cascada, esto es para cuando queremos llenar un formulario y queremos que el usuario solo seleccione un dato de las lista que ya tenemos, esto para evitar que los datos ingresados puedan estar mal escritos o tengan espacios.

Para hacer este ejemplo, vamos a programar en Delphi y vamos utilizar una base de datos para poder leer la información.

Necesitamos 3 tablas

  1. Área
  2. Subarea
  3. Puestos
Vamos a crear las tablas en Microsoft Access

CREATE TABLE "Area" (
"Area_id" INTEGER,
"Area_name" TEXT,
PRIMARY KEY("Area_id")
);

CREATE TABLE "Subarea" (
"Subarea_id" INTEGER,
"Area_id" INTEGER,
"Subarea_name" TEXT,
PRIMARY KEY("Subarea_id")
);
CREATE TABLE "Puesto" (
"Puesto_id" INTEGER,
"Subarea_id" INTEGER,
"Puestoname" LONGTEXT,
"Puestodesc" TEXT

);

Diagrama Entidad Relación

Datos en Base de datos

Tabla de Puestos


Después vamos a tener nuestro programa, les comparto las pantallas de diseño




El código


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ComboBox1: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    ADOQuery1: TADOQuery;
    DataSource2: TDataSource;
    DataSource1: TDataSource;
    ADOQuery2: TADOQuery;
    ComboBox2: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    ComboBox3: TComboBox;
    ADOQuery3: TADOQuery;
    DataSource3: TDataSource;
    Label5: TLabel;
    Label6: TLabel;
    ADOQuery4: TADOQuery;
    DataSource4: TDataSource;
    Label7: TLabel;
    Label8: TLabel;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  id_area:String;
  id_subarea:String;
  id_puesto: String;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
   ADOQuery1.Active := False;
   ADOQuery1.Active := True;
   While not ADOQuery1.Eof do
   begin
      Combobox1.Items.Add(ADOQuery1.Fields[1].Text);
      ADOQuery1.Next;
   end;
      ADOQuery1.Active := False;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
   id_area :=Combobox1.Text;
  // showmessage('Hola ' + id_area);
   ADOQuery2.Active := False;
   ADOQuery2.SQL.Text := 'Select subarea_name FROM subarea INNER JOIN area ON area.id = subarea.area_id WHERE area_name ='+ Char(39) + id_area + Char(39);
   ADOQuery2.Active := True;
   Combobox2.Items.Clear;
   While not ADOQuery2.Eof do
   begin
      Combobox2.Items.Add(ADOQuery2.Fields[0].Text);
      ADOQuery2.Next;
   end;
      ADOQuery2.Active := False;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
   id_subarea :=Combobox2.Text;
 //  showmessage('Holasub ' + id_subarea);
   ADOQuery3.Active := False;
   ADOQuery3.SQL.Text := 'Select puesto_name FROM puesto INNER JOIN subarea ON subarea.id = puesto.subarea_id WHERE subarea_name ='+ Char(39) + id_subarea + Char(39);
   ADOQuery3.Active := True;
   Combobox3.Items.Clear;
   While not ADOQuery3.Eof do
   begin
      Combobox3.Items.Add(ADOQuery3.Fields[0].Text);
      ADOQuery3.Next;
   end;
      ADOQuery3.Active := False;
end;


procedure TForm1.ComboBox3Change(Sender: TObject);
begin
   id_puesto :=Combobox3.Text;
//   showmessage('Hola puesto ' + id_puesto);
   ADOQuery4.Active := False;
   ADOQuery4.SQL.Text := 'Select Puesto_descripcion FROM puesto INNER JOIN subarea ON subarea.id = puesto.subarea_id WHERE subarea_name ='+ Char(39) + id_subarea + Char(39) + ' AND puesto_name =' + Char(39) + id_puesto + Char(39);
   ADOQuery4.Active := True;
 //  showmessage(ADOQuery4.SQL.Text);
   Memo1.Clear;
   Memo1.Lines.add(ADOQuery4.Fields[0].Value);

end;

end.

Explicación del programa en Delphi 7.0

  • Para este programa utilice la conexión a la base de datos con el objeto  TADOConnection para configurar la base de datos de Access
  • El objeto TADOQuery para poder configurar un query a la base de datos, fue un objeto por cada combox y el Memo. Cada query se configura en la propiedad ADOQuery2.SQL.Text 

  • Utilice el objeto TDataSource para ligar cada Query 


Otra opción pudo haber sido utilizar TDBMemo, TDBLookupComboBox

La ejecución del programa




Espero les sea de utilidad todo lo plasmado en este post, no olviden dejar sus comentarios y compartir nuestro blog, saludos!!!
Otro post relacionado a Delphi que pueden encontrar aquí es para hacer una calculadora https://www.programacionparatodos.com/2019/07/como-programarpascal-o-delphi.html

Pueden seguirnos también en nuestra página de Facebook

Comentarios

Entradas más populares de este blog

Macro de Excel para abrir archivo csv

Ejemplo Macro en Word

Como ejecutar SQL desde Tareas Programadas de Windows