Einzelnen Beitrag anzeigen

sventeq

Registriert seit: 15. Jul 2007
76 Beiträge
 
#1

Für diesen Befehl ist nicht genügend Speicher vorhanden.

  Alt 31. Jan 2011, 11:05
Hallo zusammen.
Genau diese Fehlermeldung erhalte ich seit heute morgen, wenn diese Procedure starte:

Delphi-Quellcode:
procedure TdiktatNeuDLG.satzEintragenClick(Sender: TObject);
var keineKatZWVorhanden: boolean;
    x: integer;
begin
  ShowMessage(SysErrorMessage(GetLastError));
  keineKatZWVorhanden:=false;
  if Memo1.Text<>'then
  begin
    if begrenzer<=15 then
    begin
      while length(Memo1.Text) > 0 do
      begin
        if pos(' ', Memo1.Text)<>0 then
        begin
          seObjekt1.dikNeuSilben:=0;
          Text1:=copy(Memo1.Text, 1, pos(' ',Memo1.Text));

          Text1:=copy(Memo1.Text, 1, pos(' ',Memo1.Text));
          delete(Text1, length(Text1), length(Text1));//Leerzeichen löschen

          szeichen:=copy(Text1, length(Text1), length(Text1));
          if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
          begin
            delete(Text1, length(Text1), length(Text1));//Satzzeichen entfernen
          end;

          Text2:=Memo1.Text;

          delete(Text2, 1, pos(' ',Memo1.Text));
          Memo1.Text:=Text2;

          eintragWort;
          if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
          begin
            seObjekt1.wortID:=seObjekt1.wortID+1;
            eintragSatzzeichen;
            prgrammdb.DikNeuSatzEintrag.Prior;
          end;


          katAuswahlDLG:=TkatAuswahlDLG.Create(self);
          if katAuswahlDLG.showModal=mrOk then
          begin
            katAuswahlDLG.free;
          end;

          //KatZuordnung;
// KatAbfrage;//Prüfung, ob Kat zugeordnet soll, dann Zuordnung der Kat.

          //Silbenfenster öffnen~~~~~~~~~~~~~~~~~~~~~~~~~
          silbenDLG:=TsilbenDLG.Create(self);
          if silbenDLG.showModal=mrOk then
          begin
            silbenDLG.free;
          end;

          try
            prgrammdb.silben.Open;
          except
            messageDLG('Fehler 1', mtError, [mbOK], 0);
          end;

          if not prgrammdb.silben.IsEmpty then
          begin
            for x := 1 to prgrammdb.silben.RecordCount do
            begin
              if prgrammdb.silben.RecordCount > 1 then
              begin
                try
                  prgrammdb.DikNeuSatzEintrag.Last;
                  prgrammdb.DikNeuSatzEintrag.Insert;
                  prgrammdb.DikNeuSatzEintragDiktatID.Value:=prgrammdb.dikNeuEintragID.Value;
                  prgrammdb.DikNeuSatzEintragWort.Value:=prgrammdb.silbenSilbe.Value;
                  prgrammdb.DikNeuSatzEintragSatzID.Value:=j;
                  prgrammdb.DikNeuSatzEintragWortID.Value:=seObjekt1.wortID;
                  prgrammdb.DikNeuSatzEintragSilbenID.Value:=x;
                  prgrammdb.DikNeuSatzEintrag.Post;
                except
                  messageDLG('Fehler 2', mtError, [mbOK], 0);
                end;
              end;
              //KatZuordnung;
              //showmessage('x: '+inttostr(x)+' silbe: '+prgrammdb.silbenSilbe.Value+' WortID: '+inttostr(seObjekt1.wortID));
              prgrammdb.silben.Next;
            end;
            prgrammdb.silben.First;
            while not prgrammdb.silben.Eof do prgrammdb.silben.Delete;
            prgrammdb.silben.Close;
            editSilbenID;
          end;
        end
        else
        begin
          Text1:=copy(Memo1.Text, 1, length(Memo1.Text));

          szeichen:=copy(Text1, length(Text1), length(Text1));
          if szeichen=' then delete(Text1, length(Text1), length(Text1));
          szeichen:=copy(Text1, length(Text1), length(Text1));
          if szeichen=' then delete(Text1, length(Text1), length(Text1));

          if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
          begin
            delete(Text1, length(Text1), length(Text1));//Satzzeichen entfernen
          end;
          Text2:=Memo1.Text;
          delete(Text2, 1, pos(' ',Memo1.Text));
          Memo1.Text:=Text2;

          eintragWort;

          try
            prgrammdb.DikKeineKat.Open;
          except
            messageDLG('Fehler bei der Zusammenstellung der Wörter ohne Kategorie', mtError, [mbOK], 0);
          end;
          prgrammdb.DikKeineKat.First;
          while not prgrammdb.DikKeineKat.Eof do
          begin
            if text1 <> prgrammdb.DikKeineKatWort.Value then keineKatZWVorhanden:=true
            else
            begin
              keineKatZWVorhanden:=false;
              prgrammdb.DikKeineKat.Last;
            end;
            prgrammdb.DikKeineKat.Next;
          end;

