En el stringGrid tienes la columna 3 con el código del producto. Teniendo la tabla tarifas, te sale más fácil, ya que en esa tabla tienes el código del producto y el tipo de tarifa:
Código Delphi
[-]
DM.ZQActualizaListaPrecio.Close;
DM.ZQActualizaListaPrecio.SQL.Clear;
DM.ZQActualizaListaPrecio.SQL.Add('SELECT precio FROM Tarifas');
DM.ZQActualizaListaPrecio.SQL.Add('Where CodProducto = :codigo');
DM.ZQActualizaListaPrecio.SQL.Add('and Tipo_Tarifa = :Tarifa');
DM.ZQActualizaListaPrecio.prepare;
with DM.ZQActualizaListaPrecio DO
For i:=0 to SGListaProductos.RowCount-1 Do
Begin
ParamByName('codigo').AsInteger := StrToInt(SGListaProductos.Cells[3,i]);
ParamByName('Tarifa').AsString = combobox1.items[combobox1.Itemindex];
Open; if not IsEmpty then
SGListaProductos.Cells[7,i] := Fieldbyname('Precio').AsString;
else
begin
ShowMessage('No existe El tipo de tarifa para el producto' + StrToInt(SGListaProductos.Cells[3,i]));
SGListaProductos.Cells[7,i] := '<< Error >>';
end;
Close; End;
Edito:
Como ahora el usuario es el que creará los "tipos de tarifas", en el combobox1 (el combo de precios) tendrás que cargarlo dinámicamente, por ejemplo al crear la ventana, usando un TZQuery convenientemente preparado:
Código SQL
[-]
select distinct Tipo_Tarifa from Tarifas
y ya en el Oncreate de la ventana:
Código Delphi
[-]
qryTiposTarifas.Open;
Combobox1.items.Clear;
qryTiposTarifas.DisableControls; combobox1.items.BeginUpdate; while not qryTiposTarifas.eof do
begin
Combobox1.Items.Add(qrytiposTarifas.Fields[0].AsString;
qryTiposTarifas.Next;
end;
qryTiposTarifas.Close;
qryTiposTarifas.EnableControls; combobox1.Items.EndUpdate;
Saludos