![]() |
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. |
Re: prozeduren auslagern
Übergebe die Form als Parameter.
BTW. Man sollte vermeiden feste Instanzen zu adressieren!!!! |
Re: prozeduren auslagern
Zitat:
|
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. |
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. |
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:
War ja garnet so schwer
Datenbankerzeugen.tabelleerst;
|
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:
Nur um eine Verbesserung zu nennen.
procedure Tabelleerst(MyTable: TTable);
|
Re: prozeduren auslagern
Ich kpier das nicht so ganz.
Wie bekomme ich die Verbindung zur Komponete her?? |
Re: prozeduren auslagern
In dem du diese der Prozedur übergibst:
Delphi-Quellcode:
Tabelleerst( Form1.Table);
|
Re: prozeduren auslagern
Das Beispiel zu Form1.Table könnte grob so aussehen:
Delphi-Quellcode:
Der Aufruf der Prozedur erfolgt aus Form1 dann so:
procedure Tabelleerst(MyTable: TTable);
var pfad : string; begin MyTable.Close; // ...
Delphi-Quellcode:
Tabelleerst(Table1);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 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