Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi suche vorschläge um blob stream und sql insert zu verknüpfen (https://www.delphipraxis.net/79316-suche-vorschlaege-um-blob-stream-und-sql-insert-zu-verknuepfen.html)

agm65 20. Okt 2006 09:19

Datenbank: abs • Zugriff über: lokal

suche vorschläge um blob stream und sql insert zu verknüpfen
 
also ich habe folgendes problem, ich möchte den blob stream und das insert zusammenlegen, denn wenn ich zuerst den blob stream ausführe und danach das insert hab ich ja 2 einträge. zudem überschreibt der blob stream immer den gleichen eintrag und macht keinen neuen. gibt es da nicht sowas wie update ? das ich zuerst den insert mache und den blob stream danach update ? hat jemand eine idee ? danke für hilfe jungs !

Delphi-Quellcode:
Blob Stream:

Procedure SaveBlob;
var
  FileStream: TMemoryStream;
  BlobStream: TABSBlobStream;
begin
  frmmain.Table.Edit;
  try
    FileStream := TMemoryStream.Create;
    FileStream.LoadFromFile(showImage);
    BlobStream := TABSBlobStream(frmmain.Table.CreateBlobStream(frmmain.Table.FieldByName('image_show'),bmWrite));
    BlobStream.CopyFrom(FileStream,FileStream.Size);
    FileStream.Free;
    BlobStream.Free;
    frmmain.Table.Post;
  except
    frmmain.Table.Cancel;
    raise;
  end;
end;
Delphi-Quellcode:
SQL Insert:

QuerySaveData.sql.text := 'INSERT into vehicles ('

 +      'brand,'
 +      'model,'

 + ') values ('


 + '''' + txtMarke.Text        + ''','
 + '''' + txtModell.Text       + ''')'

QuerySaveData.ExecSQL;

nahpets 20. Okt 2006 09:26

Re: suche vorschläge um blob stream und sql insert zu verknü
 
Ändere die Reihenfolge, erst das Insert, dann den Blob hinterher.
So wie das aussieht, schreibst Du den Blobinhalt in den Satz vor dem Insert.
Oder alles in einem machen, statt frmmain.table.edit frm.table.append nehmen und die anderen Felder auch zuweisen.

Stephan

agm65 20. Okt 2006 09:46

Re: suche vorschläge um blob stream und sql insert zu verknü
 
also ich führe den blob stream nach dem insert aus aber egal ob edit oder append, ich bekomme immer 2 einträge und der blob stream überschreibt sich immer selbst und legt keine neuen datensatz an .

dataspider 20. Okt 2006 09:52

Re: suche vorschläge um blob stream und sql insert zu verknü
 
Hi,

jetzt muss ich doch mal nachhaken.
Wozu brauchst du die 2 - gleisige Fahrweise mit TABStable und TABSQuery.

Die TABSQuery reicht doch aus.
Auch diese hat die Methode CreateBlobStream, und wenn du deinen Select dort unterbringst, kannst du doch hier ein Insert und dann das CreateBlobStream und zuletzt das Post aufrufen.
Und mit Datensensitiven Steuerelementen wie das von dir erwähnte jvDBImage brauchst du nicht mal den Weg über den BlobStream.

Cu, Frank

agm65 20. Okt 2006 09:55

Re: suche vorschläge um blob stream und sql insert zu verknü
 
frank wie meinst du das ? meinst du ich kann einfach das bild aus dem dbimage über insert in das blob feld adden ?

nahpets 20. Okt 2006 09:56

Re: suche vorschläge um blob stream und sql insert zu verknü
 
Das wird mir jetzt ein bisserl zu kompliziert:

Schreib doch bitte mal, wie die Aufrufe für das Insert und SaveBlob in deinem Quelltext aufgerufen werden.

Wird nach dem Insert z. B. der Satzzeiger von frmmain.table auf den neu eingefügten Satz gesetzt (frmmain.table.next, frmmain.table.last) oder über Findkey gesucht oder... .

Wie stellst Du sicher, dass SaveBlob den Datensatz "erwischt", den Du mit Insert eingefügt hast?

Stephan

agm65 20. Okt 2006 10:00

Re: suche vorschläge um blob stream und sql insert zu verknü
 
ja genau, das ist ja mein problem..ich weiss nicht wie ich das feststelle, ich inserte zuerste meine textwerte und danach mache ich warlos den blobstream, weil ich keine ahnung habe ich den blob stream meinem insert zuweise.

aufgeruden werden sie:

QuerySaveData.ExecSQL;
SaveBlob;

dataspider 20. Okt 2006 10:13

Re: suche vorschläge um blob stream und sql insert zu verknü
 
Zitat:

Zitat von agm65
frank wie meinst du das ? meinst du ich kann einfach das bild aus dem dbimage über insert in das blob feld adden ?

IMHO reicht folgendes:

in SQL.Text der Query dein select:

SQL.Text := 'select * from vehicle';
RequestLive := True;
Open;

Eine DataSource auf die Query, einen TDBnavigator, mit der DataSource verbinden, dein TjvDBImage auf das Form und schon sollte Alles funktionieren....


Cu, Frank

dataspider 20. Okt 2006 10:15

Re: suche vorschläge um blob stream und sql insert zu verknü
 
... und wenn du nicht mit Datensensitiven Steuerelementen arbeiten willst, dann halt im Code:

DeineQuery.Insert;
DeineQuery.FieldByName('FeldName').AsString := 'Wert';
... die ganze BlobStreamgeschichte...
DeineQuery.Post;

Frank

nahpets 20. Okt 2006 10:16

Re: suche vorschläge um blob stream und sql insert zu verknü
 
So wie Du das beschreibst, liegt die Vermutung nahe, dass die neuen Daten nach dem Insert der letzte Satz in der Tabelle sind. Hier müsste dann frmmain.table.last vor frmmain.table.edit den Datensatzzeiger an die richtige Stelle bringen, vorausgesetzt, Du hast in frmmain.table.indexname nichts eingetragen. Steht dort ein Indexname drin, so wirst Du den neuen Datensatz an der entsprechenden Stelle nach der Sortierreihenfolge finden. Einfachste Variante ist also, den Indexnamen (sofern vorhanden) wegzunehmen.

Wäre eine Änderung von SaveBlob eine Alternative?

Dann versuche es mal mit

Delphi-Quellcode:
Procedure SaveBlob;
var
  FileStream: TMemoryStream;
  BlobStream: TABSBlobStream;
begin
  // frmmain.Table.Edit;
  frmmain.Table.Append;
  frmmain.fieldbyname('brand').AsString := txtMarke.Text;
  frmmain.fieldbyname('model').AsString := txtModell.Text;
  try
    FileStream := TMemoryStream.Create;
    FileStream.LoadFromFile(showImage);
    BlobStream := TABSBlobStream(frmmain.Table.CreateBlobStream(frmmain.Table.FieldByName('image_show'),bmWrite));
    BlobStream.CopyFrom(FileStream,FileStream.Size);
    FileStream.Free;
    BlobStream.Free;
    frmmain.Table.Post;
  except
    frmmain.Table.Cancel;
    raise;
  end;
end;
So solltest Du die Texte für brand und model sowie das Blobfeld in "einem Rutsch" in die Datenbank bekommen.

Stephan


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Seite 1 von 2  1 2      

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