Denga schreef op vrijdag 25 maart 2005 @ 17:16:
Ja klopt, maar ben er achter gekomen dat de fdb file op een fictieve Server draait en dan wel lokaal, heel vaag maar hierdoor is het mogelijk om meerdere connecties op te zetten en dus dit programma te draaien als het hoofdprogramma geopend is...
Want Embedded lockt de database en kan dus niet geopend worden als een ander programma de database al geopend heeft...
Volgens mij snap je nog steeds niet helemaal waarom dat zo is.
Dat andere programma maakt een connectie naar de database via de Firebird server. En dit zou jij ook moeten doen!
Als dat andere programma Firebird embedded zou gebruiken dan zou deze de database locken en dan zou je er sowieso niet bij kunnen.
Gebruik in de connectiestring als server het ip-adres van de machine waarop de server draait en connectie op die manier naar de database. In de huidige situatie kan je zelfs corruptie van de database veroorzaken! Je moet van de database afblijven als deze in gebruik is. Idem voor het kopieren van de database vanuit windows verkenner, etc.
Voor het lokaal testen van je programma kun je wel gebruiken van Firebird embedded, omdat je dan toch waarschijnlijk de enige bent die gebruik maakt van de database.
Firebird server (zelf ff testen).
code:
1
2
3
| Dim Server As String = "192.168.1.1"
Me.FirebirdConnectie.ConnectionString = String.Format("ServerType=0;User=BLAAT;Password=blaat;Dialect=3;DataSource={0};Database={1}database-arm.fdb", _
Server,pad) |
Firebird Embedded (zelf ff testen).
code:
1
2
3
| Dim Server As String = "127.0.0.1"
Me.FirebirdConnectie.ConnectionString = String.Format("ServerType=1;User=BLAAT;Password=blaat;Dialect=3;DataSource={0};Database={1}database-arm.fdb", _
Server,pad) |
Denga schreef op vrijdag 25 maart 2005 @ 17:16:
Maar het probleem is dat mijn foutmelding nu wel lukt, alleen de application.exit werkt niet...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Try
'
'Register waarde
'
Dim RegisterWaarde As RegistryKey = Registry.LocalMachine
Dim pad As Object
RegisterWaarde = RegisterWaarde.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Blaat")
pad = RegisterWaarde.GetValue("Inno Setup: App Path")
'
'FirebirdConnectie
'
Me.FirebirdConnectie.ConnectionString = "ServerType=1;User=BLAAT;Password=blaat;Dialect=3;Database=" & pad & "database-arm.fdb"
Catch e As Exception
MsgBox("Blaat is niet (meer) geïnstalleerd", , "Blaat Tool")
Finally
Application.Exit()
End Try |
Dit alles staat in de Form1 Class maar het lukt me niet om 'm er buiten te zetten als zijn een soort PreCheck...
Hoe doe ik dit?
Op welk moment wil je deze code uitvoeren?
Tijdens het opstarten/initialisatie van je applicatie? Zo ja, dan kun je het waarschijnlijk zodanig oplossen dat je de Application.Exit() niet nodig hebt.
Heb je toevallig nog forms open staan?
MSDN: Application.Exit()
*Ik* vind dit sowieso een ranzige constructie. Het gooien van excepties is een duurzame actie. Met een beetje defensief programmeren kun je dit ook op een andere manier oplossen. Bijvoorbeeld door het controleren of de registry key bestaat.
En waarom gebruik je dubbele backslashes?
[
Voor 19% gewijzigd door
Verwijderd op 28-03-2005 01:09
. Reden: aanvulling ]