![]() |
Bilder in DB erzeugt ORA-22275
Hallo,
ich möchte mit folgernder procedure Bilder in eine DB schieben. Ich benutze Delphi 6 Ent. und eine Oracle 8i DB. Die Tabelle hat folgendes Format:
SQL-Code:
Mit der auskommentierten Zeile lief es zwar, aber mache Bilder waren zum Teil
create table BILDER
( BILDNAME VARCHAR2(50) not null, BILDBINARY BLOB ) kaputt oder Farbverfälscht. Nun habe ich gelesen, daß ftOraBlob speziel für Oracle 8 Tabellen ist. Ich bekomme da aber eine Fehlermeldung 'ORA-22275: invalid LOB locator specified'. Irgendwo habe ich gelesen, daß ich erst einen Lob Locator öffnen muß, aber wie ? Gruss Karsten
Delphi-Quellcode:
[edit=sakura] [sql]-Tags. Mfg, sakura[/edit]
procedure TForm1.mnuLoadClick(Sender: TObject);
var Jpg : TJpegImage; Stream : TMemoryStream; FileExt : string; begin if dlgOpenPicture.Execute then begin Jpg := nil; Stream := nil; try Stream := TMemoryStream.Create; Jpg := TJpegImage.Create; Jpg.LoadFromFile( dlgOpenPicture.FileName ); Image1.Picture.Assign( Jpg ); Jpg.SaveToStream( Stream ); Stream.Position := 0; // Query1.ParamByName( 'PBildBinary' ).LoadFromStream( Stream, ftBlob ); Query1.ParamByName( 'PBildBinary' ).LoadFromStream( Stream, ftOraBlob ); Query1.ParamByName( 'PBildname' ).AsString := ExtractFilename( dlgOpenPicture.FileName ); Query1.Prepare; Query1.ExecSQL; except jpg.Free; Stream.Free; raise; end; jpg.Free; Stream.Free; end; end; |
Re: Bilder in DB erzeugt ORA-22275
Da du Oracle verwendest kann ich dir nur
![]() Nachdem du das Package einmal verwendet hast läuft es dir eiskalt den Rücken runter, wenn du mit ADO oder sonstwas auf eine DB zugreifen musst. :zwinker: Da es sich dabei um eine Enkapselung der API des OracleClients handelt (OCI), wird bei jeder OraVersion der richtige API-Befehl genutzt. (seit 7.3 werden alle Versionen komplett ünterstützt) Der LOB-Locator ist eine Referenz auf die physische Position des LOB-Feldes im Tablespace. Keine Ahnung, wie du den in ADO bekommst... :gruebel: |
Re: Bilder in DB erzeugt ORA-22275
Ich benutze nicht ADO sondern gehe noch ganz konventionell über die BDE
|
Re: Bilder in DB erzeugt ORA-22275
BDE & Oracle ??? -> Das ist keine sehr gute Idee. (bitte nicht falsch auffassen :roll: )
Mit der BDE bist du einfach nicht in der Lage die Vorteile von Oracle nutzen zu können. Da könntest du ja auch gleich mySQL nutzen (wäre dann auch günstiger). Seit Oracle 8 hat sich sehr viel verändert. Sogar dein 8i ( ist es 8.16 oder 8.17 ? ) hat sehr viele neue Features bekommen. Da die BDE nicht mehr weiterentwickelt wird, kann da vieles einfach nicht mehr richtig funktioieren. DOA kann alles was Oracle kann (bei Oracle 10 fast alles), und das so logisch und übersichtlich, dass ich jedesmal Mitleid bekomme, wenn ich hier ADO/BDE-Code sehe. Ich kann z.Bsp. eine geöffnete TOracleQuery an einen Ref Cursor in einem anonymen Block übergeben, der den Cursor weiter nutzen kann ohne, dass ein neuer geöffnet werden muss (das funktioniert auch andersherum)! Es gibt sogar die Möglichkeit Session-pooling zu simulieren - auch ohne Oracle9i!!! Ich wollte jetzt hier keine große Werbeaktion starten, aber die 229€ hast du allein an Arbeitszeit/Nerven in sehr kurzer Zeit wieder wett gemacht. |
Re: Bilder in DB erzeugt ORA-22275
Ich betreue hier historisch gewachsene Delphi Applicationen, die z.T sogar noch von Delphi 2 her kommen.
Und mit ADO (nicht DOA) habe ich keine so guten Erfahrungen gemacht .... |
Re: Bilder in DB erzeugt ORA-22275
Um ein LOBFeld in die DB zuschreiben (INSERT, bei UPDATE hast du ja schon den Locator) musst erst mit Hilfe des Clients ein Locator auf einen leeren LOB geholt werden. Vorsicht ein leerer LOB ist kein "null" LOB!
Diese Art des Zugriffs auf LObs unterscheidet sich von der anderer DBs, deshalb glaube ich nicht, dass die alte BDE das bei neueren Oracle Versionen einwandfrei schafft. p.s.:Ist es vielleicht möglich, dass TJpegImage ein paar kleine Fehlerchen hat? Wenn du das Bildchen unkomprimiert (.bmp) in die DB schreibst, könntest du das ja testen. |
Re: Bilder in DB erzeugt ORA-22275
Bei bmp bekommen ich zwar "ganze" Bilder aber Farbverfälschungen ... aber auch nicht immer
Und zu BDE in der Hilfe steht: ftOraBlob BLOB-Felder in Oracle 8-Tabellen also scheint das explizit dafür zu sein. Meine Frage ist nur, wie bekommen ich den leeren Blob-Locator ? |
Re: Bilder in DB erzeugt ORA-22275
Wenn du mir erklärst, wie mit der BDE auf Oracle komme, könnte ich dir helfen.
Nachtrag: Wie ich mit der BDE auf Oracle komme weiß ich immmer noch nicht... Ich versteh das Ding irgendwie nicht, wie kann ich dieser TDataBase klar machen mit welchem Passwort sie die Anmeldung machen soll :?: |
Re: Bilder in DB erzeugt ORA-22275
Du mußt im TDataBase bei Params folgendes eintragen
PATH=\\....... SERVER NAME= ...... USER NAME=YXZ PASSWORD=XYZ |
Re: Bilder in DB erzeugt ORA-22275
Hallo zusammen
versuch es einmmal anstelle von einen BLOB Feld mit einem LONG RAW Feld in Oracle. Dieses sollte besser funktionieren. |
Re: Bilder in DB erzeugt ORA-22275
Hi,
nocheinmal ganz schnell ein Hinweis: Auch wenn ADO hier nicht die 1.Wahl ist, wenn es doch einmal ADO sein soll, dann bitte nicht die ADODatasetabkömmlinge von Borland sondern TBetteradodataset verwenden, das erspart eine Menge Probleme. Borland hat sich das Geld gepart, Bugs aus den eigenen Komponenten zu fixen, weil sich ja jeder kostenfrei im Netz TBetteradodataset besorgen kann. Grüsse Woki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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