Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[FAQ] Zugriff auf MySQL Datenbanken
04.05.2005, 00:17 Uhr
Beitrag #1
[FAQ] Zugriff auf MySQL Datenbanken
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

Viele Grüße
Laurens "Sp33d" Stötzel
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.08.2005, 17:48 Uhr
Beitrag #2
 
Also mal als Frage: Gibts irgendwo ne Hilfe wo die beiden Objekte komplett beschrieben werden Confused:
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.11.2005, 15:03 Uhr
Beitrag #3
 
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.11.2005, 16:10 Uhr
Beitrag #4
 
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2005, 19:11 Uhr
Beitrag #5
 
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  [FAQ] Internetseiten per Script auslesen Sp33d 1 1.690 18.03.2007 18:18 Uhr
Letzter Beitrag: Frank_Grimm
  Bot auf Webspace laufen lassen , aber wie ? TDW-VipeR 2 826 12.10.2004 18:43 Uhr
Letzter Beitrag: siLLe
  reaktion auf befehle nur in bestimmten chans? Fireball-HH 1 377 04.11.2003 04:57 Uhr
Letzter Beitrag: Looop
  Bot soll auf mehrere Wörter reagieren Bully 16 1.614 19.10.2003 20:50 Uhr
Letzter Beitrag: Bully

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste