Registriert seit: 15. Jul 2007
76 Beiträge
|
Für diesen Befehl ist nicht genügend Speicher vorhanden.
31. Jan 2011, 12: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?
|