PDA

Ver la Versión Completa : Obtener de una tabla el valor que mas se aproxime de otra tabla en un DBgrid


alquimista
17-07-2008, 00:14:57
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.

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:

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..