AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Panels und Buttons mit sql generieren
Thema durchsuchen
Ansicht
Themen-Optionen

Panels und Buttons mit sql generieren

Ein Thema von Privateer3000 · begonnen am 20. Mär 2008 · letzter Beitrag vom 21. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#1

Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 11:31
Datenbank: dbf • Zugriff über: bde
Hiho Gemeinde,

für mein folgendes Problem habe ich keine Lösung
gefunden oder nicht als solche für mich erkannt.

Mittels zwei Tabellen sollen Panels und Buttons generiert werden.
Aus Tabelle A Spalte Gruppenname werden Panels erstellt.
Zugehörig dazu ein oder mehrere Buttons aus Tabelle B mit
Spalte Name - Spalte Gruppenname(analog Tabelle A Spalte Gruppenname)
in beiden Tabellen sind die Gruppennamen vorhanden damit die Buttons den
Panels zugeordnet werden können.

wie muss eine sql-abfrage aussehen?

Viele Grüße und laßt die Osterhasen leben !
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 11:44
Ich würde das mit 2 schleifen lösen.
Äußere Schleife für Panels über die Abfrage:
select id, gruppenname from tabellea; Dann ein Detaildataset für den äußeren Master.
Markus Kinzler
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#3

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 13:02
Hi
Nun ja, ich weiß jetzt nicht so recht, was du sehen willst, daher mal meinen Ansatz:
Ich habe eine Tabelle, in denen Panels beschrieben sind
also
ID - Für die eindeutige Zuordnnung in der DB
PN_Name - PanelName
PN_Top - y-Position auf der Form
PN_Left -x-Position auf der Form
PN_Width - Weite
PN_Heigth- Höhe
PN_Color - Farbe
usw. also alles, was über das Panel wichtig ist....

Nun kommt die Tabelle der Buttons
ID- für die eindeutige Zuordnung in der DB
BT_Name - ButtonName
BT_Top - y-Position auf dem Panel !!
BT_Left - x-Position auf dem Panel !!
usw... auch wieder alles, was zum Button gehört
zusätzlich einen Zeiger auf den ID des Panels
Bt_Parent_Id vom Typ Integer oder LongInt

Nun die Installation
Ich schreibe mir immer einen SQLString, den ich dann per Add der Query zuweise

