Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Projekt: Dynamischer StoredProcedure Viewer (https://www.delphipraxis.net/97377-projekt-dynamischer-storedprocedure-viewer.html)

r3v0 9. Aug 2007 14:12


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.

dfried 9. Aug 2007 14:18

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, ...).

r3v0 9. Aug 2007 14:21

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 :)

dfried 9. Aug 2007 14:40

Re: Projekt: Dynamischer StoredProcedure Viewer
 
Zitat:

Zitat von r3v0
Hab ich getan :P

Sorry, hab ich übersehen :-)
Aber besser einmal zuviel wie zu wenig gefragt...

So ein Teil würde mich nämlich auch interessieren, allerdings aber für ORACLE.

r3v0 10. Aug 2007 08:58

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?

quendolineDD 10. Aug 2007 14:35

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 20:55 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