AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neues Form aus procedure...

Ein Thema von Leon de Bar · begonnen am 11. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#1

Neues Form aus procedure...

  Alt 11. Okt 2004, 20:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:11
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 Delphi-Referenz durchsuchenApplication.CreateForm selbst erstellen. Wird es hingegen automatisch erstellt, dann liegt der Fehler wahrscheinlich irgendwo anders.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:14
Zeig doch mal, wann du das Form aufrufst. Falls dieser Aufruf im Create eines anderen Forms ist, ist das Form2 einfach noch nicht da.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:19
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?
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:22
Wann rufst du diese procedure auf?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:23
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Leon de Bar

Registriert seit: 1. Okt 2004
Ort: Berlin
125 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:27
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]
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:32
Hier liegt das Problem:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
DBCheck; // Startet DBerstellen -> öffnet Form2
showmessage('Starte das Hauptprogramm');

end;
Im Create von Form1 rufst du auf Umwegen Form2 auf, das noch nicht existiert.

// Benutz bitte mal die [Delphi ]-Tags. Ist einfacher zu lesen.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#9

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:39
du kannst in deiner *.dpr einfach
Delphi-Quellcode:
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
vertauschen, so dass form2 vor form1 erstellt wird
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Neues Form aus procedure...

  Alt 11. Okt 2004, 20:40
HI StefanDP,

Zitat von StefanDP:
du kannst in deiner *.dpr einfach
Delphi-Quellcode:
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
vertauschen, so dass form2 vor form1 erstellt wird
AFAIK funktioniert das nicht, da das als erstes erzeugte Form das MainForm ist.
Der Code, der mit Form2 zu tun hat sollte wohl ins OnShow.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 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