Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   crear un campo lookup de forma dinamica y mostrarlo en un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=40698)

loxod 23-02-2007 22:55:02

crear un campo lookup de forma dinamica y mostrarlo en un dbgrid
 
Quiero crear un campo lookup de forma dinamica y mostrar este nuevo campo en un dbgrid.

Tengo el siguiente procedimiento


**************************************************************************************************** *****************************
Código Delphi [-]
Procedure TForm.AddCalcStringField(Table1, Table2: tDataset; fName,fDisplay:String;
                                           Size:Integer; Keyfield1, Result : String);
var
  f : TField;
  i : integer;
begin
  table1.Close;
  for i := 0 to table1.FieldDefs.Count - 1 do
    if table1.FindField(table1.FieldDefs[i].Name) = nil then
       table1.FieldDefs.Items[i].CreateField(table1);

  if table1.FindField(fName) <> nil then Exit;

  f := TStringField.Create(Table1);
  f.DisplayLabel := fDisplay;
  f.DisplayWidth := Size;
  f.fieldKind := fkLookup;
  f.FieldName := fName;
  f.Index := Table1.FieldCount;
  f.Keyfields:= Keyfield1;
  f.lookupDataSet:=table2;
  f.LookupKeyfields :=  Keyfield1;
  f.LookupResultField:=  Result;
  f.Name := Table1.Name+fName;
  f.Size := Size;

  f.Visible := True;
  f.DataSet := Table1;
  Table1.Open;
  f.Free;

  dbgrid.Columns.Add;
  dbgrid.Columns[Table1.FieldCount].FieldName := fName;
  dbgrid.Columns[Table1.FieldCount].Title.Caption :=fDisplay;
  dbgrid.Columns[Table1.FieldCount].Title.Alignment := taCenter;
  dbgrid.Columns[Table1.FieldCount].Title.Font.Style := [fsbold];
  dbgrid.Columns[Table1.FieldCount].Width := 100;

end;
**************************************************************************************************** *****************************

Cuando yo ejecuto la aplicacion el campo lookup no se muestra en el dbgrid.



Alguna idea de que es lo que esta mal.
Table1 y Table2 son generados en runtime



De antemano les agradesco su ayuda

LordRF 23-02-2007 23:41:02

Hola,

no se si sera el error pero despues de abrir la table liberas el Create F. y asi lo mandas a nirvana.

luisgutierrezb 24-02-2007 00:57:25

Creo que el error esta en esta linea:

if table1.FindField(fName) <> nil then Exit;

o sea, si lo encuentra, quiere decir que es diferente de nil, entonces se sale del procedimiento

if table1.FindField(fName) = nil then Exit;

un signo de igual arregla el problema

loxod 24-02-2007 02:44:52

Lo que pasa es que en la linea

if table1.FindField(fName) <> nil then Exit;

pregunto si existe el campo, si no continua para su creacion

luisgutierrezb 24-02-2007 18:39:23

coincido en que tambien liberas el campo antes de añadirlo al grid... al destruir la tabla te debe destruir los campos

loxod 28-02-2007 17:52:17

Volvi a liberar el campo y esta ves si funciono bien.

Gracias a todos por su ayuda.


La franja horaria es GMT +2. Ahora son las 11:38:25.

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