// if keineKatZWVorhanden then
// begin
// if MessageDLG('Soll das Wort '+'"'+Text1+'"'+' eine Kategoriezuweisung erhalten?', mtConfirmation,[mbYes, mbNo], 0)=mrNo then
// begin
// try
// prgrammdb.DikKeineKatEintrag.Open;
// prgrammdb.DikKeineKatEintrag.Insert;
// prgrammdb.DikKeineKatEintragWort.Value:=Text1;
// prgrammdb.DikKeineKatEintrag.Post;
// prgrammdb.DikKeineKatEintrag.Close;
// except
// messageDLG('Fehler: Das Wort konnte nicht hinzugefügt werden!', mtError, [mbOK], 0);
// end;
// end
// else KatZuordnung;
// end;
          Memo1.Text:='';
          //Silbenfenster beim letzten Wort öffnen~~~~~~~~~~~~~~~~~~~~~~
          silbenDLG:=TsilbenDLG.Create(self);
          if silbenDLG.showModal=mrOk then
          begin
            silbenDLG.free;
          end;
          try
            prgrammdb.silben.Open;
          except
            messageDLG('Fehler 1', mtError, [mbOK], 0);
          end;
          if not prgrammdb.silben.IsEmpty then
          begin
            for x := 1 to prgrammdb.silben.RecordCount do
            begin
              if prgrammdb.silben.RecordCount > 1 then
              begin
                try
                  prgrammdb.DikNeuSatzEintrag.Last;
                  prgrammdb.DikNeuSatzEintrag.Insert;
                  prgrammdb.DikNeuSatzEintragDiktatID.Value:=prgrammdb.dikNeuEintragID.Value;
                  prgrammdb.DikNeuSatzEintragWort.Value:=prgrammdb.silbenSilbe.Value;
                  prgrammdb.DikNeuSatzEintragSatzID.Value:=j;
                  prgrammdb.DikNeuSatzEintragWortID.Value:=seObjekt1.wortID;
                  prgrammdb.DikNeuSatzEintragSilbenID.Value:=x;
                  prgrammdb.DikNeuSatzEintrag.Post;
                except
                  messageDLG('Fehler 2', mtError, [mbOK], 0);
                end;
              end;
              //KatZuordnung;
              //showmessage('x: '+inttostr(x)+' silbe: '+prgrammdb.silbenSilbe.Value+' WortID: '+inttostr(seObjekt1.wortID));
              prgrammdb.silben.Next;
            end;
            prgrammdb.silben.First;
            while not prgrammdb.silben.Eof do prgrammdb.silben.Delete;
            prgrammdb.silben.Close;
            editSilbenID;
          end;

          if (szeichen='.') or (szeichen=',') or (szeichen='!') or (szeichen='?') or (szeichen=':') or (szeichen=';')then
          begin
            seObjekt1.wortID:=seObjekt1.wortID+1;
            eintragSatzzeichen;
            prgrammdb.DikNeuSatzEintrag.Prior;
          end;
        end;
        seObjekt1.wortID:=seObjekt1.wortID+1;
      end;
      inc(j);
      Memo1.Text:='';
      Memo1.SetFocus;
      inc(begrenzer);
    end
    else
    begin
      showmessage('Es können nicht mehr als 15 Sätze zu einem Diktat hinzugefügt werden.'+ #13+
      'Klicken Sie auf "Schließen", um das Diktat in einem zweiten Teil fortzusetzen.');
    end;
  end
  else showmessage('Bitte geben Sie den Satz ein.');
  prgrammdb.DikKeineKat.Close;
  prgrammdb.diktate.Close;
  prgrammdb.diktate.Open;
end;
Ich weiß, dazu gibt es hier viele Beträge. Allerdings haben die alle meist etwas mit Grafik oder Canvas zu tun. Dies ist bei mit nicht der Fall. Wie man sehen kann, lasse ich die aktuelle Systemfehlermeldung direkt als Erstes nach dem Klick auf den Button ausgeben. Das Merkwürdige ist, dass nach der Fehlermeldung alle Befehle ordnungsgemäß ausgeführt werden. Ich frage mich, warum auf Speicherknappheit hingewiesen wird und warum dann trotzdem alles läuft. Weiß jemand einen Rat?
  Mit Zitat antworten Zitat