Springen naar inhoud


- - - - -
VS 2012 SOLVED

Database Sdf Back Up

VS2012 Database Backup SDF

  • Log in a.u.b. om te beantwoorden
Er zijn 36 reacties in dit onderwerp

#1 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 30 december 2012 - 15:41

Andermaal een heel goede middag gewenst,

Een heel andere vraag. Als een applicatie met een sqlcedatabase gepubliceerd wordt en op andere pc draait dan kan ik de sdf databse niet meer vinden. Mag ik er van uit gaan dat die in de gepubliceerde applicatie geïntegreerd is? Onderstaande code werkt prima in de Debugger, maar na publicatie houd het op... Alle input meer dan welkom.

Dank

Rob

Code:
Private Sub SaveDatabase()
	 Dim path As String
	 Dim temp As New DirectoryInfo(".")
	 path = SearchFile(temp, "Boeken.sdf")
	 If Not Directory.Exists("C:BoekenBackup") Then
		 Directory.CreateDirectory("C:\BoekenBackup")
	 Else
		 Dim FileToCopy As String
		 Dim NewCopy As String
		 FileToCopy = path
		 NewCopy = "C:\BoekenBackup\Boeken.sdf"
		 If System.IO.File.Exists(FileToCopy) = True Then

			 System.IO.File.Copy(FileToCopy, NewCopy, True)
		 Else
			 MsgBox("Database niet gevonden.")
		 End If
	 End If
End Sub



#2 Johnny

Johnny

    Senior Developer

  • Leden
  • PipPipPip
  • 193 berichten
    Laatst bezocht 05 aug 2020 13:24

Geplaatst op 30 december 2012 - 15:51

Hoe publiceer je de applicatie?

#3 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 30 december 2012 - 16:30

Ik heb VB .Net versie 2012, de enige manier die ik ken om te publiceren is via Build -> Publish (in mijn geval naar cd rom versie). Groet Rob

#4 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 30 december 2012 - 16:32

ik zie dat ik de van onderstaande functie die in bovenstaande wordt aangeroepen niet heb meegegeven, bij deze


Code:
	Private Function SearchFile(ByVal SearchDir As DirectoryInfo, ByVal searchFileName As String) As String
		Dim temp As String = ""
		If SearchDir.GetFiles(searchFileName).Length > 0 Then
			Return SearchDir.FullName & "\" & searchFileName
		End If
		Dim Directories() As DirectoryInfo = SearchDir.GetDirectories("*")
		For Each newDir As DirectoryInfo In Directories
			temp = SearchFile(newDir, searchFileName)
		Next
		Return temp
	End Function



#5 Johnny

Johnny

    Senior Developer

  • Leden
  • PipPipPip
  • 193 berichten
    Laatst bezocht 05 aug 2020 13:24

Geplaatst op 30 december 2012 - 17:00

ok heb je de database wel in jet setup opgenomen:

Bijgevoegde Bestanden



#6 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 30 december 2012 - 17:19

Ja, heb ik net gecheckt, staat er keurig in

#7 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 31 december 2012 - 08:58

Ik doe zelf niks met VB2012 express, maar wel met SQLCE. Volgens mij zit het pad naar de database besloten in de connectionstring. Zelf zet ik de SQLCE-database altijd in de dezelfde map als de .exe (of in een bepaalde submap behorend bij de applicatie). Gaat altijd goed. Ik snap overigens (aan de hand van je code) het probleem niet echt . . . . :?

#8 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 31 december 2012 - 13:39

ik begrijp de click once technologie niet goed genoeg vrees ik. Als ik de applicatie publish in express wordt er een entrie geplaatst in mijn startup menu met het bestandtype 'ClickOnce Application Reference (.appref-ms)' en geplaatst in de ..\appdata\roaming etc directory. Ik zie helemaal geen executables of andersoortige files tgv de publicatie. Groet

Rob

#9 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 31 december 2012 - 14:22

De executable die je zoekt staat in bin\Debug of als je in Release werkt: bin\Release.
Dat publish van VB2010express begrijp ik ook niet en dat click-once is (voor zover ik via internet heb begrepen) een beetje achterhaald.
Als je in de ontwikkelomgeving dus in Debug of Release een keet New Build en Clean doet en daarna een keer RUN, dan vind je in de betreffende bin-map een bruikbaar programma (.exe)

#10 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 02 januari 2013 - 13:16

ik heb een work around gevonden die eigenlijk nog bter is dan mijn oorspronkelijke intentie. Ik save nu alle data naar excel en kan desgewenst deze weer terugzetten bij dataverlies. Allen dank voor de input en de beste wensen voor het nieuwe jaar! Rob

#11 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 02 januari 2013 - 17:04

Kijk hier ook eens naar dan, want excel doet soms rare dingen bv met datums . . .
http://www.vbib.be/i...ten/#entry65515

#12 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 03 januari 2013 - 10:54

dank!

#13 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 04 januari 2013 - 13:06

Bericht bekijkenrob luttge, op 02 januari 2013 - 13:16, zei:

ik heb een work around gevonden die eigenlijk nog bter is dan mijn oorspronkelijke intentie. Ik save nu alle data naar excel en kan desgewenst deze weer terugzetten bij dataverlies.
Ik zie daar de meerwaarde echt niet van.
Als je een backup wil nemen van een databank, dan ... neem je een backup van je databank.
Voor een sdf is dat: een kopie van het bestand.

#14 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 04 januari 2013 - 18:41

Helemaal mee eens, maar hij vroeg er om, en dan kun je het krijgen :smile:

#15 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 21 januari 2013 - 17:10

Met het schaamrood op de kaken moet ik toch nog eens op dit onderwerp terug komen. Ik heb jullie advies gevolgd en ben nu in staat om de sdf database die in de werkdirectory van de applicatie staat (bv C:\Biblioheek\ waar in twee bestanden staan: Bibliotheek .exe en Bibliotheek.sdf. Daarnaast een directory C:\BibliotheekBackup\. Als de gebruiker op backup klikt wordt de bibliotheek.sdf van C:\Biblioheek\ naar de backup directory gekopieerd en er wordt een datum string aan de file naam gehangen (Bv Bibliotheek-21-01-13.sdf. Wanneer de gebruiker op restore drukt kan hij mbv een openfiledialog de gewenste sdf versie selecteren en die wordt vervolgens naar de originel locatie als bibliotheek.exe teruggeschreven. het System.IO.File.Copy heeft als tweede parameter true dus bestanden zouden moeten overschreven? Iemand een idee? Het kopieeren verloopt volgens mij probleemloos, maar na elke restore poging krijg ik een lege database terug, terwijl ik hem wel degelijk gevuld had met wat testinput Dank. Rob

#16 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 21 januari 2013 - 18:00

Hierbij code van enige class SQLCE waarin alles wat je zoekt te vinden is (hoop ik) :smile: Code:
 
Public Class cSQLCE
#Region " Database checken/bouw/backup/restore "
	' Als de database niet bestaat dan maken we er een aan (leeg).
	' Bestaat hij wel dan controleren we hem
	' en voor de zekerheid maken we even een kopietje in de map PriveMap\Backups.
	' In die Backups-map staan ze op datum en tijd.
	' We zorgen er voor dat er niet meer dan 14 in kunnen staan.
	Public Shared Sub CheckDatabase()
		If Not File.Exists(fPad.Files & "DBCE.sdf") Then
			MessageBox.Show("Database niet gevonden, ik maak een nieuwe aan...")
			' Op basis van de connectionstring nieuwe aanmaken, dus inclusief wachtwoord waardoor database versleuteld is
			Using sqlCeEngine As New SqlCeEngine(fPad.ConString)
				sqlCeEngine.CreateDatabase()
			End Using
		End If
		ControleerTabellen()
	End Sub
	Public Shared Sub DoeBackup(tip As Boolean)
		Dim maxbackups As Integer = 14
		' Voor de zekerheid even kopietje van de database wegschjrijven in PriveMap\Backups
		Dim deDataBase As String = fPad.Files & "DBCE.sdf"
		Dim deBackup As String = fPad.Backup & "\DBCE-" & DateTime.Today.ToString("yyyy-MM-dd") & ".sdf"
		File.Copy(deDataBase, deBackup, True)
		' Indien meer dan maxbackups dan de oudste wissen
		Dim Entries As New Generic.List(Of String)(Directory.GetFiles(fPad.Backup()))
		Dim tal As Integer = Entries.Count
		Dim weg As Integer = tal - maxbackups - 1
		If tal > maxbackups Then
			Dim Lijst As New Generic.List(Of String)
			For Each FileName As String In Entries
				Lijst.Add(FileName)
			Next
			Lijst.Sort()
			For L As Integer = 0 To weg
				File.Delete(Lijst.Item(L))
			Next
		End If
		If tip Then
			Geluid("ok", fUser.Geluid)
			MessageBox.Show("Backup is klaar...")
		End If
	End Sub
	Public Shared Sub DoeRestore()
		Dim Dialog As New OpenFileDialog
		Dialog.InitialDirectory = fPad.Backup
		Dialog.Title = "Zoek backup"
		Dialog.Filter = "sdf files (*.sdf)|*.sdf"
		Dim res As DialogResult = Dialog.ShowDialog()
		If res = DialogResult.OK Then
			File.Copy(Dialog.FileName, fPad.Files & "DBCE.sdf", True)
			Geluid("ok", fUser.Geluid)
			MessageBox.Show("Restore is klaar...")
		End If
	End Sub
#End Region
#Region " Tabellen "
	Public Shared Sub ControleerTabellen()
		' Nu de database (blijkbaar) bestaat, de tabellen er in zetten (als ze er nog niet staan)
		Check_tblDatum()
		Check_tblGeslacht()
		Check_tblDBase()
	End Sub
	Public Shared Sub Check_tblDatum()
		If Not DoesTableExist("tblDatum") Then
			Dim tabel As String = ""
			Dim SB As New StringBuilder
			SB.Append("CREATE TABLE tblDatum (")
			SB.Append("id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ")
			SB.Append("dag DATETIME NOT NULL)")
			tabel = SB.ToString
			DoCreateTable(tabel)
			Execute("INSERT INTO tblDatum (dag) VALUES ('" & DateTime.Today.ToString("yyyy-MM-dd") & "'); ")
		End If
	End Sub
	Public Shared Sub Check_tblGeslacht()
		If Not DoesTableExist("tblGeslacht") Then
			Dim tabel As String = ""
			Dim SB As New StringBuilder
			SB.Append("CREATE TABLE tblGeslacht (")
			SB.Append("id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ")
			SB.Append("geslacht NVARCHAR(10) NOT NULL, ")
			SB.Append("afk NCHAR(1) NOT NULL)")
			tabel = SB.ToString
			DoCreateTable(tabel)
			' Hiermee worden de records in tblGeslacht aangemaakt
			Execute("INSERT INTO tblGeslacht (geslacht, afk) VALUES ('Man', 'M'); ")
			Execute("INSERT INTO tblGeslacht (geslacht, afk) VALUES ('Vrouw', 'V'); ")
		End If
	End Sub
	Public Shared Sub Check_tblDBase()
		If Not DoesTableExist("tblDBase") Then
			Dim tabel As String = ""
			Dim SB As New StringBuilder
			SB.Append("CREATE TABLE tblDBase (")
			SB.Append("id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ")
			SB.Append("geslacht INT NOT NULL DEFAULT(0), ")
			SB.Append("titel INT NOT NULL DEFAULT(0), ")
			SB.Append("voorl NVARCHAR(50) NULL, ")
			SB.Append("roepnaam NVARCHAR(50) NULL, ")
			SB.Append("tussen NVARCHAR(50) NULL, ")
			SB.Append("naam NVARCHAR(50) NULL, ")
			SB.Append("geboren DATETIME NULL, ")
			SB.Append("adres NVARCHAR(50) NULL, ")
			SB.Append("postcode NVARCHAR(50) NULL, ")
			SB.Append("plaats NVARCHAR(50) NULL, ")
			SB.Append("land NVARCHAR(50) NULL, ")
			SB.Append("telefoon NVARCHAR(50) NULL, ")
			SB.Append("mobiel NVARCHAR(50) NULL, ")
			SB.Append("email NVARCHAR(50) NULL, ")
			SB.Append("website NVARCHAR(50) NULL, ")
			SB.Append("opmerking NTEXT NULL)")
			tabel = SB.ToString
			DoCreateTable(tabel)
		End If
	End Sub
	Public Shared Function DoesTableExist(ByVal name As String) As Boolean
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" & name & "'", CN)
				CM.Connection.Open()
				Using DR As SqlCeDataReader = CM.ExecuteReader()
					Return DR.Read
				End Using
				CM.Connection.Close()
			End Using
		End Using
	End Function
	Public Shared Sub DoCreateTable(ByVal name As String)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(name, CN)
				CM.Connection.Open()
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
#End Region
 
#Region " Updatequeries "
	Public Shared Sub UpdateBoolean(Query As String, value As Boolean, id As Integer)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.Parameters.AddWithValue("@id", id)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
	Public Shared Sub UpdateDate(Query As String, value As Date, id As Integer)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.Parameters.AddWithValue("@id", id)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
	Public Shared Sub UpdateDateTime(Query As String, value As DateTime, id As Integer)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.Parameters.AddWithValue("@id", id)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
	Public Shared Sub UpdateInteger(Query As String, value As Integer, id As Integer)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.Parameters.AddWithValue("@id", id)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
	Public Shared Sub UpdateString(Query As String, value As String, id As Integer)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.Parameters.AddWithValue("@id", id)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
#End Region
#Region " Insertqueries "
	Public Shared Sub InsertString(Query As String, value As String)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.Parameters.AddWithValue("@value", value)
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
#End Region
	Public Shared Sub Execute(Query As String)
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				CM.CommandText = Query
				CM.ExecuteNonQuery()
				CM.Connection.Close()
			End Using
		End Using
	End Sub
	Public Shared Function fnCountRecs(ByVal tabel As String) As Integer
		Dim tal As Integer = CType(cSQLCE.fnGetFromDB("SELECT COUNT(id) AS tal FROM " & tabel), Integer)
		Return tal
	End Function
	Public Shared Function fnGetFromDB(ByVal Query As String) As Object
		Dim waarde As Object = Nothing
		Using CN As New SqlCeConnection(fPad.ConString)
			Using CM As New SqlCeCommand(Query, CN)
				CM.Connection.Open()
				Using DR As SqlCeDataReader = CM.ExecuteReader(CommandBehavior.CloseConnection)
					DR.Read()
					waarde = DR.Item(0)
				End Using
				CM.Connection.Close()
			End Using
		End Using
		Return waarde
	End Function
	Public Shared Function fnLeesDatum() As Date
		Return CDate(fnGetFromDB("SELECT dag FROM tblDatum"))
	End Function
	Public Shared Sub SchrijfDatum()
		UpdateDate("UPDATE tblDatum Set dag = @value Where id = @id", DateTime.Today, 1)
	End Sub
#Region " Functies om waarden in te lezen "
	Public Shared Function GetDBDate(ByVal DR As SqlCeDataReader, ByVal item As String) As Date
		If IsDBNull(DR.Item(item)) Then
			Return Nothing
		Else
			Return CType(DR.Item(item), Date)
		End If
	End Function
	Public Shared Function GetDBBoolean(ByVal DR As SqlCeDataReader, ByVal item As String) As Boolean
		If IsDBNull(DR.Item(item)) Then
			Return False
		Else
			Return CType(DR.Item(item), Boolean)
		End If
	End Function
	Public Shared Function GetDBDouble(ByVal DR As SqlCeDataReader, ByVal item As String) As Double
		If IsDBNull(DR.Item(item)) Then
			Return Nothing
		Else
			Return CType(DR.Item(item), Double)
		End If
	End Function
	Public Shared Function GetDBInteger(ByVal DR As SqlCeDataReader, ByVal item As String) As Integer
		If IsDBNull(DR.Item(item)) Then
			Return 0
		Else
			Return CType(DR.Item(item), Integer)
		End If
	End Function
	Public Shared Function GetDBString(ByVal DR As SqlCeDataReader, ByVal item As String) As String
		If IsDBNull(DR.Item(item)) Then
			Return ""
		Else
			Return DR.Item(item).ToString
		End If
	End Function
#End Region
End Class



#17 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 22 januari 2013 - 16:25

Dank Tromt,

Zou je ook een beetje op weg kunnen helpen hoe ik deze klasse het handigst kan gebruiken resp aanroepen? Ik kom er niet goed uit vrees ik.

Groet

Rob

#18 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 22 januari 2013 - 17:01

aanvulling

Zie onderstaand amateur poging ;-) Ik begrijp oa niet:

1. hoe ik de code uit de class uit mainfrm aanroep
2. hoe ik bij jouw If Not File.Exists(fPad.Files & "DBCE.sdf") Then
    de fpad.files moet aanpassen (en fuser later) Ik begrijp dat het een representatie is van het pad waar de database staat maar een punt (.) is toch niet het equivalent van een backslasch?
3. mag ik er van uitgaan dat Using sqlCeEngine As New SqlCeEngine(fPad.ConString) vervangen kan worden door Using sqlCeEngine As New SqlCeEngine(my.settings.cs_boeken)?

alvast weer bedankt

Code:
	Private Sub Btn_Backup_Click(sender As Object, e As EventArgs) Handles Btn_Backup.Click
		Try
			Dim destPath As String = "C:\BoekbeheerBackup\Database\"
			If Not Directory.Exists("C:\BoekbeheerBackup\Database\") Then
				Directory.CreateDirectory("C:\BoekbeheerBackup\Database\Boeken.sdf")
			End If
			System.IO.File.Copy("Boeken.sdf", "c:\BoekenbeheerBackup\database\Munitie-" & FormatDateTime(Today, DateFormat.ShortDate).ToString & ".sdf", True)
			MsgBox("Database succesvol geëxporteerd.")
		Catch u As UnauthorizedAccessException
			MsgBox("Error saving database." & vbNewLine & u.Message)
		Catch ex As Exception
			MsgBox("Error saving database." & vbNewLine & ex.Message)
		End Try
	End Sub



#19 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 22 januari 2013 - 17:04

Eh, ja, kan ik me een beetje voorstellen, er zit nogal wat in. Eigenlijk is het niet eens een class, maar ja het heet zo. Aanroepen kan wel, maar dan afzonderlijke procedures of functies.
In het begin staat een en ander om te checken of een database wel bestaat en zo niet kan hij hem aanmaken, inclusief de tabellen die daarin thuishoren. Verder zitten er routines in om een database te backuppen en/ of te restoren. Daarbij maakt hij dan gebruik van bestanden en paden die elders zijn vastgelegd. Tussen regel 23 en 24 hoort nog een regel tussen: If File.Exists(deBackup) Then File.Delete(deBackup), anders overschrijft hij niet.
Bij het maken van een backup hout hij het aantal entries beperkt tot 14, maar dat kun je ook beheren door een variabele bv. BackupMax as integer of zo.

Oeps, terwijl ik hiermee bezig was, kwam er al weer een reactie van jou tussendoor . . .even gelezen . . . begrijp de verwarring. Tsja, beetje veel ineens merk ik. Weet je wat, ik sleutel even iets korts in elkaar, misschien dat dat duidelijker is. Daarin zal ik uitgaan van jouw directories. Tot horens

#20 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 22 januari 2013 - 18:27

Nou, wordt best aardig, maar morgen verder... :smile:

#21 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 23 januari 2013 - 10:00

Bericht bekijkenrob luttge, op 21 januari 2013 - 17:10, zei:

...
Uit Backup Revisited (niet zo handig om 2 threads over hetzelfde te hebben lopen):

Bericht bekijkenBenno, op 22 januari 2013 - 09:35, zei:

Een kopie van databasefiles naar dezelfde harde schijf zou ik geen solide backupstrategie durven noemen.
Dat is een Is maximaal goed om een zeer tijdelijke kopie op te slaan.

Is het .sdf  bestand in gebruik bij het kopieren naar het "backup" bestand?
Is één van beide .sdf  bestand in gebruik bij het kopieren van het "backup" bestand?

Bericht bekijkenrob luttge, op 21 januari 2013 - 17:12, zei:

Het kopieeren verloopt volgens mij probleemloos
Hoe test je dat?

Bericht bekijkenrob luttge, op 21 januari 2013 - 17:12, zei:

terwijl ik hem wel degelijk gevuld had met wat testinput
En hoe test je dat?


#22 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 23 januari 2013 - 10:56

Uit Backup Revisited (niet zo handig om 2 threads over hetzelfde te hebben lopen):

...zag te laat dat dit item al op 'solved' stond en toen ik hem wilde wissen had Tromt al gereageerd. Excuus.

Bericht bekijkenBenno, op 23 januari 2013 - 10:00, zei:


En hoe test je dat?

Vrij basaal vrees ik... Kopie (althans file met naam boeken.sdf) verschijnt in backup directory.


Bericht bekijkenBenno, op 23 januari 2013 - 10:00, zei:


En hoe test je dat?

Ik vul een aantal records en contreel of de datagrids daarmee gevuld zijn.

Ik vrees dat het inderdaad iets met het gebruik van de bestanden te maken heeft. Blijkbaar kan de database niet 'zo maar' met inhoud en al worden gekopieerd.

Groet

Rob

#23 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 23 januari 2013 - 11:43

Bericht bekijkenrob luttge, op 23 januari 2013 - 10:56, zei:

Ik vrees dat het inderdaad iets met het gebruik van de bestanden te maken heeft. Blijkbaar kan de database niet 'zo maar' met inhoud en al worden gekopieerd.
Toch wel hoor.

Gebruik System.IO.File.ReadAllBytes en System.IO.WriteAllBytes als je bestand niet te groot is.
Die geeft een fout als het target bestand niet exclusief kan geopend worden.
Als het echt een groot bestand betreft  gebruik je de System.IO streams om in chunks te lezen/schrijven, al dan niet gebuffered.
ReadAllBytes en WriteAllBytes gebruiken die intern ook.

Visual Basic Code:
File.WriteAllBytes(target, File.ReadAllBytes(source))


Als je het zo aanpast, krijg je een fout als het .sdf bestand nog in gebruik is.
Krijg je die fout niet en werkt het verder niet zoals verwacht, dan doe  je iets anders fout.

#24 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 23 januari 2013 - 14:37

Dat ga ik direct proberen!

Benno

Ik krijg inderdaad de foutmelding dat de file nog in gebruik is, en nu...?

Dank

Rob

#25 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 23 januari 2013 - 15:02

Bericht bekijkenrob luttge, op 23 januari 2013 - 14:37, zei:

Ik krijg inderdaad de foutmelding dat de file nog in gebruik is, en nu...?
Zorg dat het bestand niet in gebruik is.
Het is natuurlijk mogelijk dat je het open hebt in Visual Studio zelf.

#26 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 23 januari 2013 - 16:46

....na een uurtje of twee is dat nog niet gelukt.
Zelfs als ik direct, zonder enige commando uitvoer, de backup routine aanroep, volgt de foutmelding.
Ik heb alle cmd, dr, conn en zo geclosed/diposed, gc.collect() staat vlak voor het copy commando (maar dat gaat toch eigenlijk alleen om het vrijgeven van geheugen, niet om het releasen van objecten?) en dat helpt inderdaad niet. Ik heb geen idee welke processen (processmonitor,exe helpt me ook niet) attached zitten aan de sdf.

#27 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 23 januari 2013 - 17:18

Kan je het project uploaden?

#28 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 305 berichten
    Laatst bezocht 03 aug 2020 13:32
  • LocatieRijen (NB)

Geplaatst op 23 januari 2013 - 21:49

Zo, voorbeeldje klaar.
Voordat je gaat 'runnen' even alles doorvlooien, met name de app.config want daar staat een sectie tussen <appsettings> waar je van alles kunt regelen. Dus zowel de plaats waar de dbase moet komen als waar de backups moeten komen. Laat het eerst even zoals het is. Als het programma wordt gerund, dan bouwt hij voor het gemak meteen de database met twee tabellen (scheelt weer tijd) en daarmee mga je aan de slag. Doorgrond de code en hoe het werkt en ga dan pas wijzigingen aanbrengen in de tabel tblBoek. In de boekkaart zit een handleiding (ook op andere plekken trouwens). Succes!

Bijgevoegde Bestanden



#29 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 25 januari 2013 - 07:16

Tromt,

Zeer bedankt voor je steun! Ik ga er mee aan de slag. Laat binnenkort weten hoe het gaat.

Rob

#30 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 25 januari 2013 - 07:18

Benno

Zoals gebruikelijk had je gelijk. Code doet soms andere dingen dan je verwacht. Het blijkt dat de wachtwoordcontrole de sub verlaat bij succesvolle invoer en daarmee de conn.close() overslaat. Maar drie weken naar op zoek geweest.... Met de code van Tromt kan ik nu hopelijk de boel vervolmaken. Allen dank!

Rob





Ook met taq VS 2012 SOLVED, VS2012, Database, Backup, SDF voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2012 SOLVED] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)