[vb.NET & Firebird] Data connection

Pagina: 1
Acties:
  • 175 views sinds 30-01-2008
  • Reageer

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ik heb een vraagje over het maken van een dataconnection met een Firebird Database in vb.NET.
Ik heb al wel vaker dit soort dingen gemaakt en dat ging dan als volgt:

- Dataconnection maken
- Data-Adapter maken
- Dataset maken
- Datagrid maken
- Dataset aan Datagrid hangen
- Afbeelden

Dit is toen gemaakt met een Jet OLE connection en een Access Database. En ik weet dat het mogelijk is om hetzelfde te doen bij een Firebird Database, maar hoe?
De website http://www.firebirdsql.com geeft weinig tot geen ondersteuning en informatie.

De Firebird .NET data provider heb ik trouwens al geinstalleerd maar hoe nu verder?

Never eat yellow snow...


  • Equator
  • Registratie: April 2001
  • Laatst online: 16:05

Equator

Crew Council

#whisky #barista

Van http://www.connectionstrings.com
code:
1
"User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0"


Dat is je connection string naar de Firebird database.
Linkje naar ADO.Net FireBird project

[ Voor 3% gewijzigd door Equator op 11-02-2005 08:33 . Reden: quoten breek de lijn af.. 8)7 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ja ok, maar in het geval van de Jet OLE kreeg je een mooie wizard waar je uit kom kiezen en nu twijfel ik waar ik deze regel moet declareren in de source...

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Niemand? Want loop nu al een aantal dagen te klooien en uit te zoeken hoe ik de Firebird Data Provider moet gebruiken maar kan veel vinden over C#.NET maar geen VB.NET...

Never eat yellow snow...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:12

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Nu ben ik weer wat aant klooien en nog steeds probeer ik een vb applicatie te connecten met de Firebird Data Provider, maar dit lukt voor geen meter...

Hoe krijg je dat aangesloten?

Never eat yellow snow...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:12

gorgi_19

Kruimeltjes zijn weer op :9

Denga schreef op donderdag 17 maart 2005 @ 22:34:
Nu ben ik weer wat aant klooien en nog steeds probeer ik een vb applicatie te connecten met de Firebird Data Provider, maar dit lukt voor geen meter...

Hoe krijg je dat aangesloten?
En wat lukt er niet? Je had voorbeelden in c#, je had een vertaler naar VB.Net, dus waar loopt het spaak?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Nou ik installeer de Data Provider 1.7, maar hierna kan ik in VB.net geen enkele verwijzing naar de data provider vinden.

Ik bedoel, als je de Oracle Dataprovider installeerd staat er ineens bij je toolbox -> data -> 3 dingen:

OracleDataAdapter
OracleConnection
Oracle Command

[ Voor 46% gewijzigd door Denga op 17-03-2005 22:49 ]

Never eat yellow snow...


Verwijderd

Denga schreef op donderdag 17 maart 2005 @ 22:45:
Nou ik installeer de Data Provider 1.7, maar hierna kan ik in VB.net geen enkele verwijzing naar de data provider vinden.

Ik bedoel, als je de Oracle Dataprovider installeerd staat er ineens bij je toolbox -> data -> 3 dingen:

OracleDataAdapter
OracleConnection
Oracle Command
Heb je de DLL wel toegevoegd? En de componenten (handmatig) aan je component palette toegevoegd?

Het gebruik is precies hetzelfde als die van andere providers. (Je kunt meerdere recordsets tegelijkertijd open hebben dit i.t.t. sqlclient.)
Volgens mij is het wel zo dat je met de Firebird Data Provider vooralsnog geen strongly typed datasets kan gebruiken. Correct me if I'm wrong.

