AnGelBot-Portal²

Normale Version: [FAQ] Zugriff auf MySQL Datenbanken
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Da in letzter Zeit des öfteren nach MySQL Zugriff gefragt wird, hier ein kl. Tutorial, wie man auf eine Tabelle zugreift.

Der Bot bietet von sich aus einen Zugriff auf Datenbanken (auch andere als MySQL, sog. ODBC Datenbanken) über sogenannte Datei-DSNs (Data Source Names). Die Einstellungen für die Verbindung (Server, Datenbank, Username und Passwort) werden dabei in solch einem Datei-DSN gespeichert und vom Bot benutzt um eine Verbindung zum Server herzustellen.

Hier ein kleiner Codeschnippsel um eine solchen Datei-DSN zu erstellen:
Code:
Sub CreateDSN(sName, sServer, sDatabase, sUsername, sPassword)
  WriteINIString "ODBC", "DRIVER", "MySQL ODBC 3.51 Driver", sName & ".dsn"
  WriteINIString "ODBC", "SERVER", sServer, sName & ".dsn"
  WriteINIString "ODBC", "DATABASE", sDatabase, sName & ".dsn"
  WriteINIString "ODBC", "USER", sUsername, sName & ".dsn"
  WriteINIString "ODBC", "PASSWORD", sPassword, sName & ".dsn"
End Sub

Diese Prozedur erstellt einen Datei-DSN im AnGelBot-Ordner, der über den MySQL ODBC 3.51 Treiber laufen wird. Der Treiber muss auf dem PC des Bots installiert sein. Ihr könnt ihn hier (Link) runterladen.

Wie stellt man aber nun eine Verbindung her und vor allem: Wie bekommt man irgendwelche Daten?
Hier bietet der Bot 3 Methoden, die Zugriff auf die Daten ermöglichen:

Code:
Sub Init()
  'Variable in der ein Verweis auf unsere DSN gespeichert wird
  Dim myDSN

  Script "MySQL Beispiel"

  'Erstellt eine Datei-DSN mit dem Namen "mysql_test.dsn" im AnGelBot-Ordner
  CreateDSN "mysql_test", "www.mein-server.com", "Datenbank", "Benutzer", "Passwort"

  'Datei-DSN laden und Verbindung herstellen
  Set myDSN = LoadDSN("mysql_test")

  '...Daten abrufen...

  'Verbindung trennen
  CloseDSN myDSN

  'Variablen freigeben
  Set myDSN = Nothing
End Sub

Bis jetzt erstellt unser Script also einen Datei-DSN, verbindet sich mit dem Server (LoadDSN) und trennt die Verbindung später wieder (CloseDSN).

Nun zum interessantesten Teil: Daten abrufen.
Für diese Aufgabe verfügt der Bot über die Funktion SQLExecute. Sie kann nur aufgerufen werden, wenn vorher LoadDSN aufgerufen wurde und man den Rückgabewert (Verweis auf den DSN) gespeichert hat.
Nicht vergessen, dass man diese Zuweisung mit "Set <Variable> = LoadDSN("<DSN>")" machen muss, weil es sich bei dem Rückgabewert um ein Objekt handelt.

Die Funktion SQLExecute liefert wiederrum ein Objekt zurück, dieses mal ein ADO-Recordset, was alle Daten beinhaltet die ihr angefragt habt.

Code:
Sub Init()
  Dim myDSN, myData

  Script "MySQL Beispiel"

  'Erstellt eine Datei-DSN mit dem Namen "mysql_test.dsn" im AnGelBot-Ordner
  CreateDSN "mysql_test", "www.mein-server.com", "Datenbank", "Benutzer", "Passwort"

  'Datei-DSN laden und Verbindung herstellen
  Set myDSN = LoadDSN("mysql_test")

  '...Daten abrufen...
  Set myData = SQLExecute(myDSN, "SELECT COUNT(*) FROM table")
  SpreadFlagMessage 0, "+m", myData.Fields(0) & " Zeilen in Tabelle 'table'"

  'Verbindung trennen
  CloseDSN myDSN

  'Variablen freigeben
  Set myDSN = Nothing
  Set myData = Nothing
End Sub

Folgende erwähnenswerte Eigenschaften und Methoden hat ein ADO-Recordset was ihr über SQLExecute erhaltet:

BOF - aktueller Zeiger ist auf dem ersten Eintrag
EOF - aktueller Zeiger ist auf dem letzten Eintrag
Fields - eine Liste der empfangenen Werte in den Spalten
Fields.Count - Anzahl der empfangenen Spalten
Fields(0) - Zugriff auf die erste Spalte
Fields(1) - Zugriff auf die zweite Spalte usw...


Beachtet auch die Einstellungen im PolicySetup (.policy), Nummer 2 "Database"!
Viel Spaß beim Testen und nicht so schnell aufgeben Wink
Also mal als Frage: Gibts irgendwo ne Hilfe wo die beiden Objekte komplett beschrieben werden Confused:
Hi!
Gibts das ganze auch für MSSQL?
Brauche das für en Gameserver. In der Tabelle steht unter anderem: "nick", "level" und "Resets".

Diese sollen mit !rank [nick] ausgelesen und in den chan geschiebe werden. Etwas so: [nick] ist lvl[level] und hat [resets]resets.

Sry das ich soviele fragen stelle aber bin en ziemlicher noob was vbs und ircbots angeht.

Schonmal danke fürs lesen ^^

mfg

MaSch
Es ist möglich, man braucht nur die entsprechenden MSSQL-Daten in einem ODBC-File zu speichern. Das Script dazu kann ich dir theoretisch machen, nur die ODBC Datei musst du erstellen. Wie das geht kann ich dir erklären.
Das wäre echt nett. Könntest mich vllt über icq anschreiben? Oder gib mir deine Nummer dann schreib ich dich an Smile

mfg

MaSch
Referenz-URLs