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