[ Voor 8% gewijzigd door Verwijderd op 21-03-2005 00:30 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Thanx, dat was dus het probleem, al loop ik nu tegen een ander probleem aan...

Ik heb gewoon netjes een dataconnectie opgebouwd, met een dataadapter en dataset eraan, dit gaat allemaal prima en op het formulier heb ik een knopje die als jeer op drukt een xml genereerd met de gegevens uit de database... Alllemaal perfect.

Alleen nu komt het, als ik 'm build en ik stuur 'm naar een andere comp waar ook .NET framework op geinstalleerd staat dan doet ie niks en geeft ie allemaal foutmeldingen...

In de map staan 2 bestanden:

Database
.exe bestand van progsel

Moet ik hierbij nog dll bestanden voegen? volgens mij niet want dit doe ik ook niet op m'n eigen computer...

Never eat yellow snow...


  • Equator
  • Registratie: April 2001
  • Laatst online: 16:05

Equator

Crew Council

#whisky #barista

Je hebt toch zoals sinaasapplesap aangaf ook een dll aan je project toegevoegd. Die dll moet je natuurlijk ook op je andere PC hebben. En waarschijnlijk ook geregistreerd

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
CyberJ schreef op vrijdag 18 maart 2005 @ 07:57:
Je hebt toch zoals sinaasapplesap aangaf ook een dll aan je project toegevoegd. Die dll moet je natuurlijk ook op je andere PC hebben. En waarschijnlijk ook geregistreerd
Als die DLL een .NET assembly is, moet je 'm gewoon in dezelfde directory staan hebben als je exe. That's it.
Je kan 'm natuurlijk ook in de GAC zetten.

Het kan dus zijn dat de TS (Denga) zijn .NET applicatie een DLL gebruikt die in de GAC zit. Deze zal dus idd ook op de andere pc moeten gezet worden.
Wat ik zou doen, is een setup-project maken in VS.NET, en op die manier weet je zeker dat alle nodige assemblies erin zitten.

[ Voor 26% gewijzigd door whoami op 18-03-2005 08:55 ]

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Mja, het is geen sleur n pleur, je moet wel wat typen. Het is niet zo moeilijk hoor, bovenin je code een Imports van de firebird namespace (FirebirdSql.Data.Firebird), dan

Dim con As New FbConnection("jeconnectionstring")
en
Dim cmd As New FbCommand("SELECT * FROM EMP", con)
en
Dim adapter As New FbDataAdapter(cmd)
en
Dim results As New DataTable()
en
adapter.Fill(results)

en
...

klaar.

Dit is hoe je met ADO.NET omgaat. Niet met sleur en pleur troep. Sorry dat ik wat geirriteerd antwoord, maar software bouwen is een serieuze zaak.

(edit)
Voor deployment, moet je gewoon de files in je bin folder zippen en op de andere computer zetten. Als het goed is staat de Firebird provider daar tussen, indien niet, dan moet je copy local in de reference op true zetten.

[ Voor 20% gewijzigd door EfBe op 18-03-2005 09:18 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Klopt, het was het probleem dat ik die dll in dezelfde map moest zetten als de exe, maar nu doet ie het stand alone op deze computer wel, maar als ik 'm op een andere computer draai waar wel .NET Framework op staat kijg ik de foutmelding:

code:
1
Unable to complete network request tot host "localhost"


Terwijl beide computers hetzelfde zijn en op allebei win XP draait...

Never eat yellow snow...


Verwijderd

... maar draait op die andere machine ook wel een database die connecties toelaat?

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ja, heb 'm precies hetzelfde staan, dus de database efe naar de c:/ gekopieerd en de dll in dezlefde map als de exe...

Never eat yellow snow...


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Zet eens, ipv localhost in je connection-string de juiste machine-naam of servernaam.

https://fgheysels.github.io/


Verwijderd

Draait op die andere machine uberhaupt Firebird server?

Andere vraag:
Hoe zit het met Firebird embedded en Firebird ADO.NET-provider?
Edit: Zodat je dus geen Firebird server meer nodig hebt.

[ Voor 18% gewijzigd door Verwijderd op 19-03-2005 15:29 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Effe voor de duidelijkheid, ik heb helemaal geen server draaien...

Ik heb gewoon een bestandje .fdb en daar connect ik mee via de Firebird (ADO) .NET provider...

Niks meer niks minder, en dan loop ik tegen bovenstaand probleem aan.

Never eat yellow snow...


Verwijderd

Denga schreef op zondag 20 maart 2005 @ 22:13:
Effe voor de duidelijkheid, ik heb helemaal geen server draaien...
Niks meer niks minder, en dan loop ik tegen bovenstaand probleem aan.
Dat verklaart een hoop.
Firebird is niet hetzelfde als Access hoor.

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Nee dat is het dus, ik hoef ook geen database op te bouwen, de applicatie bestaat al en daaruit moet ik gegeves halen en dat is het bestand wat lokaal of op het netwerk staat

De originele applicatie is gebouwd op een fdb bestand met een shell van Python, maar kan gewoon lokaal draaien, je hebt geen server nodig...

Het probleem is dat we dit zelf niet hebben gemaakt, maar school heeft ons gewoon opdracht gegeven dit praktijkprobleem op te lossen...

Never eat yellow snow...


Verwijderd

Denga schreef op zondag 20 maart 2005 @ 22:26:
Nee dat is het dus, ik hoef ook geen database op te bouwen, de applicatie bestaat al en daaruit moet ik gegeves halen en dat is het bestand wat lokaal of op het netwerk staat

De originele applicatie is gebouwd op een fdb bestand met een shell van Python, maar kan gewoon lokaal draaien, je hebt geen server nodig...

Het probleem is dat we dit zelf niet hebben gemaakt, maar school heeft ons gewoon opdracht gegeven dit praktijkprobleem op te lossen...
Betekent dit dat twee of meer applicaties tegelijkertijd in de databases moeten kunnen werken?
Zo ja, dan kun je dit alleen oplossen door alle applicaties via de Firebird server te laten communiceren.

Als een applicatie gebruik maakt van een firebird database en geen server nodig heeft dan gebruikt deze de firebird embedded interface. In dat geval kun je maar een connectie met de database hebben, omdat deze door de eerste connectie meteen gelocked wordt.

Dus wat wil je?

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Nee jullie begrijpen me verkeerd, ik open geen connectie, ik heb gewoon een bestand, en daar connect ik mee...

Dus er zal op dat moment nooit meer dan 1 connectie zijn... Het is heel simpel... FDB bestand in map -> open connectie -> opslaan in xml -> sluiten connectie...

Never eat yellow snow...


Verwijderd

Denga schreef op zondag 20 maart 2005 @ 23:08:
Nee jullie begrijpen me verkeerd, ik open geen connectie, ik heb gewoon een bestand, en daar connect ik mee...

Dus er zal op dat moment nooit meer dan 1 connectie zijn... Het is heel simpel... FDB bestand in map -> open connectie -> opslaan in xml -> sluiten connectie...
fbembed.dll (firebird embedded) in dezelfde map plaatsen en connecten naar localhost. Dat zou het moeten zijn als ik me niet vergis.

http://www.codeproject.com/cs/database/EmbeddedFirebird.asp

Firebird development: Can i use the provider with the Firebird embedded server ?

[ Voor 14% gewijzigd door Verwijderd op 21-03-2005 00:26 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
thanx, zal het morgen effe proberen, nu eerst slapen... ;)

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ok, dat was dus het vorige probleem...

Alles opgelost.

Nu heb ik het volgende...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Pad = Pad.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Blaat")
        RegisterWaarde = Pad.GetValue("App Path")
        '
        'FirebirdConnectie Variabelen.
        '
        Me.FirebirdConnectie.ConnectionString = "User=blaat;" & _
                                                "Password=blaat;" & _
                                                "Database=" & RegisterWaarde & "\database.fdb;" & _
                                                "DataSource=127.0.0.1;" & _
                                                "Port=3050;" & _
                                                "Dialect=3;" & _
                                                "Charset=NONE;" & _
                                                "Connection lifetime=0;" & _
                                                "Connection timeout=15;" & _
                                                "Pooling=True;" & _
                                                "Packet Size=8192;" & _
                                                "Server Type=0"


Nu is het zo dat ie in het register kijkt voor een bepaald pad en waarde. dit geet ie terug als RegisterWaarde en dan volt ie die in bij Database.
Dit gaat erom dat een database geinstalleerd kan staan overal op de computer maar vanuit het register kan je dat dus mooi opzoeken.
Nu wil ik het zo maken dat hij Form1 niet opstart als die register code er niet is, want immers de database is dan niet te vinden.
Maar als ik dit doe met een Try Catch onderdeel dan start ie desondanks wel het Form1 op...

Hoe doe ik dit?

Never eat yellow snow...


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Is Form 1 je hoofd-form ?
Zoja, dan zou ik een method schrijven die de boel initialiseert. Bij het niet vinden van die waarde, geef je een foutmelding, en als de gebruiker die melding gelezen heeft, sluit je de applicatie af.

https://fgheysels.github.io/


Verwijderd

Denga schreef op donderdag 24 maart 2005 @ 14:37:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
...
        Me.FirebirdConnectie.ConnectionString = "User=blaat;" & _
                                                "Password=blaat;" & _
                                                "Database=" & RegisterWaarde & "\database.fdb;" & _
                                                "DataSource=127.0.0.1;" & _
                                                "Port=3050;" & _
                                                "Dialect=3;" & _
                                                "Charset=NONE;" & _
                                                "Connection lifetime=0;" & _
                                                "Connection timeout=15;" & _
                                                "Pooling=True;" & _
                                                "Packet Size=8192;" & _
                                                "Server Type=0"
Noot: In de eerder opgegeven link hierboven staat dat je "Server Type=1" moet opgeven.

[ Voor 11% gewijzigd door Verwijderd op 24-03-2005 22:34 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
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...

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?

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Whoami, Sinaasappelsap? Niemand?

[ Voor 4% gewijzigd door Denga op 27-03-2005 20:14 ]

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Niemand?

Never eat yellow snow...


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Wat lukt er niet ?
Waar staat die code ?
Ga je uw applicatie dan altijd afsluiten ? In de finally clause (die altijd wordt uitgevoerd, staat nl .een Application.Exit().

https://fgheysels.github.io/


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
kan ik je de code mailen?

Never eat yellow snow...


Verwijderd

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 ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Voor de duidelijkheid post ik de gehele code maar eens...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Imports Microsoft.Win32

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer
    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents FirebirdConnectie As FirebirdSql.Data.Firebird.FbConnection
    Friend WithEvents FirebirdDataAdapter As FirebirdSql.Data.Firebird.FbDataAdapter
    Friend WithEvents Commando As FirebirdSql.Data.Firebird.FbCommand
    Friend WithEvents DataSet As System.Data.DataSet
    Friend WithEvents btnStuurXML As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
        Me.FirebirdConnectie = New FirebirdSql.Data.Firebird.FbConnection
        Me.FirebirdDataAdapter = New FirebirdSql.Data.Firebird.FbDataAdapter
        Me.Commando = New FirebirdSql.Data.Firebird.FbCommand
        Me.DataSet = New System.Data.DataSet
        Me.btnStuurXML = New System.Windows.Forms.Button
        CType(Me.DataSet, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        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("Blaat")
            '
            'FirebirdConnectie
            '
            Me.FirebirdConnectie.ConnectionString = "ServerType=1;User=Blaat;Password=Blaat;Dialect=3;Database=" & pad & "database-arm.fdb"
        Catch e As Exception
            MsgBox("Blaat niet (meer) geïnstalleerd", , "Blaat Tool")
        Finally
            Application.Exit()
        End Try
        '
        'FirebirdDataAdapter
        '
        Me.FirebirdDataAdapter.SelectCommand = Me.Commando
        '
        'Commando
        '
        Me.Commando.CommandText = "SELECT * FROM persoon"
        Me.Commando.Connection = Me.FirebirdConnectie
        '
        'DataSet
        '
        Me.DataSet.DataSetName = "DataSet"
        Me.DataSet.Locale = New System.Globalization.CultureInfo("nl-NL")
        '
        'btnStuurXML
        '
        Me.btnStuurXML.BackColor = System.Drawing.SystemColors.Highlight
        Me.btnStuurXML.ForeColor = System.Drawing.SystemColors.ActiveCaptionText
        Me.btnStuurXML.Location = New System.Drawing.Point(194, 104)
        Me.btnStuurXML.Name = "btnStuurXML"
        Me.btnStuurXML.Size = New System.Drawing.Size(232, 23)
        Me.btnStuurXML.TabIndex = 0
        Me.btnStuurXML.Text = "Verstuur Relation Manager naar Pocket PC"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackgroundImage = CType(resources.GetObject("$this.BackgroundImage"), System.Drawing.Image)
        Me.ClientSize = New System.Drawing.Size(500, 325)
        Me.Controls.Add(Me.btnStuurXML)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
        Me.Name = "Form1"
        Me.Text = "Alexion"
        CType(Me.DataSet, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub btnStuurXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStuurXML.Click
        'Dataset opslaan als XML
        FirebirdDataAdapter.Fill(DataSet)
        DataSet.WriteXml("XMLFile.xml")
        DataSet.Clear()
    End Sub

End Class


Dus zoals je ziet zou ik het graag zo maken dat hij voor het openen van Form1 (waar de applicatie mee opstart) de aanwezigheid van die reg key controleerd, want is ie niet aanwezig dan is het moederprogramma die ook de db bezit niet (meer) geïnstalleerd.
Nu begrijp ik dat ik de controle die ik doe in Form1 dat ik die er buiten moet doen, maar hoe?

Moet ik dit doen met een module? en het mooiste zou zijn dat in de zogenaamde PreCheck hij het pad returned want anders heb je in de verschillende onderdelen 2x dezelfde code staan... Dus in PreCheck zou dan de controle uit uitlezen van het registerwaarde worden gedaan en die word doorgegeven naar form1, en volgens mij gebeurt dat door inherits, of niet :?

Zou je me dat uit kunnen leggen Sinaasappelsap? of Whoami uiteraard ;)

[ Voor 8% gewijzigd door Denga op 28-03-2005 02:28 ]

Never eat yellow snow...


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Kijk nu eens goed naar je code....
Heb jij zelf code zitten schrijven in de initialize - component ?
Kijk eens welk commentaar daar boven staat.... Dat staat er echt niet voor niets hoor...
En trouwens, die applicatie wordt toch altijd afgesloten ?

Verder ben ik het met sinaasappelsap eens dat het gewoon een ranzige constructie is.
Waarom doe je niet gewoon in de constructor bv: check of de registry key er is, is ie er niet meer, geef een foutmelding.

https://fgheysels.github.io/


Verwijderd

Denga schreef op maandag 28 maart 2005 @ 02:20:

...

Dus zoals je ziet zou ik het graag zo maken dat hij voor het openen van Form1 (waar de applicatie mee opstart) de aanwezigheid van die reg key controleerd, want is ie niet aanwezig dan is het moederprogramma die ook de db bezit niet (meer) geïnstalleerd.
Nu begrijp ik dat ik de controle die ik doe in Form1 dat ik die er buiten moet doen, maar hoe?

Moet ik dit doen met een module? en het mooiste zou zijn dat in de zogenaamde PreCheck hij het pad returned want anders heb je in de verschillende onderdelen 2x dezelfde code staan... Dus in PreCheck zou dan de controle uit uitlezen van het registerwaarde worden gedaan en die word doorgegeven naar form1, en volgens mij gebeurt dat door inherits, of niet :?
Wellicht niet de beste methode, maar in ieder geval beter dan wat je nu hebt:
Maak een procedure "Sub Main" aan in een module. In je project instellingen zorgen dat je applicatie opstart met deze "Sub Main".

Maak een globale/public variabele "pad".
code:
1
2
3
4
5
6
7
8
9
public sub main
  if (applicatie_is_geinstalleerd)
    pad = "database pad"
    form1.show()
  else
    ' niets doen. Applicatie wordt automatisch afgesloten.
    ' toon eventueel foutmelding.
  end if
end sub

Zie ook de opmerkingen van whoami

  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Ok nu heb ik 'm netjes buiten m'n Form1 gezet, eigenlijk kon een kind de was doen :/

Maar nu heb ik een heel raar probleem:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Imports Microsoft.Win32

Module Check
    Public Sub Main()
        Dim RegisterWaarde As RegistryKey = Registry.LocalMachine
        Dim Form1 As New Form1

        RegisterWaarde = RegisterWaarde.OpenSubKey("SOFTWARE\\Micrososft\\Windows\\CurrentVersion\\Uninstall\\Blaat")

        If RegisterWaarde Is Nothing Then
            MsgBox("Blaat is niet (meer) geïnstalleerd", , "Blaat Tool")
            Application.Exit()
        Else
            Form1.ShowDialog()
        End If
    End Sub
End Module


Hierin checkt ie of de subkey bestaat, zo niet geeft ie een foutmelding... Werkt prima als ik in de bovenstaande code een letter tussen de subkey zet...
Maar het gekke is dat als ik met regedit in het register een naam verander zodat het pad eigenlijk niet meer bestaat krijg ik een System.NullReferenceException in m'n Form1.
Dus dan loopt ie de check goed door en loopt ie vast in het hoofddeel terwijl in beide gevallen gevraagd wordt naar een Subkey, in de eerste keer geet ie geen foutmelding en in de 2e keer wel...
Hoe kan dit?

[ Voor 6% gewijzigd door Denga op 29-03-2005 03:38 ]

Never eat yellow snow...


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
?

Never eat yellow snow...


Verwijderd

MSDN: RegistryKey Class
Visual Basic .NET articles: Accessing the Registry with Visual Basic.NET

Code zelf ff verifieren of het klopt...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Imports Microsoft.Win32
Imports System.Security.Permissions

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, All := "HKEY_LOCAL_MACINE")>

Public Form1 As Form1 = nothing

Module Check
    Public Sub Main()
        Dim RegisterWaarde As RegistryKey = Nothing

 RegisterWaarde = _
Registry.LocalMachine.OpenSubKey("SOFTWARE\Micrososft\Windows\CurrentVersion\Uninstall\Blaat")

        If (RegisterWaarde Is Nothing) Then
            MsgBox("Blaat is niet (meer) geïnstalleerd", , "Blaat Tool")
            Application.Exit()
        Else
            RegisterWaarde.Close()
            Form1 = New Form1()
            Form1.ShowDialog()
        End If
    End Sub
End Module


Wellicht dat er bij het uitvoeren van OpenSubKey ook nog een exception kan optreden onder bepaalde omstandigheden.

[ Voor 53% gewijzigd door Verwijderd op 29-03-2005 23:45 . Reden: Dubbele backslash is alleen voor C# en niet voor VB.NET ]


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Hoe zou ik dit dan op kunnen lossen?

Never eat yellow snow...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:12

gorgi_19

Kruimeltjes zijn weer op :9

Even een kleine sidenote tussendoor:
Als dit topic nog meer aan het handje meenemen wordt, gaat deze dicht. Het komt nu neer op: "Help het werkt niet, wie geeft mij code wat ik kan uitproberen?"

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Denga
  • Registratie: September 2000
  • Laatst online: 10-04 15:02

Denga

The riding never stops....

Topicstarter
Da's niet waar, maar als ik probeer zoals het in Msdn wordt aangegeven probeer ik het en dan als ik het op de ene manier doe werkt het maar op de manier zoals het hoort niet, en dat begrijp ik gewoon niet...
Ik probeer het wel maar hij geef gewoon vage foutmeldingen die die eigenlijk niet zou mogen geven omdat ik die afvang

Never eat yellow snow...

Pagina: 1