Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema para devolver 2 valores en una funcion (https://www.clubdelphi.com/foros/showthread.php?t=21103)

tiagor64 06-05-2005 12:43:42

problema para devolver 2 valores en una funcion
 
Hola:

Estoy trabajando en un programa que me lee un condigo desde un edit, y tendria que devolverme despues de buscar en una funcion dos strings, uno con la descripcion y otro con las unidades y no se como hacerlo, os pego un trozo de codigo.

Código:

function tform4.buscararticulo(celda : string) : string;
begin
qrycache.sql.text := 'select descripcion from articulos_cache where codigo = '' '+celda+'''';
qrycache.Open;
if dsarticulocache.DataSet.FieldByName('descripcion').AsString = '' then
  result := 'CODIGO NO ENCONTRADO'
  else result := dsarticulocache.DataSet.FieldByName('descripcion').AsString;
end;
procedure TForm4.Edit4Exit(Sender: TObject);
begin
edit5.text := buscararticulo(edit4.Text);
end;
procedure TForm4.Edit7Exit(Sender: TObject);
begin
edit8.text := buscararticulo(edit7.Text);
end;

asi es como lo tengo ahora, pq necesitaba q me devolviera solo la descripcion, pero para que me devuelva tb otro campo q son las unidades no se como hacerlo sin llamar otra funcion.

Muchas gracias de antemano.

hermes_32 06-05-2005 13:22:35

Hola tiagor64,

se me ocurren varias maneras:

Si esa "función" la vas a usar para pintar en los mismos edit siempre, puedes modificar directamente dentro de la funcion dichos edits, y la pondríamos como procedimiento. Es decir,
Código Delphi [-]
  procedure tform4.buscararticulo(celda : string);
  begin
    qrycache.sql.text := 'select descripcion, unidades from articulos_cache where codigo = '' '+celda+'''';
   qrycache.Open;
   if qrycache.Recordcount > 0 then begin  //si lo encuentra
     edit5.text := dsarticulocache.DataSet.FieldByName('descripcion').AsString;
     edit8.text := dsarticulocache.DataSet.FieldByName('unidades').Value;
   end
   else begin
     edit5.text := '';
     edit8.text := '';
   end;
end;

En otro caso tambien puedes hacer un procedimiento que pase 2 variables por "referencia":

Código Delphi [-]
  procedure tform4.buscararticulo(celda : string, Var Desc : String; Var Uds : Integer);
  begin
    qrycache.sql.text := 'select descripcion, unidades from articulos_cache where codigo = '' '+celda+'''';
   qrycache.Open;
   if qrycache.Recordcount > 0 then begin  //si lo encuentra
     Desc := dsarticulocache.DataSet.FieldByName('descripcion').AsString;
     Uds := dsarticulocache.DataSet.FieldByName('unidades').Value;
   end
   else begin
     Desc := '';
     Uds := 0;
   end;
end;

Un saludo.

Neftali [Germán.Estévez] 06-05-2005 13:42:07

Cita:

Empezado por hermes_32
(1)...Si esa "función" la vas a usar para pintar en los mismos edit siempre, puedes modificar directamente dentro de la funcion dichos edits,...
(2)...En otro caso tambien puedes hacer un procedimiento que pase 2 variables por "referencia":

Si ninguna duda el segundo.
En el primero estás perdiendo toda la abstracción/encapsulación.

hermes_32 06-05-2005 13:51:55

Tienes razón, es una guarrada de solución, pero...

un saludo.

tiagor64 06-05-2005 15:38:59

muchas gracias, me ha servido la solucion.


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

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