![]() |
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 :-( |
Re: Panels und Buttons mit sql generieren
|
Re: Panels und Buttons mit sql generieren
Zitat:
Gruß angos |
Re: Panels und Buttons mit sql generieren
Hi
Wenn du mit der BDE gearbeitet hast, dann hast du ja eigentlich auch TQuery. So wie ich es sehe, hast du mit 2 Tabellen gearbeitet, tausch die einfach mal gegen 2 Querys aus und versuch mal das Beispiel von mir. Mit den Querys kannst du dir aber auch eine verknüpfte Tabelle aufbauen. Geh mit der rechten Maustaste ins Query-Object und klick dann den SQL-Builder an. Dann holst du beide Tabellen und ziehst mit gedrückter Maustaste eine Verbindung zu den Feldern, die zusammengehören. Anschließend siehst du dir die SQL-Befehle mal an. Ich kenn zwar die Ado-Objekte nicht, kann mir aber vorstellen, das die SQL gleich oder zumindest sehr ähnlich sind Wie gesagt, wenn du die komplexen SQL's nicht durchschaust, geh den Weg mit 2 Querys nach meinem Vorschlag. Da kannst du auch über Breakpoints mal schrittweise durchgehen, um die Ergebnisse zu prüfen. Gruß oldmax |
Re: Panels und Buttons mit sql generieren
Danke an alle,
es funktioniert, vielleicht etwas unorthodox aber es geht. Erst lass ich die Panels erstellen dann les ich die Captions aus(die heissen ja wie in der DB) dann die Buttons. Mit den Sprüngen Join etc. probier ich später mal, im Moment blick ich nicht durch, da ich kein konkretes Beispiel finde. Danke noch einmal! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 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-2025 by Thomas Breitkreuz