Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   como usar Funcion que devuelva array (https://www.clubdelphi.com/foros/showthread.php?t=96451)

oscarac 20-10-2023 17:37:20

como usar Funcion que devuelva array
 
buenos dias
tengo esta funcion que me devuelve un campo de una tabla cualquiera

Código Delphi [-]
function _Obtener(_tabla, _Campo, _condicion: string): string;
var
  strSql: string;
begin
  strSql := 'Select ' + _Campo + ' From ' + _tabla + ' where ' + _condicion;
  dmComedor.qryTemporal.SQL.Clear;
  dmComedor.qryTemporal.SQL.Add(strSql);
  dmComedor.qryTemporal.Open;
  Result := dmComedor.qryTemporal.FieldByName(_Campo).AsString;
end;

puedo utilizarla asi

Código Delphi [-]
_tipoTrabajador := _obtener('tbltrabajador','tipo','codigo = "012447"';

y tengo el tipo de trabajador en la variable _tipotrabajador

luego pensé
si necesito "n" campos no voy a estar invocando a la funcion "n" veces

entonces la idea es que pueda pasarle mas campos en el parametro campos para que me devuelva la lista de campos que deseo, el tema es cómo tratar el resultado?

tendria que cambiar el tipo de funcion de string a array?

intente hacerlo, pero no logro hacerlo funcionar, alguien me da una mano?

cloayza 20-10-2023 20:38:57

Estimado le propongo la siguiente opción.

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ValEdit, Vcl.StdCtrls;

type
  TDatos=record
   FieldName:String;
   FieldValue:String;
  end;

  TDatosList=TArray;

  TForm1 = class(TForm)
    Button1: TButton;
    vlData: TValueListEditor;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function GetDatos(AFields:Array Of String): TDatosList;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
Var
  Datos:TDatosList;
  i: Integer;
begin
     Datos:=GetDatos(['Campo 1','Campo 2','Campo3']);

     for i := Low(Datos) to High(Datos) do
        vlData.Values[Datos[i].FieldName]:=Datos[i].FieldValue;

     SetLength(Datos,0);
end;

function TForm1.GetDatos(AFields:Array Of String): TDatosList;
var
   i:Integer;
begin
     SetLength(result,length(AFields));

     for i := Low(AFields) to High(AFields) do
     begin
          result[i].FieldName := AFields[i];
          result[i].FieldValue:= 'Valor de '+AFields[i];
     end;
end;

end.

Saludos cordiales

Casimiro Notevi 20-10-2023 20:41:12

Puedes devolver un TStringList, pero de todas formas para devolver varios registros no veo muy útil esa función.

cloayza 20-10-2023 21:12:41

:mad:
Cita:

Empezado por Casimiro Notevi (Mensaje 553016)
...pero de todas formas para devolver varios registros no veo muy útil esa función.

Querido Casimiro, el ejemplo lo enfoque solo en el retorno del array...Como siempre tienes razón que para devolver varios registros hay que hacerle algunos retoques...:D

Saludos cordiales

Casimiro Notevi 21-10-2023 10:41:17

A lo mejor no he entendido bien lo que necesitas, pero si te sirve entonces está bien ^\||/

pgranados 23-10-2023 18:40:07

Código Delphi [-]
unit System.Types;

function MiFuncion(var1:String):TArray<string>;
begin
 // Tu codigo acá ...
 Result[0]:= 'Resultado 0';
 Result[1]:= 'Resultado 1';
end;


La franja horaria es GMT +2. Ahora son las 21:07:17.

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