Announcement

Collapse
No announcement yet.

MDI Child Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MDI Child Problem

    Hallo Leute,

    habe folgendes Problem:
    also ich habe ein MDI-Child wo ich mehrere Dateien gleichzeitig öffnen will. Das Problem ist wenn ich eine 2. Datei noch öffne kommt eine Fehlermeldung: Operation bei geöffneter Datenmenge nicht möglich!
    Wenn ich dann die Fehlermeldung wegklicke wird eine 2. Datei geöffnet aber mit dem Inhalt (die Datensätze) der ersten Tabelle.
    <br>
    Habe absolut keinen Plan woran das leigen könnte.
    <br>Danke im voraus
    loopy

  • #2
    Hallo!
    wahrscheinlich ein BDE Problem! Wenn der gleiche Alias verwendet wird
    und mehrere Tables/Query's aktiv sind.
    Was für eine Datenbank verwendest du? und wann werden die Tables/Query's aktiviert?

    jürge

    Comment


    • #3
      Hallo,
      ich verwende Tabellen im Paradox 7.0 Format. Die Tabellen werden dann aktiviert wenn ich sie öffne

      Comment


      • #4
        Hallo Loopy,
        Die Fehlermeldung, die Du erhälst setzt immer eine Operation mit der Datenmenge voraus. Alleine das öffnen ist grundsätzlich nicht unbedingt Quelle der Fehlermeldung. Ich arbeite in meiner Anwendung mit 14 Datenquellen in 10 - 15 MDI Formularen und hatte das Problem nur dann, wenn ich versehendlich irgendwelche Befehle wie update oder execsql , oder auch Berechnungen bei geöffneter Datenmende durchführe und dann gleichzeitig schreiben und aktualisieren will. Dass passiert leicht und meistens auch nur bei Query-Komponenten. Versuche einmal in kurzen Worten die genauen Vorgänge zu beschreiben. Wichtig ist dabei: 1. Arbeitest Du mit TTable oder TQuery? 2.Verwendest Du (TQuery) Befehle wie ecexsql oder update nachdem die Tabelle geöffnet wurde? 3.Führst Du irgendwelche Berechnungen durch, nachdem die Tabelle geöffnet wurde? Dann kann ich das nachvollziehen und Dir helfen.
        Gruss Fran

        Comment


        • #5
          Hallo,

          jedes MDI-Childfenster muss eine eigene Datenmodul-Instanz erzeugen und verwenden. Greifen alle auf ein gemeinsamen Datenmodul zu, ist es ganz normal, dass alle MDI-Childfenster exakt die gleichen Daten anzeigen.

          Die folgende Unit stammt aus einem Beipsielprojekt aus meinem Buch <i>Client/Server-Datenbankentwicklung mit Delphi</i>, es ist auf der CDROM im Verzeichnis zu <i>Kapitel 7\MDIBeispiel</i> finden:
          <pre>
          { ************************************************** **************
          Typ : Hauptformular
          Autor : Andreas Kosch
          Compiler : Delphi 4.02 CSS UpdatePack #3
          Betriebssystem : Windows 98
          Beschreibung : MDI-Anwendung nutzt ein Datenmodul, indem
          für jedes Fenster eine neue Instanz des
          Datenmoduls erzeugt wird.
          Erläuterungen siehe MAIN
          ************************************************** ************** }

          unit Childwin;

          interface

          uses Windows, Classes, Graphics, Forms, Controls, ExtCtrls, DBCtrls,
          StdCtrls, Mask, Data, Db;

          type
          TMDIChild = class(TForm)
          DBEdit1: TDBEdit;
          DBNavigator1: TDBNavigator;
          DBEdit2: TDBEdit;
          DBEdit3: TDBEdit;
          DBImage1: TDBImage;
          DataSource1: TDataSource;
          procedure FormClose(Sender: TObject; var Action: TCloseAction);
          procedure FormCreate(Sender: TObject);
          procedure FormDestroy(Sender: TObject);
          private
          { Private declarations }
          DMChild : TDataModuleMDI ;
          public
          { Public declarations }
          end;

          implementation

          uses Dialogs; // ShowMessage-Hinweise

          {$R *.DFM}

          procedure TMDIChild.FormCreate(Sender: TObject);
          begin
          ShowMessage('TMDIChild.FormCreate');
          DMChild := TDataModuleMDI.Create(nil);
          // alle Aktionen sollen sich auf das neue Datenmodul beziehen
          with DMChild do
          begin
          // Neu: TDatabase-Instanz im Datenmodul aktivieren
          Session1.Active := True;
          Database1.Connected := True;
          Table1.Open;
          // Kontrolle: Tatsächlich neue TSession-Instanz ?
          ShowMessage('TMDIChild.FormCreate: ' + Session1.SessionName);
          // Neu: Datasource-Instanz im MDIChild an das Datenmodul anbinden
          DataSource1.DataSet := Table1;
          end;
          end;

          procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
          begin
          ShowMessage('TMDIChild.FormClose');
          DMChild.Table1.Close;
          Action := caFree;
          end;

          procedure TMDIChild.FormDestroy(Sender: TObject);
          begin
          ShowMessage('TMDIChild.FormDestroy');
          if not Assigned(DMChild) then
          Exit;
          // alle Aktionen sollen sich auf die eigenen Datenmodul-Instanz beziehen
          with DMChild do
          begin
          Table1.Active := False; // wird bereits von FormClose erledigt
          Database1.Connected := False ; // zum besseren Verständnis
          Session1.Active := False ; // zum besseren Verständnis
          Free;
          end;
          DMChild := NIL ;
          ShowMessage('TMDIChild.FormDestroy: Datenmodul zerstört');
          end;

          end.
          </pre&gt

          Comment

          Working...
          X