AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Insert und TBlobField
Thema durchsuchen
Ansicht
Themen-Optionen

Insert und TBlobField

Ein Thema von Captnemo · begonnen am 22. Nov 2005 · letzter Beitrag vom 22. Nov 2005
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Insert und TBlobField

  Alt 22. Nov 2005, 11:23
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Ok, wahrscheinlich zum 100.sten Mal

Wenn ich eine Tabelle mit einem Blob-Feld über SQL per INSERT um eine Zeile erweitern will, dann hab ich ja immer das Problem, dass ich das BLOB nicht direkt mit übergeben kann.

Nun haben meine Tabellen eigentlich immer ein Feld LFDNR, eine laufende Nummer mittels AutoInc. Das wäre für mich eigentlich der einzige, eindeutige Indikator für eine Zeile. Diesen Wert kenne ich aber nach der INSERT-Anweisung nicht, weil er ja erst bei EXEC erzeugt wird.

Nun gehe ich immer den "umständlichen" Weg, erstmal irgendein Feld zu mißbrauchen, und dort einen Wert per Insert reinzusetzen, den ich auf jeden Fall eindeutig habe (was ich ja irgendwie nicht wirklich garantieren kann).
Danach hole ich mir per Select die Zeile wieder in mein Query und setzte dann erst mittels MemoryStream das Blobfeld.

Soweit so gut. Aber letztlich kommt mir das sehr umständlich und auch irgendwie unsauber vor.

Mal ausgehend davon, dass diese Datenbank von vielen Usern genutzt wird, und diese auch alle ständig viele Veränderungen vornehmen. So kann es doch passieren, das sich zwischen dem Insert und dem kopieren per Stream schon wieder etwas verändert. Besser wäre es ja, das Blob gleich beim Insert mit den richtigen Daten zu füllen. Oder?

Ist das wirklich die einzige Möglichkeit? Aber eine andere hab ich bis jetzt auch nicht gefunden.
Was sagt ihr dazu?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Insert und TBlobField

  Alt 22. Nov 2005, 18:38
Zitat von Captnemo:
Wenn ich eine Tabelle mit einem Blob-Feld über SQL per INSERT um eine Zeile erweitern will, dann hab ich ja immer das Problem, dass ich das BLOB nicht direkt mit übergeben kann.
Wirklich ?
Du kannst sehr bequem Daten in eine Tabelle einfügen, indem du eine SQL-Query nimmst:
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT * FROM tabelle WHERE 0=1'; // beachte die Where-Bed.
ADOQuery1.Open;

ADOQuery1.Edit;
ADOQuery1['Datum'] := Now;
ADOQuery1.FieldByName('Blobfeld').LoadFromFile(....);
ADOQuery1.Post;
Gegenüber einer INSERT-Anweisung hast du damit zwar einen gewissen Leistungsverlust, aber damit kann man leben.

Ich verwende übrigens niemals Auto-Inc Felder; die haben einfach zu viele Nachteile.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#3

Re: Insert und TBlobField

  Alt 22. Nov 2005, 19:42
Dank dir erstmal für den Beitrag. Aber ich muß doch nochmal nachfragen

'where 0=1' ??
Soll ich mir das jetzt so vorstellen, dass ich eine leere Datenmenge selectierst? Und per Edit dann eine hinzufüge? Dachte immer dafür wäre ein Append gedacht. Was allerdings bei einem Query fehlschlägt glaube ich.
Vielleicht kannst du mir das noch mal erklären.

2. Frage: Was für ein Nachteil hat denn ein Autoinc-Feld? Ich hab bisher noch keines gefunden, es sei denn ich hab immer geschickt drumrum programiert *ggg*
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

Re: Insert und TBlobField

  Alt 22. Nov 2005, 21:01
Ok, das mit dem "where 0=1" hab ich jetzt verstanden. Ich hab noch mal danach gegooglet und bin dann auf deinen Beitrag http://www.delphipraxis.net/internal...ct.php?t=26406 gestoßen. Dort ist das ja noch mal erklärt.

Aber warum jetzt Autoinc-Felder nachteile haben, frage ich mich immer noch
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Insert und TBlobField

  Alt 22. Nov 2005, 22:14
Hi.

Da bei einer updateable query alle internen Kontrollblöcke aufgebaut werden, unabhängig von der Anzahl der belegten record buffer, möchtest du verhindern, dass auch nur ein einziger unbenötigter Datensatz über das Netz geschickt wird. Die einfachste Methode ist ein WHERE clause, der FALSE als Ergebnis liefert.

Bei AUTOINC Feldern ist allgemein festzustellen, dass diese Felder nicht der Kontrolle deiner Anwendung unterliegen. Sie verwenden oft einen unzugänglichen Generator - ist der korrupt, dann gibt es keine oder nur sehr umständliche Wege zur Wiederherstellung der Konsistenz.

Besser sind da offene Generatoren. Sie bieten dir eine gekapselte Schnittstelle für die Manipulation und das Schlüsselfeld bleibt unter deiner Kontrolle, auch und erstrecht bei Reparaturen an der Datenbank.

Grüße vom marabu
  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 02:30 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