ich verzweifele gerade daran, einen FreePascal-Code in Purebasic zu übersetzten. Dabei geht es um ein einfaches MySQL Insert. Ich habe mittlerweile 1/2 dutzend Codes und Beispiele (sowohl Sniplets als auch kompeltte Wrappe) hier aus dem Forum erfolgls versucht zum Laufen zu bringen. Rahmenbedingung:
Der Code darf nicht unter OBCD laufen, die zugehörige Purebasic Libary soll nicht verwendet werden. Es ist libmysql.dll zu verwenden. Faktisch habe ich zwei Fragen:
1. Hat jemand ein wirklich funktionierendes, wirklich simples beispiel. Ich würde gerne schritt für Schritt jede Zeile verstehen, sodass ich mir daran entlang hangeln kann.
Mein Free-Pascal code war wir folgt:
Code: Alles auswählen
mysql_init(PMySQL(@qmysql)); //Database Init
sock := mysql_real_connect(PMysql(@qmysql),PStrings^[SRV],PStrings^[USR],PStrings^[PWD],nil,0,nil,0); //Sock definition
mysql_select_db(sock,PStrings^[DB]); //Selec Database from Sock
mysql_query(sock,PChar(writedb)); //Send string to sock
mysql_close(sock); //Close Sock link
Code: Alles auswählen
host.s = "172.17.0.xxx"
user.s = "xxx"
passwd.s = "xxx"
db.s = "xxx"
port.l = 3306
;- Structures
Structure MYSQL
EndStructure
dbHnd.l
#libmysql = 1
If OpenLibrary(#libmysql,"libmysql.dll")
Result=CallFunction(#libmysql,"mysql_init",dbHnd)
Debug Result
If Result
dbHnd = Result
Debug dbHnd
; Function : mysql_real_connect(*mysql.MYSQL,host.s,user.s,passwd.s,db.s,port.l,unix_socket.s,client_flag.l)
; Usage : Result.l = mysql_real_connect(*mysql.MYSQL,host.s,user.s,passwd.s,db.s,port.l,unix_socket.s,client_flag.l)
; Desc :
PrototypeC.l PB_mysql_real_connect(*mysql.MYSQL,host.s,user.s,passwd.s,db.s,port.l,unix_socket.s,client_flag.l) : mysql_real_connect.PB_mysql_real_connect = GetFunction(#libmysql,"mysql_real_connect")
Result = mysql_real_connect(dbHnd, host, user, passwd, db, 3306, "", 0)
Debug result
EndIf
EndIf
Es funktioniert:
Code: Alles auswählen
OpenLibrary(#libmysql,"libmysql.dll")
Result=CallFunction(#libmysql,"mysql_init",dbHnd)
Code: Alles auswählen
CallFunction(#libmysql,"mysql_real_connect",dbHnd, xxx, ....)
nach mehreren erfolglosen Versuchen über Bord geworfen. Dabei habe ich u.a. versucht die nötigen Strings über Zeiger (wie oben im FreePascal) zu übergeben. Passend Beispiele aus dem Forum habe ich mit meiner Purebasic-Version nicht zum laufen gebracht. Anschliessend bin ich zu einem Bespiel gewechselt, dass PrototypeC und Structuren verwendet.
2. Frage:
Kann mir jemand etwas besser erklären, wie Prototypes, Structures und Zeiger in Purebasic konret funktionieren: Ich finde die Hilfe hier etwas unklar. Was sind Structures, Prototypes und Zeiger genau und welches Problem sollen sie konkret lösen. Analog, wie funktionieren Prototypes / PrototypesC. Verwirrend finde ich dazu das beispiel Zu Zeigern aus der Hilfe:
Code: Alles auswählen
Text$ = "Hello"
*Text = @Text$ ; *Text speichert die Adresse des Strings im Speicher
*Pointer.String = @*Text ; *Pointer verweist auf *Text
Debug *Pointer\s ; Darstellen des Strings, welcher sich
weil @ und * irgendwie nicht richtig erklärt werden. Mir würde fürs erste auch hier schon mal ein gutes, einfaches Beispiel, das sicher funktioniert, reichen. Ich bin auch gerne bereit mich über Telefon / eine Webleitung / ein Webinar auszutauschen ... Ich bitte den Helfer aber vorab um Geduld mit meiner Unkenntnis ...
Danke und Gruss
Tebse