AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Dateiahängemit BLOB
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiahängemit BLOB

Ein Thema von TheMiller · begonnen am 22. Aug 2005 · letzter Beitrag vom 25. Aug 2005
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Dateiahängemit BLOB

  Alt 22. Aug 2005, 00:32
Datenbank: MYSQL • Version: 4 • Zugriff über: ZEOS
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.)
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateiahängemit BLOB

  Alt 22. Aug 2005, 07:03
Zitat von DJ-SPM:
... Kann ich in einem Datensatz auch mehrere Dateianhänge in das BLOB-Feld "Anhang" eintragen?
Hai DJ-SPM,

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:
Daten-Stream
  100 
  [i]Daten[/i]
  10578
  [i]Daten[/i]
  78
  [i]Daten[/i]
Aber ich würde das nicht machen
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
SELCT * FROM tabelle machst hast Du schon einmal mindestens 10 MB an Daten die vom Server zum Client übertragen werden müssen.

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:
 Haupt_Tabelle:
 --------------
 id   : integer (autoinc), PK
 blubb : varchar(10)
 meow : DateTime

 Blobb_Tabelle:
 --------------
 id                 : integer (autoinc), PK
 fk_haupt_tabelle_id : integer
 anhang             : blobb
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).

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:
PS: Wo ist der Unterschied zwischen den Blob-Feldern (LongBlob, Blob etc.)
  • *
  • TINYBLOB / TINYTEXT
    Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 255 (2^8 - 1) Zeichen.
  • BLOB / TEXT
    Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 65535 (2^16 - 1) Zeichen.
  • MEDIUMBLOB / MEDIUMTEXT
    Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 16777215 (2^24 - 1) Zeichen.
  • LONGBLOB / LONGTEXT
    Eine BLOB- oder TEXT-Spalte mit einer maximalen Länge von 4294967295 (2^32 - 1) Zeichen.

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)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Dateiahängemit BLOB

  Alt 22. Aug 2005, 11:11
Das nenne ich mal eine Hilfe!

Ich danke dir!
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#4

Re: Dateiahängemit BLOB

  Alt 25. Aug 2005, 16:29
So,

jetzt habe ich doch noch eine kleine Frage. Du "sagtest"

Zitat:
Die Einträge der Blobb_Tabelle verbindest Du jetzt einfach über das Feld fk_haupt_tabelle_id mit dem PK der Haupttabelle
Doch mit welchen Statement kann ich das Verbinden?

[OT]Und noch was: Wenn ich jmd. zitieren will, wie mache ich das, dass über dem Zitat "Shary hat folgendes geschrieben" steht?[/OT]
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dateiahängemit BLOB

  Alt 25. Aug 2005, 16:37
Zitat von DJ-SPM:
... Doch mit welchen Statement kann ich das Verbinden?
Wenn Du einen eintrag in der "HauptTabelle" machst ermittest Du die ID des Datensatzes. Jetzt machst Du einen neuen Eintrag in der "Blob-Tabelle" und trägst die ID des Datensatzes aus der Haupttabelle im Feld fk_haupt_tabelle_id ein.


Zitat:
[OT]Und noch was: Wenn ich jmd. zitieren will, wie mache ich das, dass über dem Zitat "Shary hat folgendes geschrieben" steht?[/OT]
Einfach auf den "Zitat-Button" neben dem Beitrag klicken.
Oder manuel - [*quote="Sharky"] ..... [*/quote] (ohne die * )
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Dateiahängemit BLOB

  Alt 25. Aug 2005, 17:16
Achso, ich dachte da gab es noch eine spezielle Funktion in MySQL. So mach ich es schon die ganze Zeit. Danke (auch an Spider)
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dateiahängemit BLOB

  Alt 25. Aug 2005, 17:27
Zitat von DJ-SPM:
... So mach ich es schon die ganze Zeit. .
hihi... ich habe trotzdem mal ein Beispiel

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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz