Ver Mensaje Individual
  #5  
Antiguo 23-12-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Reputación: 16
noob Va por buen camino
Cita:
Empezado por Fenareth Ver Mensaje
Cita:
Empezado por noob
...pero que no se almacene en la base de datos...
...porque todo lo que meto no se guarda ni mediante código...
Hola noob

Soy yo o eso me suena un poco contradictorio ????
Fenareth, no es contradictorio porque esa información no quiero que se guarde en la base de datos pero sí quiero que se guarde temporalmente en memoria principal mientras se está ejecutando mi aplicación.

Cita:
Empezado por luisgutierrezb
lo que necesitas es crear un campo calculado, en el dataset boton derecho del mouse en la opcion field Editor, ahi podras crear uno nuevo y lo veraz en el dbgrid, modificas el valor en el evento oncalcfields
Supongo que eso dependerá del tipo de Dataset utilizado porque en mi caso no veo dicha opción.

Cita:
Empezado por Caro
Hola noob, creo que deberías explicar un poco mas para que necesitas tu nuevo campo, ¿pertenece a tu tabla?, si utilizas un ClientDataSet todo lo que vayas registrando e inclusive campos temporales se almacenan en memoria hasta que no apliques ApplyUpdates, menos en el caso de que te crees un campo en memoria, ya que no estara en tu tabla.

Saluditos
Hola Caro, te explico un poco, tengo una tabla Ventas con los campos Producto Unidades Precio Proveedor, el campo Producto mostrará el código de producto (en mi base de datos tengo también una tabla Productos con los campos Codigo y Descripcion). Lo que hago es esto:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  ListaProductos: TStringList;
  i: integer;
begin
  ListaProductos := TStringList.Create;
  with BaseDatos.Tabla('Producto') do
    try
      Active := true;
      First;
      DisableControls;
      while not EOF do
        begin
          ListaProductos.Add(FieldByName('Codigo').AsString);
          Next;
        end;
    finally
      Active := false;
      for i := 0 to DBGrid1.Columns.Count - 1 do
        begin
          if (DBGrid1.Columns[i] as TColumn).FieldName = 'Producto' then
            begin
              DBGrid1.Columns[i].PickList := ListaProductos;
              Break;
            end;
        end;
      EnableControls;
      ListaProductos.Free;
    end;
end;

De este modo en el campo Producto del TDBGrid tengo todos los códigos de producto que hay en la tabla Productos listos para que el usuario escoja uno de ellos. El problema es que yo quiero añadir una columna adicional para que me muestre también la descripción del producto ya que seleccionar el producto "PR0034" puede que no diga mucho sin embargo si selecciono el producto "PR0034" y nada más seleccionarlo se me rellena la columna de al lado con "2 GB Memoria RAM DDR 400 MHz" entonces el usuario sabe bien qué producto ha cogido, pero claro esa información adicional no ha de guardarse en la tabla Ventas sino que sólo ha de mostrarse para dar información adicional al usuario.

Lo que hago es crear esa columna nueva:

Código Delphi [-]
DBGrid1.Columns.Add.Title.Caption := 'Descripcion';

Pero no sé cómo asignar al contenido de la celda de la nueva columna la descripción del producto cuyo código es el seleccionado. Primero porque no encuentro un evento que se dispare al escoger un código del PickList (el que más se ajusta a lo que quiero es el evento OnColExit del TDBGrid) y segundo porque no veo ninguna propiedad que sea el contenido de una celda.

Espero haberme explicado.

Saludos.

Última edición por noob fecha: 23-12-2008 a las 16:48:04.
Responder Con Cita