Vielleicht versteh ich hier was nicht....
Aber erfindest du das Rad gerade neu ??
Funktionsfähige libmysql.dll Wrapper funktionen gibt es doch schon:
http://forums.purebasic.com/german/viewtopic.php?t=4964
Invalid Memory Access beim Zugriff auf eine DLL
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Nun dort habe ich das Problem wie überall.PAMKKKKK hat geschrieben:Vielleicht versteh ich hier was nicht....
Aber erfindest du das Rad gerade neu ??
Funktionsfähige libmysql.dll Wrapper funktionen gibt es doch schon:
http://forums.purebasic.com/german/viewtopic.php?t=4964
Ich kann keine Binären Daten abfragen (habe Bilder in der DB). Deswegen muss ich mir eine eigene kleine Wrapper Lib zusammenschustern.
Anscheinend nutzt hier keiner BLOBs und LONGBLOBS in MySQL Datenbanken

Diese Welt ist krank und ich bin es auch...
Wenn du das schaffst unbedingt posten , ich habe es gestern nicht wirklichBeforegod hat geschrieben: Nun dort habe ich das Problem wie überall.
Ich kann keine Binären Daten abfragen (habe Bilder in der DB). Deswegen muss ich mir eine eigene kleine Wrapper Lib zusammenschustern.
Anscheinend nutzt hier keiner BLOBs und LONGBLOBS in MySQL Datenbanken
geschafft , dummes array *g* .Mal abgesehen davon das es eh keinen Sinn macht Bilder in die
Datenbank zu schreiben.

edit :
In meinem Beispiel wuerde es , wenn der Tabellen aufbau bekannt ist, so gehen
Code: Alles auswählen
*sql.mysql = db("localhost","root", "","bubi",3306)
*sql\Query("SELECT * FROM test3")
Structure test_table
id.s
*Pic_data.l
Pic_Name.s
EndStructure
test.test_table
While *sql\fetchrow(@test)
CatchImage(0,test\Pic_data)
SaveImage(0,test\Pic_Name)
Wend
CallDebugger
*sql\close()
Weil das Rad eiert . Deine lib ist sehr langsam. Und irgendwie kannPAMKKKKK hat geschrieben:Vielleicht versteh ich hier was nicht....
Aber erfindest du das Rad gerade neu ??
Funktionsfähige libmysql.dll Wrapper funktionen gibt es doch schon:
http://forums.purebasic.com/german/viewtopic.php?t=4964
man mit den Daten nicht wirklich viel anfangen.
Lange Zeit Pause
soo..
hier der code für das Auslesen eines BLOBs.
Beschränkungen :
- Query darf nur EXAKT einen BLOB zurückgeben
- ist sehr langsam
- nicht sehr sauber programmiert
Meistens mecker er rum wenns um das free_Result geht.. manchmal gehts ohne zu meckern, öfters hängt er sich daran auf.
Die Datei muss man selber mit angeben, wie man sie haben will.
Hier noch eine kleine Testdatei wie man die Daten auslesen kann:
Für Verbesserungsvorschläge usw. bin ich dankbar 
--
Kommentare habe ich mal dringelassen.. sind überreste von anderen Versuchen und anderen Aufbaustrukturen-
hier der code für das Auslesen eines BLOBs.
Beschränkungen :
- Query darf nur EXAKT einen BLOB zurückgeben
- ist sehr langsam
- nicht sehr sauber programmiert

Code: Alles auswählen
Global host.s
Global user.s
Global passwd.s
Global udb.s
Global port.l
Global dbHnd.l
Global SQL.s
Global row.s
#libmysql = 1
#File = 1
host = "localhost"
user = "root"
passwd = "root"
udb = "purebasic"
port = 3306
Procedure.s GetError(db_ID,requester)
Protected Errormsg.s, i.l, Error.l
If CallFunction(#libmysql,"mysql_errno",db_ID) > 0
*Error =CallFunction(#libmysql,"mysql_error",db_ID)
i=-1
Repeat
i=i+1
Errormsg=Errormsg+PeekS(*Error+i,1)
Until PeekB(*Error+i)=0
If requester
Result= MessageRequester("MySQL error", Errormsg, #PB_MessageRequester_Ok)
EndIf
EndIf
ProcedureReturn Errormsg
EndProcedure
Procedure sql_connect()
If OpenLibrary(#libmysql,"libmysql.dll")
Result=CallFunction(#libmysql,"mysql_init",dbHnd)
If Result
dbHnd = Result
If CallFunction(#libmysql,"mysql_real_connect",dbHnd, host, user, passwd, udb, port, "", 0) = 0
GetError(dbHnd,1)
EndIf
EndIf
EndIf
EndProcedure
Procedure WriteSQLData(query.s)
Static *mysqlRows
Static *mysqlLen
Static numRows
Static numFields
If CallFunction(#libmysql, "mysql_real_query", dbHnd, query, Len(query))
GetError(udbHnd, 1)
Else
*mysqlData = CallFunction(#libmysql, "mysql_store_result", dbHnd)
If *mysqlData = 0
Else
numRows = CallFunction(#libmysql, "mysql_num_rows", dbHnd)
;numFields = CallFunction(#libmysql, "mysql_num_fields", dbHnd)
EndIf
EndIf
If numRows > 0
*mysqlRows = CallFunction(#libmysql, "mysql_fetch_row", *mysqlData)
CreateFile(#File, "D:\temp\tester.mpg")
For i = 1 To *mysqlData
*mysqlRows + 1
WriteByte(PeekB(*mysqlRows))
Next i
; Hier wird die neue MEthode ausprobiert
;*bloblength.l = CallFunction(#libmysql, "mysql_fetch_lengths", *mysqlData)
;PrintN(Str(*bloblength))
;PrintN(Str(PeekB(*mysqlRows)))
;WriteData(PeekB(*mysqlRows), Int(*bloblength))
;Input()
CloseFile(#File)
CallFunction(#libmysql, "mysql_free_result", *mysqlData)
EndIf
EndProcedure
Die Datei muss man selber mit angeben, wie man sie haben will.
Hier noch eine kleine Testdatei wie man die Daten auslesen kann:
Code: Alles auswählen
IncludeFile("blob_mysqldll.pb")
OpenConsole()
query.s = "SELECT data FROM blobtest"
Print("Starte MySQL Test mit " + query)
sql_connect()
WriteSQLData(query)

--
Kommentare habe ich mal dringelassen.. sind überreste von anderen Versuchen und anderen Aufbaustrukturen-
Diese Welt ist krank und ich bin es auch...