Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Bilder in DB erzeugt ORA-22275 (https://www.delphipraxis.net/17036-bilder-db-erzeugt-ora-22275-a.html)

kama 27. Feb 2004 08:52


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:
create table BILDER
(
  BILDNAME  VARCHAR2(50) not null,
  BILDBINARY BLOB
)
Mit der auskommentierten Zeile lief es zwar, aber mache Bilder waren zum Teil
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:
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;
[edit=sakura] [sql]-Tags. Mfg, sakura[/edit]

Robert_G 27. Feb 2004 10:45

Re: Bilder in DB erzeugt ORA-22275
 
Da du Oracle verwendest kann ich dir nur Direct Oracle Access empfehlen.
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:

kama 27. Feb 2004 10:58

Re: Bilder in DB erzeugt ORA-22275
 
Ich benutze nicht ADO sondern gehe noch ganz konventionell über die BDE

Robert_G 27. Feb 2004 11:17

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.

kama 27. Feb 2004 12:57

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 ....

Robert_G 27. Feb 2004 13:18

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.

kama 27. Feb 2004 13:27

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 ?

Robert_G 27. Feb 2004 14:09

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 :?:

kama 2. Mär 2004 07:30

Re: Bilder in DB erzeugt ORA-22275
 
Du mußt im TDataBase bei Params folgendes eintragen

PATH=\\.......
SERVER NAME= ......
USER NAME=YXZ
PASSWORD=XYZ

baxi 26. Jul 2004 10:12

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 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