Hallo,
folgendes Problem:<BR>
Ich muss in eine Datenbank ein Bild schreiben, das ist technisch kein Problem. Nach einiger Zeit jedoch (nach ca. 3000 Datensätzen d.h. 3000 Bildern) meldet mir SQL-Query "Nicht genügend Festplattenspeicher o.ä.". Jeder weitere Versuch, Bilder zu speichern scheitert mit oben genanntem Fehler.<BR>
Die selbe Routine mit TBlobStream funktioniert hervorragend.<BR>
Warum?<BR>
<BR>
<B>Quellcode TBlobStream</B><BR>
<PRE>
tables[TableID].edit;
tables[TableID].FieldByName('Zeit').asDateTime := time;
tables[TableID].FieldByName('Datum').asDateTime := date;
tables[TableID].FieldByName('Text').asString := text;
tables[TableID].FieldByName('Place').asString := place;
PicJPEG.CompressionQuality := Compression.Position;
TempStream := Tables[TableID].CreateBlobStream(Tables[TableID].FieldByName('Pic'), bmReadWrite);
Pipe := TMemoryStream.Create;
TRY
PicBitmap.Assign(pic^);
PicJPEG.assign(PicBitmap);
PicJPEG.Compress;
PicJPEG.SaveToStream(Pipe);
Pipe.Position := 0;
TempStream.CopyFrom(pipe, pipe.size);
FINALLY
TempStream.Free;
Pipe.Free;
END;
Tables[TableId].Post;
</PRE>
<BR>
<B>Quellcode SQLQuery</B><BR>
<PRE>
id:=Tables[TableID].FieldByName('ID').AsInteger;
Query.SQL.Clear;
SQL := 'UPDATE "' + GetDatabaseName(TableID) + '" ';
SQL := SQL + 'SET Zeit = :Zeit, Datum = atum, Text = :Text, Place= :Place, Pic = :Pic WHERE ID = :ID';
Query.sql.add(SQL);
Query.ParamByName('ID').asInteger := ID;
Query.ParamByName('Zeit').asDateTime := time;
Query.ParamByName('Datum').asDateTime := date;
Query.ParamByName('Text').asString := text;
Query.ParamByName('Place').asString := place;
SavePicturePipe.Clear;
PicJPEG.CompressionQuality := Compression.Position;
PicBitmap.assign(pic^);
PicJPEG.assign(PicBitmap);
PicJPEG.Compress;
PicJPEG.SaveToStream(SavePicturePipe);
Query.ParamByName('Pic').LoadFromStream(SavePictur ePipe, ftBlob);
Query.ExecSQL;
</PRE>
Vielen Dank im voraus für die Hilfe..
folgendes Problem:<BR>
Ich muss in eine Datenbank ein Bild schreiben, das ist technisch kein Problem. Nach einiger Zeit jedoch (nach ca. 3000 Datensätzen d.h. 3000 Bildern) meldet mir SQL-Query "Nicht genügend Festplattenspeicher o.ä.". Jeder weitere Versuch, Bilder zu speichern scheitert mit oben genanntem Fehler.<BR>
Die selbe Routine mit TBlobStream funktioniert hervorragend.<BR>
Warum?<BR>
<BR>
<B>Quellcode TBlobStream</B><BR>
<PRE>
tables[TableID].edit;
tables[TableID].FieldByName('Zeit').asDateTime := time;
tables[TableID].FieldByName('Datum').asDateTime := date;
tables[TableID].FieldByName('Text').asString := text;
tables[TableID].FieldByName('Place').asString := place;
PicJPEG.CompressionQuality := Compression.Position;
TempStream := Tables[TableID].CreateBlobStream(Tables[TableID].FieldByName('Pic'), bmReadWrite);
Pipe := TMemoryStream.Create;
TRY
PicBitmap.Assign(pic^);
PicJPEG.assign(PicBitmap);
PicJPEG.Compress;
PicJPEG.SaveToStream(Pipe);
Pipe.Position := 0;
TempStream.CopyFrom(pipe, pipe.size);
FINALLY
TempStream.Free;
Pipe.Free;
END;
Tables[TableId].Post;
</PRE>
<BR>
<B>Quellcode SQLQuery</B><BR>
<PRE>
id:=Tables[TableID].FieldByName('ID').AsInteger;
Query.SQL.Clear;
SQL := 'UPDATE "' + GetDatabaseName(TableID) + '" ';
SQL := SQL + 'SET Zeit = :Zeit, Datum = atum, Text = :Text, Place= :Place, Pic = :Pic WHERE ID = :ID';
Query.sql.add(SQL);
Query.ParamByName('ID').asInteger := ID;
Query.ParamByName('Zeit').asDateTime := time;
Query.ParamByName('Datum').asDateTime := date;
Query.ParamByName('Text').asString := text;
Query.ParamByName('Place').asString := place;
SavePicturePipe.Clear;
PicJPEG.CompressionQuality := Compression.Position;
PicBitmap.assign(pic^);
PicJPEG.assign(PicBitmap);
PicJPEG.Compress;
PicJPEG.SaveToStream(SavePicturePipe);
Query.ParamByName('Pic').LoadFromStream(SavePictur ePipe, ftBlob);
Query.ExecSQL;
</PRE>
Vielen Dank im voraus für die Hilfe..
Comment