Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Obtener de una tabla el valor que mas se aproxime de otra tabla en un DBgrid (https://www.clubdelphi.com/foros/showthread.php?t=58339)

alquimista 17-07-2008 00:14:57

Obtener de una tabla el valor que mas se aproxime de otra tabla en un DBgrid
 
Muy buenas.

Tengo varias tablas. Una de ellas tiene horas en modo texto
12:23 y un valor asociado como real a esa hora 15.50
12:50 --- 16.00
13:20----16.40
13:56----17.34
14:40-----18.23
etc..
Son diferentes tiempos ordenados en forma creciente..

En otra tabla se introducirá un valor que sea igual o se aproxime al
valor de tiempo. por ejemplo utilizando un DBgrid y en una columna tener el valor
12:26 que busque en la primera tabla y rellene el valor mas cercano por arriba en este ejemplo seria 12:50--16.00. Y fuera 16.00 el valor rellenado automaticamente en otra columna del DBgrid.

Cita:

Col1(texto)____ Col2(Real)
12:26___________16.00 (tabla1:12:50-->16.00)
12:48___________16.00 (tabla1:12:50-->16.00)
13:25___________17.34 (tabla1:13:56-->17.34)

JMG 17-07-2008 09:34:53

¿Y cual es la pregunta?

alquimista 17-07-2008 17:28:40

es verdad...

La falta de sueño hace estragos...

Bueno como se haría para que al introducir el dato en el dbgrid, de un tiempo que se aproxime al de la tabla 1 se rellene automaticamente el valor de cte a la que hace referencia.
¿Como se hace la comparación del tiempo 2 con el tiempo 1?

Perdón si no he sido muy claro.

alquimista 22-07-2008 10:01:14

Ya está medio resuelto:

Por si sirve a alguien pongo el código:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var restr,cmpstr:string;
    valreal: double;
    salida:boolean;
begin

   restr:=Label.Caption;
   salida:=false;
   With DataModule10.ADOTable1 do
      try
      Open;
      First;
      While (not EOF) and (not salida) do
        Begin
           cmpstr:= FieldByName('Tabla1Col1').AsString;
           valreal:= FieldByName('Tabla2Col2').AsFloat;
          if cmpstr >=restr then
            begin
             salida:=true;
             with Datamodule10.ADOTabla2 do
                 begin
                  edit;
                  fieldbyname('Tabla2Col1').asstring:=restr;
                  fieldbyname('Tabla2Col2').asFloat:=valreal;
                 end;
            end;
          Next;
        End;
      Close;
    except
// excepción
      end;
    end;

end;

Esto vale porque los datos de tiempos de tabla 1 están ordenados de menor a mayor (cmpstr).

¿Existe alguna forma en el caso en que no estuvieran ordenados de mayor a menor de que al recorrer la tabla los ordene automáticamente?

¿Hay otra manera más rápida que la anterior?

A ver si hay alguien que me puede ayudar.
Gracias..


La franja horaria es GMT +2. Ahora son las 08:47: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