AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Sichtbarkeit von Tabellenfeldern
Thema durchsuchen
Ansicht
Themen-Optionen

Sichtbarkeit von Tabellenfeldern

Ein Thema von barnti · begonnen am 2. Feb 2004 · letzter Beitrag vom 3. Feb 2004
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Sichtbarkeit von Tabellenfeldern

  Alt 2. Feb 2004, 07:50
Hallo,

Ich habe die Sichtbarkeit aller Felder aller Tabellen in einer weiteren sog. Konfigurationstabelle abgelegt. Soll jetzt der Inhalt einer Tabelle in einem DBGrid angezeigt werden, so lade ich erst alle Daten der betreffenden Tabelle über eine Query in ein Dataset:

Query.sql.add('SELECT * FROM Tabelle'); Anschließend lese ich aus der Konfigurationstabelle das Attribut für die Sichtbarkeit der Felder dieser Tabelle:

Delphi-Quellcode:
...

for i:=0 to Datasource.DataSet.FieldCount-1 do
  begin
    Datasource.DataSet.Fields[i].Visible:= visability[i+1]='1';
    Datasource.DataSet.Next;
  end;
Das Attribut "visability" ist ein String der Form: '001010011011'. Die Sichtbarkeit wird jedem Feld im Dataset über die Schleife zugeordnet. So weit klappt das auch.

Will ich jetzt ebenfalls zur Laufzeit das Grid mit der Datasource verbinden, mache ich das folgende:

Delphi-Quellcode:
...

 with Grid do
  begin
    for ColCount:=0 to DataSource.DataSet.FieldCount-1 do
      Fields[ColCount].Visible:= DataSource.DataSet.Fields[ColCount].Visible;
        end;
Leider sind immer alle Felder sichtbar!? Wo ist mein Fehler?

Danke und Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Sichtbarkeit von Tabellenfeldern

  Alt 2. Feb 2004, 08:09
Ich habe dazu noch folgendes:

Zitat:

...

with Grid do
begin
for ColCount:=0 to DataSource.DataSet.FieldCount-1 do
Fields[ColCount].Visible:= DataSource.DataSet.Fields[ColCount].Visible;
end;
Wenn ich mir DataSource.DataSet.Fields[ColCount].Visible ausgeben lasse sind alle Felder sichtbar. Das Problem ist also, dass die vorherige Zuweisung des Visible-Atributes nicht dauerhaft gespeichert bleibt. Wie kann ich das ändern? Oder liegt der Fehler an einer anderen Stelle?

Danke und Gruß,

Barnti
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Sichtbarkeit von Tabellenfeldern

  Alt 3. Feb 2004, 07:00
Hi,

bisher leider noch keine Antwort . Daher dieser 'Nachhaker':

Hat die Darstellung von Feldern im Dataset und schließlich im Grid etwas mit persistenten Feldern zu tun? Heißt das, ich muss die Felder zur Laufzeit hinzufügen und nicht automatisch alle Felder übernehmen? Ich habe keine Erfahrung mit diesem Thema.

Gruß,

Barnti
  Mit Zitat antworten Zitat
jlanger

Registriert seit: 26. Jan 2004
Ort: Wittlich
15 Beiträge
 
#4

Re: Sichtbarkeit von Tabellenfeldern

  Alt 3. Feb 2004, 15:45
Zitat von barnti:
Hallo,

Will ich jetzt ebenfalls zur Laufzeit das Grid mit der Datasource verbinden, mache ich das folgende:

Delphi-Quellcode:
...

 with Grid do
  begin
    for ColCount:=0 to DataSource.DataSet.FieldCount-1 do
      Fields[ColCount].Visible:= DataSource.DataSet.Fields[ColCount].Visible;
        end;
Leider sind immer alle Felder sichtbar!? Wo ist mein Fehler?

Danke und Gruß,

Barnti
Mache doch einfach, was du geschrieben hast: DAS GRID ZUR LAUFZEIT MIT DER DATASOURCE (neu) VERBINDEN, sonst nichts.

Also einfach

Delphi-Quellcode:
   Grid.DataSource:=nil;
   Grid.DataSource:=DataSource;
Das wars schon. oder hast du vorher dem Grid Felder zugeordnet?
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Sichtbarkeit von Tabellenfeldern

  Alt 3. Feb 2004, 20:08
Hi,

ich habe mittlerweile, nach langem Suchen, die Antwort gefunden. Will man die Eigenschaften eines Feldes nutzen, so muss man persistente Felder für ein Dataset erzeugen.

Nutzt man die Felder dynamisch, soll heißen man öffnet einfach die Query, so werden alle Felder automatisch erzeugt. Damit bleiben aber viele Eigenschaften nicht nutzbar.

Fügt man die Felder als persistent hinzu kann man Eigenschaften, wie 'readonly', 'visible' und 'CustomConstraint' nutzen und diese einfach an andere Elemente weitergeben.

schnipp
Delphi-Quellcode:
procedure TDM_Database.CreatePersistentFields(Datasource: TDatasource);
var i: Integer;
begin
  Datasource.DataSet.Open;
  for i := 0 to Datasource.DataSet.FieldDefs.Count -1 do
  begin
      Datasource.DataSet.Close;
      Datasource.DataSet.FieldDefs.Items[i].CreateField(self);
    end;
end; // Gefunden in DP-Suche: Persistente Felder
schnapp

Dann funktioniert auch Dein Vorschlag problemlos: einfach DBGrid mit Datasource verbinden. Die Eigenschaften der Felder sind dieselben. Damit können die Eigenschaften der Felder im DBGrid benutzt werden.

Danke für Deine Mühe,

Gruß,

Barnti
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz