![]() |
Datenbank: MYSQL • Version: 4 • Zugriff über: ZEOS
Dateiahängemit BLOB
Hallo,
habe in meiner Tabell ein Feld namens "Anhang". Kann ich in einem Datensatz auch mehrere Dateianhänge in das BLOB-Feld "Anhang" eintragen? Ich denke es geht nicht, aber fragen kann ich ja mal! Danke PS: Wo ist der Unterschied zwischen den Blob-Feldern (LongBlob, Blob etc.) |
Re: Dateiahängemit BLOB
Zitat:
im Prinzip geht das natürlich. Du müsstest die Daten dann vorher in einen Stream schreiben und vor jedem "Datenblock" dessen Länge (Als INT64) eintragen.
Code:
Aber ich würde das nicht machen ;-)
Daten-Stream
100 [i]Daten[/i] 10578 [i]Daten[/i] 78 [i]Daten[/i] Die BLOBs würde ich in einer eigenen Tabelle abspeichern. Da der Anwender die Daten aus dem BLOB-Feld sicher nicht immer braucht sparst Du so eine riesen Menge an Datentransfer. Ein Beispiel: Du hast 1000 Datensätze. In jedem Datensatz ist ein BLOB-Feld mit 10 kByte an Daten. Wenn Du nun ein
SQL-Code:
machst hast Du schon einmal mindestens 10 MB an Daten die vom Server zum Client übertragen werden müssen.
SELCT * FROM tabelle
Jetzt stellt sich nur die Frage ob die Daten aus einem BLOB-Feld immer nur zu einem Datensatz gehören oder ob sie auch zu verschiedenen gehören könnten. Im ersten Fall brauchst Du nur eine extra Tabelle für die BLOBs
Code:
Die Einträge der Blobb_Tabelle verbindest Du jetzt einfach über das Feld fk_haupt_tabelle_id mit dem PK der Haupttabelle. Somit kannst Du beliebig viele BLOBs mit einem Datensatz der Haupttabelle verknüpfen. (1:n Relation).
Haupt_Tabelle:
-------------- id : integer (autoinc), PK blubb : varchar(10) meow : DateTime Blobb_Tabelle: -------------- id : integer (autoinc), PK fk_haupt_tabelle_id : integer anhang : blobb Wenn Du ein BLOBB mit verschiedenen Datensatzen der Haupt-Tabelle verbinden möchtest (n:m Relation) brauchst Du eine dritte Tabelle:
Code:
Haupt_Tabelle:
-------------- id : integer (autoinc), PK blubb : varchar(10) meow : DateTime Blobb_Tabelle: -------------- id : integer (autoinc), PK anhang : blobb Haupt_Blobb_Tabelle: -------------------- fk_haupt_tabelle_id : integer fk_blobb_tabelle_id : integer Zitat:
Bei einem Longblob ist zu beachten das (zumindest bei mySQL 3) das Client-Server-Protokoll und MyISAM-Tabellen momentan eine Beschränkungen auf 16 MB pro Kommunikationspaket / Tabellenzeile haben. (*Quelle: Meine mySQL-Dokumentation) |
Re: Dateiahängemit BLOB
Das nenne ich mal eine Hilfe!
Ich danke dir! |
Re: Dateiahängemit BLOB
So,
jetzt habe ich doch noch eine kleine Frage. Du "sagtest" Zitat:
[OT]Und noch was: Wenn ich jmd. zitieren will, wie mache ich das, dass über dem Zitat "Shary hat folgendes geschrieben" steht?[/OT] |
Re: Dateiahängemit BLOB
Zitat:
Zitat:
Oder manuel - [*quote="Sharky"] ..... [*/quote] (ohne die * ) |
Re: Dateiahängemit BLOB
Achso, ich dachte da gab es noch eine spezielle Funktion in MySQL. So mach ich es schon die ganze Zeit. Danke (auch an Spider)
|
Re: Dateiahängemit BLOB
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var last_id: integer; begin last_id := NeuerEintrag(Edit1.Text); // Eintrag in die Haupt-Tabelle NeuerAnhang(last_ID, 'c:\test.jpg'); // Eintrag in die Blob-Tabelle end; function TForm1.NeuerEintrag(ablubb: string): integer; var query: TZQuery; begin query := TZQuery.Create(self); try with Query do begin Connection := ZConnection1; Close; SQL.Text := 'INSERT INTO haupt_tabelle (blubb) VALUES (:pblubb)'; ParamByName('pblubb').AsString := Edit1.Text; ExecSQL; Close; SQL.Text := 'SELECT LAST_INSERT_ID()'; Open; Result := Fields[0].AsInteger; Close; end; finally query.Free; end; end; procedure TForm1.NeuerAnhang(aID: integer; filename: string); var fstream: TMemoryStream; query: TZQuery; begin fstream := TMemoryStream.Create; query := TZQuery.Create(self); try fstream.LoadFromFile(filename); fstream.Position := 0; with Query do begin Connection := ZConnection1; Close; SQL.Text := 'INSERT INTO blob_tabelle (fk_haupt_tabelle_id,anhang) ' + #10 + 'VALUES (:pfk_id, :panhang)'; ParamByName('pfk_id').AsInteger := aID; ParamByName('panhang').LoadFromStream(fstream, ftBlob); ExecSQL; end; finally query.Free; fstream.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz