VB.Net-Datenbank ersetzen

Golox

Grünschnabel
Hallo zusammen,

Gibt es in VB eine Möglichkeit mithilfe des Codes, eine Datenbank in einem bestimmten Ordner, durch eine andere Datenbank in einem anderen Ordner zu ersetzen.

Mit freundlichen Grüßen Golox
 

Nico Graichen

Erfahrenes Mitglied
Hi

Ich weiß nicht wirklich, was du willst :confused:
Erklär dein Problem / deine Frage bitte etwas genauer!

Falls du nur eine Verbindung auf eine andere DB machen willst, musst du die Connection mit den neuen Verbindungsinformationen neu instanziieren.
 

Golox

Grünschnabel
Hallo,
Also ich habe folgendes Problem. Ich habe eine Datenbank, die in einem Datagridview ausgegeben wird. Darin nimmt der User dann Änderungen vor, oder fügt neue Datensätze hinzu. Wenn der User nun auf den Speichern Button klickt, werden die Änderungen in die Datenbank übernommen. Bloß leider in die, die im falschen Verzeichnis liegt. Die geänderte Datenbank wird im Temporary Ordner des Projektes gespeichert. Bei jedem Neustart des Programms wird aber die Datenbank aus dem Startverzeichnis geöffnet und die somit geänderten Daten nicht mit übernommen. Nun dachte ich mir, dass ich die Datenbank im Startverzeichnis einfach durch die Datenbank im Temporary Verzeichnis ersetze und so die geänderten Daten bei jedem Neustart des Programms auch angezeigt werden. Nun brauche ich aber die Funtion, mit der ich eine Datenbank mit einer anderen ersetzen kann.
z.B. sowas
Replace Database c:\EigeneDateien\Datenbank.mdb
With Database c:\EigeneDateien\TemporärerOrdner\Datenbank.mdb

Das ist jetzt natürlich kein Code, sondern dient nur zur Veranschaulichung meines Problems bzw. meiner Frage.

Mit freundlichen Grüßen Golox
 

Golox

Grünschnabel
Danke für die Antwort.
Das müsste auch eigentlich gehen, nur sagt er mir, dass File erst noch deklariert werden muss!?
Mein Code:
Shared Sub Copy(ByVal sourceFileName As String, ByVal destFileName As String)

File.Move(sourceFileName, destFileName)
End Sub
 

Nico Graichen

Erfahrenes Mitglied
Wie es scheint, fehlt die entsprechende Angabe des Namespaces (System.IO) der muss entweder explizit mit angegeben werden oder durch imports (nicht festnageln, du bist VB-Entwickler, Beispiel siehe System.Windows.Forms) global angegeben werden.

PS: Bitte Quellcode in die entsprechenden Code-Tags setzen. Dass macht die Angelegenheit lesbarer.
 

Golox

Grünschnabel
Hallo,

danke für die ganzen Antworten. Ich hab's jetzt einfach mit FileCopy(Source,Destination) gemacht:

Mit freundlichen Grüßen Golox
 

karandras

Grünschnabel
Hi,

auch wenn du das Problem schon gelöst haben solltest. Ich hätte da doch nochmal ne Frage an dich.

"Warum hast du nicht einfach die das DataSet an die richtige Datenbank angebunden?"
Denn wenn ich dich richtig verstanden habe dann werden doch die Daten, die der User im DataGrid" verändert hat in eine Datenbank gespeichert. Nur das diese eben in einem anderen Verzeichnis liegt?

Ich hätte zwei Vorschläge wie du das etwas anders lösen kannst, denn deine jetzige Methode löscht ja jedesmal die Orginaldatenbank.

  1. du machst mittels eines SQL - Befehls ein Update auf die Orginaldatenbank, oder
  2. du bindest die orginaldatenbank als datenquelle an deinen DataAdapter.
Ich hoffe das ich dich jetzt nicht verwirrt habe, bzw. das ich dich richtig verstanden hab.
 

Golox

Grünschnabel
Hallo karandras,
das Dataset ist ja an die richtige Datenbank gebunden, aber irgendwie werden die geänderten Werte in der Datenbank, nur in der Datenbank im Debug Ordner geändert, und nicht im Hauptverzeichnis.

Und dann hätt ich noch ne Frage:

Ich möchte, dass eine Datenbank automatisch ersetzt wird. Das soll so aussehen:
Der User klickt auf die Schaltfläche Datenquelle ersetzen. Dann soll sich ein Standarddialog öffnen, mit dem er die Datenbank auswählt. Die alte Datenbank wird dann durch die neue ersetzt. Mein Code sieht im mom so aus:

Code:
 Function ChangeDatabase(ByVal strDBName As String) As System.Data.OleDb.OleDbConnection
        Dim strConn As String
        Dim objConn As System.Data.OleDb.OleDbConnection
        Dim objConBuilder As New System.Data.OleDb.OleDbConnectionStringBuilder
        Dim objDlg As New System.Windows.Forms.OpenFileDialog()
        With objDlg
            .FileName = "*.mdb"
            .InitialDirectory = Application.StartupPath
            .ShowDialog()
            strDBName = .FileName

        End With

        strConn = objConBuilder.ConnectionString
        objConn = New System.Data.OleDb.OleDbConnection(strConn)
        FileCopy(strConn, Application.StartupPath & "\Lehrer.mdb")
        Return objConn
    End Function

Der Code klappt aber leider nicht. Ich vermute, dass das Problem bei
Code:
FileCopy(strConn,Spplication.StartupPath & "\Lehrer.mdb")
liegt, und die Variable strConn nicht den Wert hat, den man benötigt. Der Wert für strConn
sollte eigentlich sowas wie z.B. das hier sein ( strConn = C:\EigeneDateien\Lehrer.mdb)

Ich hoffe mir kann jemand helfen.
EDIT:


Also ich hab noch mal nen bisschen rumprobiert und mein neuer COde sieht so aus:

Code:
    Function ChangeDatabase(ByVal strDBName As String) As System.Data.OleDb.OleDbConnection
        Dim strConn As String
        Dim objConn As System.Data.OleDb.OleDbConnection
        Dim objConBuilder As New System.Data.OleDb.OleDbConnectionStringBuilder
        Dim objDlg As New System.Windows.Forms.OpenFileDialog()
        With objDlg
            .FileName = "*.mdb"
            .InitialDirectory = Application.StartupPath
            .ShowDialog()
            strDBName = .FileName

        End With

        objConBuilder.DataSource = strDBName
        strConn = objConBuilder.ConnectionString
        MsgBox(strConn)
        FileCopy(strConn, Application.StartupPath & "Lehrer.mdb")
        
     
    End Function
Nun hab ich strConn mal in der MsgBox ausgeben lassen, und es kommt diese Meldung:

DataSource ="C:\Dokumente und Einstellungen\Lehrer.mdb"


Nun bin ich schon fast am Ziel. Ich müsste nur noch von diesem Text, das DataSource und das Gleichheitszeichen abschneiden. Geht das Irgendwie?
Mit freundlichen Grüßen
Golox

Mit freundlichen Grüßen Golox
 
Zuletzt bearbeitet:

Neue Beiträge