![]() |
Datenbank: dbf • Zugriff über: bde
Panels und Buttons mit sql generieren
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 ! |
Re: Panels und Buttons mit sql generieren
Ich würde das mit 2 schleifen lösen.
Äußere Schleife für Panels über die Abfrage:
SQL-Code:
Dann ein Detaildataset für den äußeren Master.
select id, gruppenname from tabellea;
|
Re: Panels und Buttons mit sql generieren
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:
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...
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; Hoffe, es hilft dir Gruß oldmax |
Re: Panels und Buttons mit sql generieren
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; |
Re: Panels und Buttons mit sql generieren
SQL-Code:
select * from t2 left outer join t1 on t2.name=t1.gruppe
|
Re: Panels und Buttons mit sql generieren
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! |
Re: Panels und Buttons mit sql generieren
ok,
da muss die SQL-Anweisung noch ein bisschen angepasst werden:
SQL-Code:
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.
select * from t2 left outer join t1 on t2.name=t1.gruppe
Order by t2.name 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; |
Re: Panels und Buttons mit sql generieren
Danke
also doch zwei verschiedene Querys, seh ich das richtig? @mkinzler was ist mit Detaildataset gemeint? |
Re: Panels und Buttons mit sql generieren
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.
|
Re: Panels und Buttons mit sql generieren
Danke mkinzler
aber das soll einer verstehen... ich jedenfalls nicht :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz