Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi prozeduren auslagern (https://www.delphipraxis.net/107850-prozeduren-auslagern.html)

SaFu 3. Feb 2008 14:26


prozeduren auslagern
 
Ich weis das dieses Thema schon oft behandelt wurde, habe auch etwas hier schon nach gelesen.
Aber ich komme nicht auf die Lösung.

Wie bekomme ich meine Procedure ausgelagert in eine andere Unit.
Und wie Rufe ich Sie wieder auf.

Habe das soweit geschrieben damit erzeuge ich eine Datenbank ich habe davon noch mehr und würde sie gerne alles auslagern.

Die Komponenten sitzen aber auf der Form1 geht das so überhaupt??

Delphi-Quellcode:
unit Datenbankerzeugen;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,DB, DBTables,
  ComCtrls, Buttons, ColorGrd;

type
 TDatenbankerzeugen = class(TForm)
 procedure tabelleerst;

  private
   pfad : string;
  end;

implementation

Uses Unit1,unit10;

//======================Benutzertabelle erstellen===============================
procedure TDatenbankerzeugen.Tabelleerst;
begin
Form1.Table1.close;
  getdir(0,Pfad);
   With Form1.Table1 Do //Tabelle erzeugen
     begin
      DatabaseName:= Form1.Serverpfad + 'Datenbank\'; //Pfad zur Tabelle
      Form10.Table1.DatabaseName:= Form1.Serverpfad + 'Datenbank\';
      TableName:= 'Benutzerverwaltung.DB';
      TableType:= ttParadox;
     end;
      if not FileExists( Form1.Serverpfad + 'Datenbank\Benutzerverwaltung.DB') then
        begin
          With Form1.Table1 Do
            begin
              with FieldDefs Do //Datenfelder erzeugen
                begin
                 Clear;
                 Add('Nr.',ftAutoInc,0,True);
                 Add('Benutzername',ftString,30,True);
                 Add('Passwort',ftString,30,False);
                 Add('Administrator',ftboolean,0,False);
                 Add('Versuche',ftInteger,0,False);
                 Add('Gesperrt',ftString,5,False);
                end;
                  with IndexDefs do //Index Schlüssel erzeugen
                   begin
                    Clear;
                    Add('Nr','Nr.',[ixPrimary, ixUnique]); // Primär Index
                   end;
                    CreateTable;
                      begin  //User erzeugen
                       Form1.Table1.Open; //Tabelle öffnen zum Schreiben
                       Form1.Table1.Edit;
                       Form1.Table1['Benutzername']:= 'Admin';
                       Form1.Table1['Passwort']:= '123';
                       Form1.Table1['Administrator']:= True;
                       Form1.Table1['Versuche']:= 0;
                       Form1.Table1['Gesperrt']:= 'Nein';
                       //Table1['Versuche']:= 'Nein';
                       Form1.Table1.Post; //Eintrag übernehmen
                       Form1.Table1.Close; //Tabelle schließen
                      end;
                end;
        end;
     Form1.Table1.Active:= True; //Tabelle1 auf Form1 aktivieren
     Form10.Table1.Active:= True; //Tabelle1 auf Form10 aktivieren
end;
end.

mkinzler 3. Feb 2008 14:32

Re: prozeduren auslagern
 
Übergebe die Form als Parameter.

BTW. Man sollte vermeiden feste Instanzen zu adressieren!!!!

SaFu 3. Feb 2008 14:34

Re: prozeduren auslagern
 
Zitat:

Zitat von mkinzler
Übergebe die Form als Parameter.

BTW. Man sollte vermeiden feste Instanzen zu adressieren!!!!

:stupid: Was meinst du damit

SaFu 3. Feb 2008 14:39

Re: prozeduren auslagern
 
meinst du etwa so??
Delphi-Quellcode:
unit Datenbankerzeugen;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,DB, DBTables,
  ComCtrls, Buttons, ColorGrd;

  procedure tabelleerst;

implementation

Uses Unit1,unit10;

//======================Benutzertabelle erstellen===============================
procedure Tabelleerst;
Var pfad : string;
begin

Form1.Table1.close;
  getdir(0,Pfad);
   With Form1.Table1 Do //Tabelle erzeugen
     begin
      DatabaseName:= Form1.Serverpfad + 'Datenbank\'; //Pfad zur Tabelle
      Form10.Table1.DatabaseName:= Form1.Serverpfad + 'Datenbank\';
      TableName:= 'Benutzerverwaltung.DB';
      TableType:= ttParadox;
     end;
      if not FileExists( Form1.Serverpfad + 'Datenbank\Benutzerverwaltung.DB') then
        begin
          With Form1.Table1 Do
            begin
              with FieldDefs Do //Datenfelder erzeugen
                begin
                 Clear;
                 Add('Nr.',ftAutoInc,0,True);
                 Add('Benutzername',ftString,30,True);
                 Add('Passwort',ftString,30,False);
                 Add('Administrator',ftboolean,0,False);
                 Add('Versuche',ftInteger,0,False);
                 Add('Gesperrt',ftString,5,False);
                end;
                  with IndexDefs do //Index Schlüssel erzeugen
                   begin
                    Clear;
                    Add('Nr','Nr.',[ixPrimary, ixUnique]); // Primär Index
                   end;
                    CreateTable;
                      begin  //User erzeugen
                       Form1.Table1.Open; //Tabelle öffnen zum Schreiben
                       Form1.Table1.Edit;
                       Form1.Table1['Benutzername']:= 'Admin';
                       Form1.Table1['Passwort']:= '123';
                       Form1.Table1['Administrator']:= True;
                       Form1.Table1['Versuche']:= 0;
                       Form1.Table1['Gesperrt']:= 'Nein';
                       Form1.Table1.Post; //Eintrag übernehmen
                       Form1.Table1.Close; //Tabelle schließen
                      end;
                end;
        end;
     Form1.Table1.Active:= True; //Tabelle1 auf Form1 aktivieren
     Form10.Table1.Active:= True; //Tabelle1 auf Form10 aktivieren
end;
end.

mkinzler 3. Feb 2008 14:40

Re: prozeduren auslagern
 
Da deine Funktion so eng mit deinem Programm verbunden ist, macht eine Auslagerung wenig sinn.

Mit festen Instanzen meine ich Form1, Form19 usw.

SaFu 3. Feb 2008 14:44

Re: prozeduren auslagern
 
Ich wollte halt nur den Quelltext für die Datenbanken in eine Unit schreiben, da demnächst so an die 20 Dadtenbanken noch dazu kommen.

Und Deshalb wollte ich das etwas sotiert haben und übersichtlicher.

Ist das den Falsch wenn ich das so mach rein vom Programmieren her.

Habe es auch schon wie ich dann die Procedure in einer anderen Unit aufrufe.

Delphi-Quellcode:
Datenbankerzeugen.tabelleerst;
War ja garnet so schwer

Matze 3. Feb 2008 14:48

Re: prozeduren auslagern
 
Ich würde auf alle Fälle versuchen, das allgemeiner zu programmieren, sicher hast du durch OOP auch einige Vorteile, wobei ich nicht weiß, welche 20 Dinge dazu kommen.

Sonst übergibt lieber im Parameter ein TTable-Objekt und arbeite mit diesem dann, damit die Funktion unabhängig von Formularen und den darauf sitzenden Controls ist:

Delphi-Quellcode:
procedure Tabelleerst(MyTable: TTable);
Nur um eine Verbesserung zu nennen.

SaFu 3. Feb 2008 14:55

Re: prozeduren auslagern
 
Ich kpier das nicht so ganz.

Wie bekomme ich die Verbindung zur Komponete her??

mkinzler 3. Feb 2008 14:57

Re: prozeduren auslagern
 
In dem du diese der Prozedur übergibst:

Delphi-Quellcode:
Tabelleerst( Form1.Table);

Matze 3. Feb 2008 14:59

Re: prozeduren auslagern
 
Das Beispiel zu Form1.Table könnte grob so aussehen:

Delphi-Quellcode:
procedure Tabelleerst(MyTable: TTable);
var
  pfad : string;
begin
  MyTable.Close;

// ...
Der Aufruf der Prozedur erfolgt aus Form1 dann so:

Delphi-Quellcode:
Tabelleerst(Table1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

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