![]() |
Datenbank: Oralce • Zugriff über: DOA
Update/insert CLOB Feld in Oracle (TLobLocator)
Moin moin allerseits !
Mein Problem ist das einfügen bzw Updaten eines CLOB Feldes in einer Orcale DB und so langsam treibt es mich in den Wahnsinn... auch wenn da wohl eh schon nicht viel fehlt... Das Ganze soll ja mit eine Loblocator funktionieren, aber troz Doku und Google wälzen werde ich daraus nicht schlau. Hier ist meine letzter Versuch:
Delphi-Quellcode:
Hierbei bekomme ich einen "invalid handle" beim LoadFromFile ... :pale:
...
qry:=TOracleQuery.Create(..); LOB := TLOBLocator.Create(ORA_Session,otCLOB); qry.Session:=ORA_Session; qry.SQL.Text:='Update Tabelle_1 SET Daten= :DATA where id = 1'; qry.DeclareVariable(':DATA',otCLOB); qry.SetComplexVariable(':DATA',LOB); LOB.LoadFromFile('C:\RTMGen_TMP.rtm'); qry.Execute; ... Etwas genauer: Das Programm ist ein Administartionstool für einen Report Generator. Mit diesem werden SQL, Anmeldung usw angelegt, und ausgeführt. Mit dem Report Designer der zum ReportBuilder gehört kann dann der Admin schön den Report gestalten, und anschliessend soll alles in die Steuertabellen für das Anwenderprogrammes geschrieben werden. Bin für jede Hilfe und noch so kleine Anergung dankbar. :wall: MfG Kai Hennigs |
Re: Update/insert CLOB Feld in Oracle (TLobLocator)
Du solltest auf jeden Fall die Zeilen 9 und 10 vertauschen, da du erst die Daten Laden musst, bevor du diese dem Parameter zuweist.
Da ich selbst mit dem TLobLocator noch nicht gearbeitet habe, kann ich dir im Moment nicht mehr dazu sagen. Habe nochmal in der Hilfe nachgesehen. Wenn du einen neuen Datensatz hast, kannst du eventuelle Probleme bekommen. Hier ein Auszug aus der Hilfe zum TLOBLocator: Zitat:
|
Re: Update/insert CLOB Feld in Oracle (TLobLocator)
Mh, also auf jeden Fall schon mal danke für die Tipps @Jasocul !
Bringt mich leider nicht weiter... Bei mir treten beide Fälle auf. Ich möchte sowohl vorhandene Datensätze ändern als auch wenn nötig vorhandene updaten. Ich probiers weitere, aber leider lauf ich gerade gegen eine Wand-> :wall: (Auch der Versuch das CLOB als String zu interprtieren schlug fehlt, weil alles über ca 4000 Zeichen hinten abgeschnitte wird..schade eigentlich!) MfG Kai Hennigs NACHTRAG:::: _> YEAHI ! Nach 6 h hab ich das Problem lösen können. Werde meine Code vervollständigen, und dann hier posten, falls jemand mal ein ähnliches Problem hat. ...so kann ich der DP mal was zu zahlen :-) |
Re: Update/insert CLOB Feld in Oracle (TLobLocator)
OK , also hier mal meine Lösung:
Delphi-Quellcode:
procedure[i] XYZ[/i]([i]PQR[/i]);
var LOB: TLOBLocator; qry: TOracleQuery; begin try qry := TOracleQuery.Create(..); LOB := TLOBLocator.Create([i]SESSION[/i], otCLOB); try with qry do begin Session := [i]SESSION[/i]; // [i]SPALTE[/i] ist das (C)LOB Feld // Füllen des Feldes mit einen leeren clob SQL.Text := 'UPDATE [i]TABELLE[/i] SET [i]SPALTE[/i]= empty_clob() WHERE id =' [i]ID[/i] + ' returning [i]SPALTE[/i] into :[i]SPALTE[/i]'; // Variable deklarieren DeclareVariable('[i]SPALTE[/i]', otClob); // Variable als Lobverweis setzen SetComplexVariable('[i]SPALTE[/i]', LOB); end; // Statemant ausführen qry.Execute; // Verweis aus Lobinhalt übergeben und aus Datei laden LOB.AsString := sRtm; // Alternativ: LOB.LoadfromFile(String); // Committen :-) DBAnmeldung.DB.Commit; finally qry.free LOB.free except // Sprich zu mir! on E: Exception do begin raise Exception.create(self.ClassName + 'DB-Eintraungg schlug fehl! ' + ' ' + E.Message); // Im Fehlerfalls -> Rückwärtsrolle DBAnmeldung.DB.Rollback; end; end; MfG Kai Hennigs |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 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