fb:porticula NoPaste
MySQL und FreeBASIC - Kleines Beispiel
Uploader: | Sebastian |
Datum/Zeit: | 28.02.2009 15:26:11 |
#include once "mysql\mysql.bi"
#include once "windows.bi"
#include once "vbcompat.bi"
#define NULL 0
DECLARE FUNCTION ZeigAktuelleTabelle () AS INTEGER
DECLARE FUNCTION MySQLInfo () As String
DECLARE FUNCTION MySQLInsert (ByVal A As String, ByVal B As Integer) As Integer
CONST MySQLHost = <MySQLServer>
CONST MySQLUser = <Benutzername>
CONST MySQLPW = <Passwort>
CONST MySQLDB = <Datenbank>
Dim As String ServerInfo = MySQLInfo(), u
Dim As Integer ausw, result, a
DO
'Oberfläche
CLS
PRINT: PRINT " MYSQL-Beispiel fuer FreeBASIC": PRINT
PRINT " Serverinfo: "; ServerInfo
PRINT
PRINT " (1) Tabelle anzeigen"
PRINT " (2) Datensatz einfuegen"
PRINT " (0) Beenden"
PRINT
DO: LOOP WHILE INKEY <> ""
INPUT " Auswahl: ", ausw
Select Case ausw
Case 0: End
Case 1
If ZeigAktuelleTabelle() < 0 Then
PRINT " Fehler."
Sleep: End
End If
Case 2
PRINT
INPUT " Benutzername: ", u
INPUT " Alter: ", a
PRINT
result = MySQLInsert(u,a)
If result < 1 Then
PRINT " Fehler " & result
ELSE
PRINT " Neuer Datensatz: " & result
END IF
SLEEP
Case Else
Beep
End Select
LOOP
FUNCTION MySQLInfo () As String
'Verbindung zum MySQL Server herstellen und Informationen zur
'Serversoftware abfragen - Zweck: Test, ob die Verbindung so
'funktioniert, wie sie funktionieren soll.
dim db as MYSQL ptr
Dim ServerInfo As String
db = mysql_init( NULL )
if( mysql_real_connect( db, MySQLHost, MySQLUser, MySQLPW, NULL, MYSQL_PORT, NULL, 0 ) = 0 ) then
print "Es konnte keine Verbindung zum MySQL-Server hergestellt werden."
mysql_close( db )
SLEEP
end
end if
ServerInfo = *mysql_get_server_info( db )
Mysql_close(db)
Return ServerInfo
END FUNCTION
FUNCTION MySQLInsert (ByVal A As String, ByVal B As Integer) As Integer
dim db as MYSQL ptr
Dim Query As String
Dim ID As Integer
Dim result As Integer
Dim Fehler as ZString Ptr
db = mysql_init( NULL )
if mysql_real_connect( db, MySQLHost, MySQLUser, MySQLPW, NULL, MYSQL_PORT, NULL, 0 ) = 0 then Return -1
if mysql_select_db( db, MySQLDB ) then Return -2
'Achtung: Die Werte, die im Folgenden eingefügt werden, müssten aus Sicherheitsgründen
'noch "escapet" werden. Darauf ist in diesem Fall der Einfachheit halber verzichtet
'worden. Im "Echteinsatz" muss das aber sein.
query = "INSERT INTO testtab (`username`,`alter`,`zeit`) VALUES (" & chr(34) & A & chr(34) & "," & chr(34) & B & chr(34) & ",CURRENT_TIMESTAMP())"
result = mysql_real_query (db,STRPTR(query),LEN(query))
If result = 0 THEN
ID = mysql_insert_id(db)
mysql_close(db)
Return ID
ELSE
Fehler = mysql_error(db)
If (*Fehler)[0] <> 0 Then
PRINT " "; *mysql_error(db)
END IF
mysql_close(db)
Return -3
END IF
END FUNCTION
FUNCTION ZeigAktuelleTabelle () AS INTEGER
dim db as MYSQL ptr
dim row as MYSQL_ROW
dim res as MYSQL_RES ptr
Dim As String Query
Dim As Integer i
db = mysql_init( NULL )
if (mysql_real_connect( db, MySQLHost, MySQLUser, MySQLPW, NULL, MYSQL_PORT, NULL, 0 ) = 0) then Return -1
if (mysql_select_db( db, MySQLDB )) then Return -2
query = "SELECT * FROM testtab ORDER BY id ASC"
If mysql_real_query (db,STRPTR(query),LEN(query)) <> 0 THEN
mysql_close(db)
Return -3
END IF
res = mysql_use_result(db)
CLS
PRINT: PRINT " Vorhandene Datensaetze:": PRINT
PRINT " ID | Benutzername | Alter | Erfassungszeitpunkt"
PRINT " --------------------------------------------------"
Do
row = mysql_fetch_row( res )
if( row = NULL ) then
Exit Do
ELSE
PRINT USING " #### | \ \ | ### | &"; Val(*row[0]), *row[1], Val(*row[2]), *row[3]
END IF
LOOP
mysql_close(db)
SLEEP
RETURN 0
END FUNCTION