Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Columnas adicionales en TDBGrid (https://www.clubdelphi.com/foros/showthread.php?t=62430)

noob 26-12-2008 00:18:50

Cita:

Empezado por Al González (Mensaje 332206)
Vale, y si le das clic con el botón derecho / secundario del ratón, ¿qué opciones de menú te aparecen?

Sale esto:

Cita:

Empezado por Al González (Mensaje 332206)
Por otro lado, ¿no habrá dentro de ese editor una sección para definir los campos persistentes?

No, únicamente para crear tablas SQLite, de ahí que quiera hacerlo por código.

Al González 26-12-2008 00:27:04

Cita:

Empezado por noob (Mensaje 332209)
Sale esto:



No, únicamente para crear tablas SQLite, de ahí que quiera hacerlo por código.

Cuatro preguntas:

1. ¿Qué hay dentro de la opción "Edit Table"?
2. ¿Qué versión de Delphi utilizas?
3. ¿Tienes algún accesorio (wizard / experto) especial instalado en el IDE?
4. ¿Algún sitio Web de donde podamos descargar una versión gratuita de esos componentes SQLite?

Saludos.

Al.

luisgutierrezb 26-12-2008 00:41:24

Al Gonzalez, Era afirmación...

por lo que veo es Lazarus y ahi si casi no lo eh usado, sin embargo tal vez te pueda servir este codigo:

Código Delphi [-]
FieldTEmp := TStringField.Create(dataset); 
   with FieldTEmp do 
   begin 
        FieldName := 'NewField'; 
        FieldKind := fkLookup; 
        KeyFields := 'character_family'; 
        LookupDataSet := clansDataSet; 
        LookupKeyFields := 'family_id'; 
        LookupResultField := 'family_group'; 
        DataSet := self.dataSet; 
   end; 
   dataSet.FieldDefs.Add(FieldTemp.FieldName, ftString, 50, false); 
   dataSet.Fields.Add(FieldTEmp);

este codigo es para crear un campo en tiempo de ejecucion, es de tipo lookup pero cambiando las propiedades lo puedes hacer calculado, espero que te sirva

Al González 26-12-2008 01:08:29

Cita:

Empezado por luisgutierrezb (Mensaje 332211)
Al Gonzalez, Era afirmación...

Te pido una disculpa Luis. Creí que aquello lo había escrito Noob, pero ahora me doy cuenta que era un comentario tuyo. Lamento la confusión. :o

noob 26-12-2008 01:18:02

Cita:

Empezado por Al González (Mensaje 332210)
Cuatro preguntas:

1. ¿Qué hay dentro de la opción "Edit Table"?
2. ¿Qué versión de Delphi utilizas?
3. ¿Tienes algún accesorio (wizard / experto) especial instalado en el IDE?
4. ¿Algún sitio Web de donde podamos descargar una versión gratuita de esos componentes SQLite?

Saludos.

Al.

1. Está el editor de tablas Sqlite para cree una tabla.
2. Lazarus.
3. No.
4. http://sqlite4delphi.sourceforge.net/

Cita:

Empezado por luisgutierrezb (Mensaje 332211)
Al Gonzalez, Era afirmación...

por lo que veo es Lazarus y ahi si casi no lo eh usado, sin embargo tal vez te pueda servir este codigo:

Código Delphi [-]
 
FieldTEmp := TStringField.Create(dataset);     
with FieldTEmp do     
  begin          
    FieldName := 'NewField';          
    FieldKind := fkLookup;          
    KeyFields := 'character_family';          
    LookupDataSet := clansDataSet;          
    LookupKeyFields := 'family_id';          
    LookupResultField := 'family_group';          
    DataSet := self.dataSet;     
  end;     
dataSet.FieldDefs.Add(FieldTemp.FieldName, ftString, 50, false);     
dataSet.Fields.Add(FieldTEmp);

este codigo es para crear un campo en tiempo de ejecucion, es de tipo lookup pero cambiando las propiedades lo puedes hacer calculado, espero que te sirva

Ahora tengo esto:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject); 
var   
  CampoTemporal: TStringField; 
begin   
  DatasetVentas.Active := True;   
  CampoTemporal := TStringField.Create(DatasetVentas);   
  with CampoTemporal do     
    begin       
      FieldName := 'Campo de búsqueda';       
      Lookup := True;       
      FieldKind := fkLookup;        
      KeyFields := 'Producto'; // Campo de la tabla base en el que se basa la búsqueda       
      LookupDataSet := DatasetProductos; // Tabla de búsqueda       
      LookupKeyFields := 'Codigo'; // Campos de la tabla de búsqueda que se corresponden con los KeyFields de la tabla base       
      LookupResultField := 'Descripcion'; // Campo de la tabla de búsqueda que se toma       
      DatasetVentas := Self.DatasetVentas;     
    end;   
  DatasetVentas.FieldDefs.Add(CampoTemporal.FieldName, ftString, 50, false);   
  DatasetVentas.Fields.Add(CampoTemporal);   
  DatasetVentas.Open; 
end;

Pero sale el DBGrid tal cual como si sólo hubiera hecho DatasetVentas.Open; no aparece ninguna columna adicional. A ver si alguien me echa un cable que parece que por lo menos he visto la forma de hacerlo por código, ahora sólo hace falta que funcione :D

fjcg02 26-12-2008 15:24:43

Hola, yo tengo una función que me crea los campos lookup . Igual os puede ayudar.
Por otro lado, creo que hay que asegurarse de que el DBGrid debe abrirse posteriormente a la creación del campo, ya que si no no estará disponible.
En su día yo tuve problemas con la generación de estos campos en ejecución, y tuve que asegurarme de que el campo se generaba bien recorriendome el dataset y mostrando los campos que tenía.

Saludos

Código Delphi [-]
procedure TForm1.CrearCAmpoLookup(Query: TMDOQuery; Campo, CAmpo_FK, tabla_FK, SQL: string);
var campow: Tfield;
begin
  Campow:= TStringfield.Create(nil);
  CAmpow.Fieldname:= SQLTAblas.FieldByName('NOMBRE_SI_FK').AsString;
  Campow.FieldKind:= fkLookup;
  Campow.Dataset:= Query;
  CAmpow.DisplayLAbel:= SQLTAblas.FieldByName('LABEL_SI_FK').AsString;
  CAmpow.DisplayWidth:= 40;
  Campow.LookupDataSet:= ClonarDataset(SQLFK,
                         ['database','transaction'],
                         SQL);
  Campow.KeyFields:= Campo;
  Campow.LookupKeyFields:= Campo_FK;
  Campow.LookupDataSet.Open;
  Campow.LookupResultField:= CAmpow.LookupDataSet.Fields[1].FieldName;

end;

PepeLolo 29-12-2008 04:30:04

Encontrada esta página con trucos para mostrar distintos componentes dentro de una celda de un dbgrid. Incluye código fuente de ejemplo.


La franja horaria es GMT +2. Ahora son las 10:04:36.

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