![]() |
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; |
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 |
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 .
|
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 |
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 ?
|
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 |
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; |
Re: suche vorschläge um blob stream und sql insert zu verknü
Zitat:
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 |
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 |
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:
So solltest Du die Texte für brand und model sowie das Blobfeld in "einem Rutsch" in die Datenbank bekommen.
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; Stephan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 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