Delphi-Quellcode:
MySQLStr:='Select * From PanelTabelle';
  MyPanelQuery. Close;
  MyPanelQuery.SQL.Clear;
  MyPanelQuery.SQL.Add(MySQLStr);// ist mit Haltepunkt immer leicht zu kontrollieren
  MyPanelQuery.Open; // auch wenns eine richtig umfangreiche SQL -Abfrage ist
  If MyPanelQuery.RecordCount>0 then
  Begin
    MyPanelQuery.First;

    For i:=MyPanelQuery.RecordCount-1 do
    Begin
     ...... // Installation der Panels
     MySQLStr:='Select * From ButtonTabelle';
     MySQLStr:=MySQLStr+' Where (Bt_Parent_Id=+'''+IntToStr(MyPanelQuery['Ident'])+''')';
     MyButtonQuery. Close;
     MyButtonQuery.SQL.Clear;
     MyButtonQuery.SQL.Add(MySQLStr);
     MyButtonQuery.Open;
     If MyButtonQuery.RecordCount>0 then
     begin
       MyButtonQuery.First;
       For j :=0 to MyButtonQuery.RecordCount-1 do
       begin
         ...... // Installation der Buttons
         MyButtonQuery.Next;// nicht vergessen
       end;
     end;
     MyPanelQuery.Next;
   end;
 end;
Natürlich kannst du auch auf MyPanel['Panel_Name'] suchen und den BT_Parent_Id entsprechend mit dem Panelnamen belegen. Kann aber leicht ins Auge gehen, wenn die Zugriffe mal per Hand eingegeben werden und bspw. Leerzeichen im Namen stehen...
Hoffe, es hilft dir
Gruß oldmax
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 13:29
Hallo und Danke ersteinmal,
im Moment sieht es so aus wie im folgenden Code.
Da steuer ich dies mit bde, also t1.first usw.
da ich nun auf ADO umstelle muss dies mit sql erfolgen.
Kann man mit einem und dem selben query in einer Schleife
abfragen? Wird dieser nicht jedesmal mit "clear" gesäubert?
Oder sollten dafür 2 Querys benutzt werden?!
Delphi-Quellcode:
t2.First;
while not t2.Eof do begin
  tpa:=TsPanel.Create(Self);
  grunam:=t2.FieldByName('NAME').AsString;
  tpa.Parent:=mainpanel;
  tpa.Visible:=true;
  tpa.Left:=316;
  tpa.Top:=260;
  tpa.Height:=393;
  tpa.Width:=694;
  tpa.Name:='panb'+IntToStr(ianz);
  tpa.Caption:='';
  (Findcomponent('panb0') as Tpanel).bringtofront;
  i:=0;
  t1.Filter:='GRUPPE='+QuotedStr(grunam);
  t1.Filtered:=True;
  t1.First;
while not t1.eof do begin
  Spalte := i mod 6;
  Zeile := i div 6;
  butsleft:=t1.fieldByName('SETLEFT').AsInteger;
  butstop:=t1.fieldByName('SETTOP').AsInteger;
  aLabel:=TXiButton.Create(Self);
  aLabel.Parent:=findcomponent('panb'+Inttostr(ianz))as TPanel;
  aLabel.Visible:=True;
  if (butsleft = 0) AND (butstop = 0) then begin
  aLabel.Left:=Spalte*115; aLabel.Top:=Zeile*45; end else begin
  aLabel.Left:=butsleft; aLabel.Top:=butstop; end;
  alabel.Width:=113;
  alabel.Height:=43;
  aLabel.ShowHint:=True;
  aLabel.Font.Size:=t1.fieldbyname('FOGR').AsInteger;
  aLabel.Font.Style:=[fsbold];
  aLabel.Hint:=t1.fieldbyname('ANAME').asString;
  aLabel.ColorScheme:=GetColorScheme(t1.fieldbyname('FARBE').AsString);
  aLabel.Caption:=t1.fieldbyname('kurz').AsString;
  aLabel.Tag:=t1.FieldByName('anr').AsInteger;
  aLabel.OnClick:=kassbutclick;
  //aLabel.OnMouseDown:=FormMouseDown;
  //aLabel.OnMouseUp:=FormMouseUp;
  //aLabel.OnMouseMove:=FormMouseMove;
  t1.Next;
  inc(i);
end;
t1.Filtered:=False;
t2.Next;
inc(ianz);
end;
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 14:57
select * from t2 left outer join t1 on t2.name=t1.gruppe
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 15:29
Danke,
jetzt kann ich mir nicht vorstellen wie nach dieser
sql-anweisung erst die Panel dann die Buttons gezeichnet
werden sollen. Denn die muss ja so sein, da die Buttons
parent zu den Panels sind!

Danke und Grüße!
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 16:21
ok,

da muss die SQL-Anweisung noch ein bisschen angepasst werden:

SQL-Code:
select * from t2 left outer join t1 on t2.name=t1.gruppe
Order by t2.name
Nun kannst du die Datenquelle ja einfach nacheinander abarbeiten, jedesmal wenn sich t2.name ändert erstellst du das panel und den Button ansonsten nur den Button.

so in der Art sollte das dann gehen
Delphi-Quellcode:
  sPnl := '';
  
  Query.First;
  while not Query1.eof do
  begin
    if sPnL <> Query.FieldByName('NAME').asString then
    begin
      sPnl := Query.FieldByName('NAME').asString;
      ErezugePanel;
    end;
     
    ErzeugeButton;

    Query.Next; // EDIT: Query.Next sollte nicht fehlen :)
  end;
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 16:47
Danke

also doch zwei verschiedene Querys,
seh ich das richtig?

@mkinzler
was ist mit Detaildataset gemeint?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 16:55
Ein Detaildataset wird über die Eigenschaft MasterSource mit einem Master-DataSet (wäre in deinem Fall die Panels) verknüpft. beim Wechseln des aktuellen Datensatzes des Masters, reagiert dieses dann mit der Filterung der zugeordneten Buttons.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Panels und Buttons mit sql generieren

  Alt 20. Mär 2008, 18:57
Danke mkinzler
aber das soll einer verstehen...
ich jedenfalls nicht
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:51 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