Diese Tipp zeigt, wie sich ein Dump einer MySQL-Datenbank erstellen und als Backup in einer Textdatei sichern lässt. Die Textdatei ist hierbei identisch mit der Textdatei, die PHPMyAdmin anlegt und kann somit von PHPMyAdmin auch ausgeführt werden. Der Code wurde unter WindowsXP und VB6 mit einer ODBC-Verbindung getestet. Damit die "MakeBackupNow"-Funktion eine Verbindung zur Datenbank bekommt, muss ein MyODBC-Treiber installiert sein, der sich zur Datenbank verbindet. Die Code funktioniert mit jeder MySQL-Version ab 3.23.03. Public Sub MakeBackupNow(ODBCBaseName As String, ByVal sBackupFile As String) On Error Resume Next Dim oConn As ADODB.Connection Dim BaseMakeBackup As Recordset Dim BaseMakeBackupCreate As Recordset Dim DataBaseTables As Recordset Dim prevIndex As String Dim f As Integer Dim m As Integer Dim d As Integer Dim ArraCountFeld(99) Dim ArraCountWert(99) Dim ZeilenString As String Dim CheckPrimZeile As String Dim CheckKeyZeile As String Dim ZeilenStringCreate As String Dim TabellenName As String Dim DatenString As String Dim DateiNR As Integer ' Backup-Datei öffnen Open sBackupFile For Output As DateiNR ' Verbindung zur MySQL-Datenbank herstellen Set oConn = New Connection Set BaseMakeBackup = New ADODB.Recordset Set BaseMakeBackupCreate = New ADODB.Recordset Set DataBaseTables = New ADODB.Recordset oConn.Open "Provider=MSDASQL;DSN=" & ODBCBaseName ' alle Tabellen ermitteln TabellenName = "" With DataBaseTables .Open "SHOW TABLE STATUS", oConn Do While Not .EOF TabellenName = .Fields.Item("Name").Value CheckPrimZeile = "" ' Informationen der Felder einer Tabelle abfragen With BaseMakeBackupCreate .Open "SHOW FIELDS FROM " & TabellenName, oConn ' Datei-Information Print #DateiNR, "" Print #DateiNR, "#" Print #DateiNR, "# Tabellenstruktur für Tabelle " & TabellenName & "" Print #DateiNR, "#" Print #DateiNR, "" ' SQL-Anweisungen zur Erstellung der jeweiligen ' Tabelle in die Textdatei schreiben ZeilenStringCreate = "CREATE TABLE " & TabellenName & " (" Print #DateiNR, ZeilenStringCreate Do While Not .EOF ZeilenStringCreate = " " & .Fields.Item(0).Value & " " & .Fields.Item(1).Value If .Fields.Item(2).Value <> "YES" Then ZeilenStringCreate = ZeilenStringCreate & " NOT NULL" End If If .Fields.Item(3).Value = "PRI" Then CheckPrimZeile = " PRIMARY KEY (" & .Fields.Item(0).Value & ")" End If If .Fields.Item(3).Value = "MUL" Then CheckKeyZeile = "Wahr" End If If .Fields.Item(4).Value <> "" Then ZeilenStringCreate = ZeilenStringCreate & " default '" & .Fields.Item(4).Value & "'" End If If .Fields.Item(5).Value = "auto_increment" Then ZeilenStringCreate = ZeilenStringCreate & " auto_increment" End If ' nächstes Feld .MoveNext If .EOF = True Then If CheckPrimZeile <> "" Then ZeilenStringCreate = ZeilenStringCreate & "," Else If CheckKeyZeile <> "" Then ZeilenStringCreate = ZeilenStringCreate & "," End If End If Else ZeilenStringCreate = ZeilenStringCreate & "," End If Print #DateiNR, ZeilenStringCreate Loop If CheckKeyZeile <> "" Then If CheckPrimZeile <> "" Then CheckPrimZeile = CheckPrimZeile & "," End If If CheckPrimZeile <> "" Then Print #DateiNR, CheckPrimZeile .Close ' alle Indexes ermitteln .Open "SHOW KEYS FROM " & TabellenName, oConn f = 0 prevIndex = "" CheckKeyZeile = "" Do While Not .EOF If .Fields.Item("Key_name").Value <> prevIndex Then ArraCountWert(f) = .Fields.Item("Column_name").Value ArraCountFeld(f) = .Fields.Item("Key_name").Value Else ArraCountWert(f) = ArraCountWert(f) & "," & .Fields.Item("Column_name").Value End If prevIndex = .Fields.Item("Key_name").Value ' zum nächsten Index .MoveNext If .EOF = False Then If .Fields.Item("Key_name").Value <> prevIndex Then f = f + 1 End If Loop ' Indexes in BackUp-Datei schreiben For m = 0 To f If Not ArraCountFeld(m) = "PRIMARY" Then If m < f Then Print #DateiNR, " KEY " & ArraCountFeld(m) & " (" & ArraCountWert(m) & ")," Else Print #DateiNR, " KEY " & ArraCountFeld(m) & " (" & ArraCountWert(m) & ")" End If End If Next m .Close ZeilenStringCreate = ") TYPE=MyISAM;" Print #DateiNR, ZeilenStringCreate End With ' SQL-Anweisungen zur Speichern der Datensätzen der ' jeweiligen Tabelle in die Textdatei With BaseMakeBackup .Open "SELECT * FROM " & TabellenName & "", oConn Print #DateiNR, "" Print #DateiNR, "#" Print #DateiNR, "# Daten für Tabelle " & TabellenName & "" Print #DateiNR, "#" Print #DateiNR, "" Do While Not .EOF ZeilenString = "INSERT INTO " & TabellenName & " VALUES (" For d = 0 To .Fields.Count - 1 DatenString = .Fields.Item(d).Value ' Currency-Feld: Komma durch Punkt ersetzen If .Fields.Item(d).Type = 131 Then DatenString = Replace(Format$(DatenString, "0.00"), ",", ".") End If ' Backslash durch Doppel-Backslash ersetzen DatenString = Replace(DatenString, "\", "\\") ' Hochkomma durch Backslash+Hochkomma ersetzen DatenString = Replace(DatenString, "'", "\'") ' CR durch \r\n ersetzen DatenString = Replace(DatenString, Chr(13), "\r\n") ZeilenString = ZeilenString & "'" & DatenString & "', " Next d ZeilenString = Left(ZeilenString, Len(ZeilenString) - 2) & ");" Print #DateiNR, ZeilenString ' zum nächsten Datensatz .MoveNext Loop .Close End With ' zur nächste Tabelle .MoveNext Print #DateiNR, "#--------------------------------------------" Loop ' DB-Verbindung schließen .Close End With oConn.Close Close End Sub Der Aufruf der MakeBackupNow-Funktion erfolgt so: MakeBackupNow "ODBC Name", App.Path & "\backup.sql" Als ODBC-Name muss der Name der ODBC-Verbindung eingegeben werden. Der Code wird kontinuierlich weiterentwickelt.
Dieser Tipp wurde bereits 20.488 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |