![]() |
Projekt: Dynamischer StoredProcedure Viewer
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP Gemeinde,
Ich wollte hier mal ein Projektbegleitenden Thread aufmachen. wo ich euch über den Projektstand informieren kann. Und ihr evtl mir helfen könnt bei Problemen. Wenn dies im DP Board nicht erlaubt ist. Bitte ich den Thread zu löschen :) Es geht sich um ein Programm was auf eine DB2 Zugreifen soll. Sich von der DB2 Die Anzahl der Stored Procedure holen soll plus die Parameter. Dann in einer PageControl soviele TabSheets wie vorhandende Proceduren und soviele TLabeledEdit Felder wie Parameter vorhanden erzeugen. irgendwann soll das programm dann tatsächlich die SP anpsrechen und holt sich datensätze. Momentaner Stand. Screen anhängend! Design fast abgeschlossen. StoredProcedure Namen und Anzahl kriege ich raus. Parameter Anzahl Namen Typ und In/Out kriege ich auch raus. TabSheets werden automatisch erzeugt TLabelededit Werden automatisch beschriftet (Parameternamen) und erzeugt Button wird erzeugt. Grids werden erzeugt! problem. Da ich immer näher zum ende vom design komme! Wie kann ich die einzelnen btns grids und editfelder ansprechen. Wenn ich zum Beispiel ein ONClick ereigniss dranhängen will? Erzeugen tu ich das Dynamische so:
Delphi-Quellcode:
unit TabSheetfrm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls, Grids, StdCtrls; type TfrmTabSheet = class(TForm) pnlTabSheet: TPanel; PageControl: TPageControl; procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } LblEdit: TLabeledEdit; top,left,height,length,counterSheets,counterlblEdit: integer; Sheet: TTabSheet; Grid: TStringGrid; public { Public-Deklarationen } ListeTabSheet: TList; ListelblEdit: TList; pnllbledit: TPanel; pnlgrid: TPanel; excecbtn: TButton; procedure TabSheeterstellung(anzahl: Integer); procedure pnlerstellunglbledit; procedure lblEditerstellung; procedure Sheeterstellung(AktuSpzahl: integer); procedure pnlerstellungGrid; procedure Griderstellung; procedure Excecutebtnerstellung; end; var frmTabSheet: TfrmTabSheet; implementation uses Memofrm, SPViewerMainfrm; {$R *.dfm} { TfrmTabSheet } procedure TfrmTabSheet.TabSheeterstellung(anzahl: Integer); var i: integer; begin top:= 20; left:= 20; height:= 25; length:= 0; counterSheets:= 0; for i:= 0 to anzahl-1 do begin counterlblEdit:= 0; frmMain.ADOQry.SQL.Text:= 'Select * FROM qsys2.sysparms WHERE SPECIFIC_SCHEMA=''KOSYFAREV'' AND SPECIFIC_NAME=''' + frmMain.ProcedureNamen[i] + ''''; frmMain.ADOQry.Open; frmMain.ADOQry.First; while not frmMain.ADOQry.Eof do begin if length < Canvas.TextWidth(frmMain.ADOQry.Fields[4].AsString)then length:= Canvas.TextWidth(frmMain.ADOQry.Fields[4].AsString); frmMain.ADOQry.Next; end; frmMain.ADOQry.First; if frmMain.ADOQry.RecordCount<> 0 then begin Sheeterstellung(i); pnlerstellunglbledit; pnlerstellungGrid; while not frmMain.ADOQry.Eof do lblEditerstellung; Griderstellung; counterSheets:= counterSheets + 1; Excecutebtnerstellung; frmMemo.lblEditerstellt(counterlblEdit); end; length:= 0; height:= 25; top:= 20; left:= 20; end; frmMemo.insgesammtsheet(counterSheets); end; procedure TfrmTabSheet.FormShow(Sender: TObject); begin PageControl.SetFocus; end; procedure TfrmTabSheet.FormCreate(Sender: TObject); begin ListelblEdit:= TList.Create(); end; procedure TfrmTabSheet.lblEditerstellung; begin LblEdit:= TLabeledEdit.Create(self); LblEdit.Parent:= pnllbledit; LblEdit.EditLabel.Caption:= frmMain.ADOQry.Fields[4].AsString; LblEdit.LabelPosition:= lpLeft; LblEdit.Text:= ''; LblEdit.Top:= top; LblEdit.Left:= left + length; LblEdit.Height:= height; top:= top + 20; counterlblEdit:= counterlblEdit + 1; frmMain.ADOQry.next; end; procedure TfrmTabSheet.Sheeterstellung(AktuSpzahl: integer); begin Sheet:= TTabSheet.Create(PageControl); Sheet.Parent:= PageControl; Sheet.Caption:= frmMain.ProcedureNamen[AktuSpzahl]; frmMemo.Tabsheeterstellt(Sheet.Caption); Sheet.PageControl:= PageControl; end; procedure TfrmTabSheet.Griderstellung; begin grid:= TStringgrid.create(self); grid.Parent:= pnlgrid; grid.Left:= 0; grid.RowCount:= 2; grid.DefaultRowHeight:=15; grid.ColCount:= 2; grid.DefaultColWidth:= 60; grid.ColWidths[0]:= 15; grid.Align:= alClient; end; procedure TfrmTabSheet.pnlerstellunglbledit; begin pnllbledit:= TPanel.Create(self); pnllbledit.Parent:= Sheet; pnllbledit.Left:= 0; pnllbledit.Width:= 350; pnllbledit.Align:= alLeft; end; procedure TfrmTabSheet.pnlerstellungGrid; begin pnlgrid:= TPanel.Create(self); pnlgrid.Parent:= Sheet; pnlgrid.Left:= 350; pnlgrid.Align:= alClient; end; procedure TfrmTabSheet.Excecutebtnerstellung; begin excecbtn:= TButton.Create(self); excecbtn.Parent:= pnllbledit; excecbtn.Caption:= 'Excecute SP'; excecbtn.Top:= top + 30; excecbtn.Left:= length+left; end; end. |
Re: Projekt: Dynamischer StoredProcedure Viewer
Wenn du uns jetzt noch verrätst für welche DAtenbank der StoreProcedure Viewer sein soll können wir die vielleicht auch eher helfen. Mir fallen da spontan mehrere DB's ein die StoredProcedures unterstützen (ORACLE, Inerbase, Firebird, MySQL, ...).
|
Re: Projekt: Dynamischer StoredProcedure Viewer
Hab ich getan :P
DB2 datenbank :) immoment geht es sich noch nicht um die anbindung zur datenbank das klappt immoment noch! Es geht sich das ich wahllos labelededit felder und buttons und grids erstelle :) ich aber nachher auf die zugreifen möchte :) |
Re: Projekt: Dynamischer StoredProcedure Viewer
Zitat:
Aber besser einmal zuviel wie zu wenig gefragt... So ein Teil würde mich nämlich auch interessieren, allerdings aber für ORACLE. |
Re: Projekt: Dynamischer StoredProcedure Viewer
Hallu,
Ich habe eine Frage, Und zwar wenn ich das Programm starte dauert es einige Zeit bis der sich alle infos holt und alle Sheets erstellt! Kann ich dem irgendwie sagen beim ersten start baue dich. Beim 2ten Start behalte das aussehen wie beim ersten start damit es schneller geht! Oder Baue dich neu wenn es eine änderung gibt?? wie kann man das lösen? |
Re: Projekt: Dynamischer StoredProcedure Viewer
Dann müsstest du einfach alles abgefragte Speichern, mit den dazugehörigen Werten und diese dann mit der DB vergleichen. Wenn sich nichts verändert hat, dann kannst du die gespeicherten nehmen.
Anders wirst du das wohl nicht lösen können, aber da er ja wieder abfragen muss, find ich kannst du es gleich jedes mal machen lassen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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