![]() |
Neues Form aus procedure...
Mein programm sieht vor nun (die procedure erzeugt eine neue ACCESS-DB) dass ein neues Form aufgeht in dem ich einmalig die Startparameter erfasse. Wenn ich nun Form2.showmedal; schreibe bekomme ich einen Speicherfehler
Wie rufe ich denn nun das 2. Form auf??? Leon. |
Re: Neues Form aus procedure...
Hi Leon,
wird denn das zweite Formular auch erstellt? Dazu solltest du mal einen Blick in die Projektoptionen, Registerkarte "Formulare" werfen. Ist Form2 nicht in der Liste der automatisch erstellten Formulare, dann musst du es mit ![]() Greetz alcaeus |
Re: Neues Form aus procedure...
Zeig doch mal, wann du das Form aufrufst. Falls dieser Aufruf im Create eines anderen Forms ist, ist das Form2 einfach noch nicht da.
|
Re: Neues Form aus procedure...
Hmmm...
also das form2 steht dadrin. was habe ich gemacht? ich habe eine procedure geschrieben, in der ich wiederum eine weitere procedure aufrufe... das funzt. die 2te procedure heisst DBErstellen und erstellt zunächst einmal mit der ADOX-Komponennte die mdb-DB. dann erstelle ich eine Tabelle mit dem namen Vereinsdaten... (es wird eine Vereinsverwaltung ;o) ). nachdem ADOCommand1.Execute; vom Tabellen create lasse ich mir zur kontrolle noch ein showmessage anzeigen. Das klappt auch noch. als nächstes gebe ich wie gesagt form2.showmodal; an. habe ich noch was vergessen? wo kann ich noch nach den fehler suchen? |
Re: Neues Form aus procedure...
Wann rufst du diese procedure auf?
|
Re: Neues Form aus procedure...
Hi Leon,
zeige bitte den Code im OnCreate von Form2, sonst wird das ein Ratespiel. Ich schätze mal irgendwas mit der Datenbank geht schief. Greetz alcaeus |
Re: Neues Form aus procedure...
okay, ich will mich nicht zu blöd anstellen... habt bitte nachsicht mit mir. ich poste mal das gesamte ding...
in meinem Form2 steht noch gar nichts drin... DB funzt. ich kann auch darauf zugreifen, das habe ich schon mal probiert... *** *** ***
Delphi-Quellcode:
*** *** ***
unit Hauptformular;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleServer, ADOX_TLB, ADODB, DB, Grids, DBGrids, StdCtrls; type TForm1 = class(TForm) ADOCommand1: TADOCommand; ADOXCatalog1: TADOXCatalog; ADOConnection1: TADOConnection; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure DBCheck; // es wird die Existenz der DB geprüft procedure Anmelderoutine; // für den ersten ProgStart werden die // Daten des Vereins benötigt function DBerstellen(dataDir:string):string; // die DB wird erstellt inkl. // der Tabellen public { Public-Deklarationen } end; var Form1: TForm1; implementation uses Anmeldeformular; {$R *.dfm} function TForm1.DBerstellen(dataDir:string):string; var DataSource, dbName, cs: string; begin showmessage('Ich erstelle nun die DB!'); dbName:=(dataDir+'\p2vvw.mdb'); DataSource:= 'Provider=Microsoft.Jet.OLEDB.4.0' + ';Data Source=' + dbName + ';Jet OLEDB:Engine Type=5'; ADOXCatalog1.Create1(DataSource); showmessage('Fertig'); showmessage('Stelle die Verbindung zur DB her'); DataSource:= 'Provider=Microsoft.Jet.OLEDB.4.0' + ';Data Source=' + dbName + ';Persist Security Info=False'; ADOConnection1.ConnectionString := DataSource; ADOConnection1.LoginPrompt := False; ADOCommand1.Connection := ADOConnection1; showmessage('Fertig'); showmessage('Erstelle nun die DB-Tabellen!!!'); cs := 'CREATE TABLE Vereinsdaten (' + 'Vereinsname TEXT(60),' + 'Str TEXT(50),' + 'PLZ TEXT(5),' + 'Ort TEXT(50),' + 'Tel TEXT(14),' + 'Fax TEXT(14),' + 'email TEXT(50),' + 'URL TEXT(50),' + 'RegNr TEXT(20),' + 'Eintragung DATE,' + 'Bank TEXT(30),' + 'BLZ TEXT(10),' + 'KtoNr TEXT(10))'; ADOCommand1.CommandText := cs; ADOCommand1.Execute; showmessage('Fertig'); Form2.ShowModal; end; procedure TForm1.DBCheck; var ProgDir, dataDir: String; begin ProgDir:=ExtractFilePath(ParamStr(0)); // wie lautet der Programmpfad? dataDir:=ProgDir+'data'; // Es wird geprüft ob ein data-Verzeichnis existiert, // existiert auch die DB-Datei, so wird die Prozedur abgebrochen // und das Hauptprogramm gestartet. // Besteht das Verzeichnis aber die Datei nicht wird mit der Prozedur // DBerstellen weitergemacht. In dem Fall, dass weder Verzeichnis noch // DB existiert (Erstinstallation) wird das data-Verzeichnis erstellt // und die Datenbank angelegt. if DirectoryExists(dataDir) then begin if FileExists(dataDir+'\p2vvw.mdb') then exit; end else begin ForceDirectories(dataDir); end; DBerstellen(dataDir); Anmelderoutine; end; procedure TForm1.FormCreate(Sender: TObject); begin DBCheck; showmessage('Starte das Hauptprogramm'); end; procedure TForm1.Button1Click(Sender: TObject); begin close; end; end. wenn ihr noch was braucht sagen.... aber mehr habe ich noch nicht wirklich. thx Leon. [edit=MrSpock]Code Tags eingefügt. Mfg, MrSpock[/edit] |
Re: Neues Form aus procedure...
Hier liegt das Problem:
Delphi-Quellcode:
Im Create von Form1 rufst du auf Umwegen Form2 auf, das noch nicht existiert.
procedure TForm1.FormCreate(Sender: TObject);
begin DBCheck; // Startet DBerstellen -> öffnet Form2 showmessage('Starte das Hauptprogramm'); end; // Benutz bitte mal die [Delphi ]-Tags. Ist einfacher zu lesen. |
Re: Neues Form aus procedure...
du kannst in deiner *.dpr einfach
Delphi-Quellcode:
vertauschen, so dass form2 vor form1 erstellt wird
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2); |
Re: Neues Form aus procedure...
HI StefanDP,
Zitat:
Der Code, der mit Form2 zu tun hat sollte wohl ins OnShow. Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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 by Thomas Breitkreuz