Ver Mensaje Individual
  #1  
Antiguo 07-04-2007
Byfed Byfed is offline
Miembro
 
Registrado: oct 2006
Posts: 18
Reputación: 0
Byfed Va por buen camino
funcion genérica para cargar combos

Hola a todos de nuevo,

Como ya comenté en otro post, suelo diseñar las aplicaciones haciendo que cada opción del programa active el frame que corresponda. Al seleccionar la opción del menú, se llama al procedimiento init, que siempre pongo en todos los frames. Este procedimiento se encarga de limpiar los formularios si es preciso, cargar los combos que pueda haber y por último, de mostrar el formulario.

Para cargar los combos (con datos de una tabla mysql) suelo hacer lo siguiente:

he declarado una variable en private como

valores: array of integer;

y para cargar el combo hago:

Código:
procedure TFrame.Cargar_valores();
var
   sSql: String;
   SoloQuery : TQuery;
   i: integer;
begin
   Ssql := 'Select * from tabla';
   SoloQuery := TQuery.Create(nil);
   SoloQuery.DatabaseName := 'basededatos';
   SoloQuery.SessionName := 'session';
   SoloQuery.SQL.Clear;
   SoloQuery.SQL.Add(sSql);
   SoloQuery.ExecSQL;
   SoloQuery.Active := True;
   SoloQuery.Open;

   Combobox.ClearSelection;
   Combobox.Items.Clear;
   Combobox.Text := 'Selecciona valor';
   Combobox.ItemIndex := Combobox.Items.Count - 1;
   SetLength(valores, 0);
   while (not SoloQuery.EOF) do
   begin
      Combobox.Items.Add(SoloQuery.FieldByName('texto').AsString);
      i := Length(valores);
      SetLength(valores, i + 1);
      Valores[i] := SoloQuery.FieldByName('valor').AsInteger;
      SoloQuery.Next;
   end;
   SoloQuery.Close;
   SoloQuery.Destroy;
end;
Esto lo hago por cada combo que tenga que cargar y en ocasiones son unos cuantos. Para cada combo hago un procedimiento. Lo que estoy buscando es la forma de crear UN SOLO PROCEDIMIENTO GENERAL para cargar los distintos combos, pasándole como parámetros los datos del combo que se trate cada vez. Las llamadas serían del estilo:

cargarCombo(NombreCombo, ArrayValores, Tabla, CampoTexto, CampoValor)

He intentado hacerlo, pero cometo algún error al pasar el array. Imagino que el problema estará en que paso el array por valor y se debe pasar por referencia. No estoy seguro. También he intentado hacerlo con una función y que la llamada fuera así:

ArrayValores := CargarCombo(NombreCombo,Tabla, CampoTexto, CampoValor)

Pero no puedo definir la función para que devuelva un array de enteros.

¿A Alguien se le ocurre cómo podría realizar esta tarea? Me ahorraría muchas horas de tecleo.

Gracias y un saludo.
Responder Con Cita