FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; 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. |
#2
|
||||
|
||||
una forma para hacerlo con valores de tipo integer y un combo;
cuando quieras recuperar el entero de la posicion 2 haces lo siguiente
Por cierto no necesariamente tiene que ser un TComboBox, cualquier derivado de TStrings (por ejemplo TStringList) tiene la propiedad objects. para valores de otro tipo creas un TList (no confundir con ListBox) y haces que los objects apunten a los items del TList
__________________
self.free; Última edición por droguerman fecha: 07-04-2007 a las 15:14:43. |
#3
|
||||
|
||||
La idea de droguerman se puede simplificar un poquito:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
|||
|
|||
#5
|
||||
|
||||
Cita:
__________________
self.free; |
#6
|
|||
|
|||
Gracias, Doguerman,
Me ha venido de perlas tu explicación. También agradezco el resto de aportaciones desde luego. Desconocía la propiedad objects y que se lo podía dar este uso. Ahora ya tengo hecha una función "genérica", que pasandole el nombre de la tabla, el campo que quiero almacenar y el campo que quiero mostrar en el combo, me permite cargar un combo. Esto me va a ahorrar mucho trabajo. Gracias de nuevo. En todo caso, y ya solo por curiosidad, pregunto: Si tu tienes una variable global en un unit, pongamos un array de enteros y quieres hacer una función que haga alguna cosa con ellos ¿cómo se ha de pasar el parámetro?. Para ser más específicos. Imaginemos que tengo una variable que es un array de enteros [1,2 y 3] y quiero hacer una función que multiplique ese array por dos (evidentemente, y que los datos permanezcan almacenados en dicho array). Código:
miarray: array[0..2] of integer = (1,2,3); duplicar_array(miarray) Gracias de nuevo y un saludo. |
#7
|
|||
|
|||
Cuando se tiene que optener un resultado de tipo string y se tiene el combobox ordenado, se debe relacionar el combobox con el StringList para recuperar los datos de lista
Gracias Última edición por CrazySoft fecha: 08-04-2007 a las 01:06:59. |
#8
|
||||
|
||||
para el tema de arrays, mira aqui
Usa High(nombreArray) y Low(nombreArray) para saber los índices superior e inferior respectivamente. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Función Genérica | radaalvaro | .NET | 0 | 28-06-2006 16:51:29 |
Problema con impresora generica solo texto | escullar | Impresión | 0 | 30-05-2005 12:22:30 |
Ejecutar función al cargar formulario | lic_francisco | Varios | 1 | 03-05-2005 09:05:49 |
Error com impresora generica de texto | rogeriobeltran | Impresión | 2 | 17-08-2004 16:20:03 |
cargar tabla en varios combos | Delphos | Conexión con bases de datos | 2 | 04-10-2003 19:09:11 |
|