Bild mit ODBC/SQL in Containerfeld von Filemaker-Server eintragen

Hallo, ich habe mit Xojo über das ODBC-Plugin Verbindung zu einer FM-Server-Datenbank hergestellt. Das Lesen und Schreiben “normaler” Datentypen bereitet kein Problem. Etwas schwieriger ist es, Bilder in sog. “Container-Felder” einzuschreiben (Lesen geht).

Dafür stellt das Filemaker-SQL die Funktion PutAs(pict,‘JPEG’) zur Verfügung. Allerdigs weiss ich nicht so recht, was ich in Xojo anstelle von ‘pict’ einsetzen soll. Ein Xojo-Picture-Objekt wird nicht genommen (logisch, das SQL ist ein String), ein String mit den binären Bilddaten auch nicht … ?

Bei Claris finde ich (allerdings für Java) dieses Beispiel:

sql = "INSERT INTO english_nature (ID, img) VALUES (1, PutAs(?, 'JPEG'))";

Das Fragezeichen ist ein Platzhalter, dessen Inhalt irgendwie “nachgeliefert” wird, aber wie mache ich das in Xojo?

Ich hoffe ja auch, dass Christian hier mitliest :slight_smile: , der hat auch eine innige Beziehung zu FM.

Da hier bisher niemand geantwortet hat, hab ich verbissen weiter recherchiert. Oft ist es ja so, dass einfach das passende Suchwort fehlt. Da bin ich izwischen etwas weiter:

" ODBCPreparedStatement" … nutzt genau die “ominösen” Fragezeichen als Platzhalter. Die Ihnalte werden mit “bind” nachgereicht.

Habs noch nicht fertig, ab ich bleibe dran.

So, wen es interessiert, hier ist der Code um Bilder per ODBC und SQL in einer Filemaker-Datei einzutragen:

var pict as picture = graupapagei //this picture exists inside the xojo project for testing

//fmdb is a opened odbc database object, connected with a filemaker server

var ps As ODBCPreparedStatement = fmdb.Prepare("INSERT INTO picttest ( text , pict) VALUES ( 'testtext', PutAs(?,'PNGf'))" )

//the table is named "picttest" and contains a text field an a container field
//PutAs() is a propritary function of Filemaker-SQL, other databases may have other

try

ps.BindType(0, ODBCPreparedStatement.ODBC_TYPE_BINARY)
//set the type of first (and only) parameter by '?' zero based

ps.ExecuteSQL(pict.GetData(picture.FormatPNG))
//parameter of this function ist a list with data sources, here only one

catch err as DatabaseException

msgbox err.Message

end try