Seite 1 von 1

Base mit MySQL - Datei in BLOB-Feld einfügen

Verfasst: Fr, 26.08.2011 17:33
von Martin45527
Hallo zusammen,

ich arbeite mich derzeit ein wenig in Base ein und nutze als Datenbank MySQL.

So einigermaßen komme ich klar, auch wenn es ab und an Probleme beim Anlegen von Fremdschlüsseln gibt, die ich bisher nicht einordnen konnte. Aber deswegen melde ich mich hier nicht. Ich will eingescannte Dokumente - möglichst PDF-Dateien, alternativ notfalls auch Grafiken - in der Datgenbank ablegen und suche eine Möglichkeit, wie dies in der Kombination mit MySQL geht.

Hat jemand Hinweise oder Links für dieses Problem für mich?

Im vorraus vielen Dank!

Der Martin

Re: Base mit MySQL - Datei in BLOB-Feld einfügen

Verfasst: Mo, 29.08.2011 17:08
von DPunch
Aloha

Beispielcode (auf die Schnelle zusammengebastelt, ohne Fehlerbehandlung etc.) - liest ein File ein, schreibt es in eine als (MEDIUM-)BLOB definierte MySQL-Tabellenspalte, liest das BLOB wieder aus und schreibt es zurück auf die Festplatte:

Code: Alles auswählen

	'##### Anpassen
	sDatabaseName = "meineDatenbank" 'Name, unter dem die Datenbank bei Base registriert ist
	sTableName = "meineTabelle" 'Fragliche Tabelle
	sColumName = "meineBLOBSpalte" 'Name der Spalte, in der das BLOB untergebracht ist/werden soll
	sPrimaryKeyColumn = "ID" 'Name der Spalte, in der PK steht
	sUser = "" 'Username
	sPassword = "" 'Passwort
	sInsertFileURL = "D:\meinBild.jpg" 'URL des einzulesenden Files
	sOutputURL = "D:\meinBild2.jpg" 'URL, an die das File zurückgechrieben werden soll
	'#####
	sInsertFileURL = ConvertToURL(sInsertFileURL)
	sOutputURL = ConvertToURL(sOutputURL)
	oFileAccess = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
	Dim aByteArray() as Byte
	
	oDatabaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	oDataSource = oDatabaseContext.getByName(sDatabaseName)
	oConnection = oDataSource.getConnection(sUser,sPassword)
		
	nFileSize = oFileAccess.getSize(sInsertFileURL)
	oInputStream = oFileAccess.openFileRead(sInsertFileURL)
	oInputStream.readBytes(aByteArray,nFileSize)
	oInputStream.closeInput
	
	sSQL = "INSERT INTO `" & sTableName & "`(`" & sColumName & "`) VALUES(?)"
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oPreparedStatement.setBytes(1,aByteArray)
	oPreparedStatement.executeUpdate
	
	sSQL = "SELECT LAST_INSERT_ID() FROM `" & sTableName & "`"
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oResult = oPreparedStatement.executeQuery
	oResult.Next
	nLastID = oResult.getInt(1)
	
	sSQL = "SELECT `" & sColumName & "` FROM `" & sTableName & "` WHERE `" & sPrimaryKeyColumn & "` = " & nLastID
	oPreparedStatement = oConnection.prepareStatement(sSQL)
	oResult = oPreparedStatement.executeQuery
	oResult.Next	
	aByteArray = oResult.getBytes(1)
	oOutputStream = oFileAccess.openFileWrite(sOutputURL)
	oOutputStream.writeBytes(aByteArray)
	oOutputStream.closeOutput

Re: Base mit MySQL - Datei in BLOB-Feld einfügen

Verfasst: Do, 01.09.2011 21:50
von Martin45527
Vielen Dank! Ich werde es mit diesem Code probieren.

Martin