Toon posts:

[VB6] lezen instelling-bestand vanuit .exe van prog *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben voor mijn stage een toepassing in VB6 aan t maken. Ik werk hiervoor met een access database . Deze database komt op een gedeelde map te staan zodat iedereen die het programma moet gebruiken toegang heeft tot die database.

Ik heb ervoor gekozen om een instelling-bestandje bij te houden ( instelling.pag ) waarin de locatie van de database opsla. Als hij geen database vindt op die locatie dan krijgt de gebruiker een fout-melding + de mogelijkheid om zelf naar de database te browsen ( met common dialog ) . Als hij een juiste DB gekozen heeft zal hij dat niet meer opnieuw moeten doen aangezien het path weer wordt opgeslagen in dat instelling-bestand.

Dit werkt allemaal prima in ontwerp van mijn programma ( runnen vanuit visual studio ) . Vanaf het moment dat ik een .exe gemaakt had en die uitvoerde , liep het mis.

Als er een juist path in het bestand zat, dan opende het programma goed, maar als er een verkeerd of geen path in zat, en dus de commondialog moest komen, liep het mis:

Ik kreeg de fout :

Runtime error 3709
The connection cannot be used to perform this operation. It is either closed or invalid in this contex.

Iemand een idee wat de oorzaak/oplossing van dit probleem zou kunnen zijn ?

Hieronder nog de functie waarmee ik het instellingen bestand lees ...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function lees_instelling(strWelke As String) As String

    Open App.Path & "\instelling.pag" For Random As #1 Len = Len(ins_gegeven)
    Get #1, , ins_gegeven
    
    If (strWelke = "database") Then
        lees_instelling = CStr(RTrim(ins_gegeven.inst_database))

    ElseIf (strWelke = "rapport") Then
        'niet belangrijk
    End If
    Close #1

End Function

  • Markieman
  • Registratie: December 2001
  • Laatst online: 15-05 12:16
Op welke code krijg je die foutmelding? Welke regel?

offtopic:
App.Path & "\instelling.pag" is gevaarlijk!!!!
vb:
indien exe is in root van je drive dan: App.Path = "C:\"
indien exe is in subdir van je drive dan: App.Path = "C:\subdir\nogdieper"
U ziet het verschil?

You do not fear them? - The Wraith? Naah. Now *clowns*, that's another story.


Verwijderd

Topicstarter
Ik krijg de fout als ik de .exe uitvoer. Dus dan krijg ik geen regelnummer. Als ik hetzelfde uitvoer vanuit visual studio met run, krijg ik geen fout.

En wat die app.path betreft. Ik geef dat instelling bestand mee met m'n installatie-packet. Dus die komt in dezelfde map als de .exe ....

Tja, als de gebruikers dat bestand gaan verplaatsen, dan gaan ze idd problemen krijgen. Mja , hoe los ik dat anders op. Een "hard-code" - path in de code plaatsen is toch nog minder flexibel he ...

  • rik
  • Registratie: April 2000
  • Laatst online: 22:32

rik

Controleer in ieder geval of dat je huidige path eindigt op "\" en voeg afhankelijk daarvan "\bestand" of "bestand" toe

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 23:39

mulder

ik spuug op het trottoir

Markieman schreef op 11 mei 2004 @ 16:25:
Op welke code krijg je die foutmelding? Welke regel?

offtopic:
App.Path & "\instelling.pag" is gevaarlijk!!!!
vb:
indien exe is in root van je drive dan: App.Path = "C:\"
indien exe is in subdir van je drive dan: App.Path = "C:\subdir\nogdieper"
U ziet het verschil?
App.Path IS het path waar je exe staat, en volgens mij read-only.

oogjes open, snaveltjes dicht


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Je mag eigenlijk nooit zelf een filehandle opgeven (de #1). Het is netter om met FreeFile een filehandle op te vragen en die te gebruiken. Voorkomt problemen. Natuurlijk niet vergeten om je filehandle ook weer netjes vrij te geven als je 'em niet meer nodig hebt.

[ Voor 31% gewijzigd door Lorn op 11-05-2004 16:53 ]


  • Markieman
  • Registratie: December 2001
  • Laatst online: 15-05 12:16
Runtime error 3709
The connection cannot be used to perform this operation. It is either closed or invalid in this contex.
Wat ik bedoelde is, waar denk je dat je de foutmelding krijgt?
In de functie lees_instelling of bij het openen van de databases?

Probeer te achterhalen waar het precies zit. Zet anders even voor het compilen wat MsgBoxen ertussen zodat je weet waar het nog goed gaat..

You do not fear them? - The Wraith? Naah. Now *clowns*, that's another story.


  • Ashtaroth
  • Registratie: December 2003
  • Laatst online: 16-02 09:59
Je kunt natuurlijk ook lijnnummers voor de code zetten en deze met Erl uitvragen.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function lees_instelling(strWelke As String) As String
On Error GoTo Catch

10    Open App.Path & "\instelling.pag" For Random As #1 Len = Len(ins_gegeven)
20    Get #1, , ins_gegeven
    
30    If (strWelke = "database") Then
40        lees_instelling = CStr(RTrim(ins_gegeven.inst_database))

50    ElseIf (strWelke = "rapport") Then
        'niet belangrijk
60    End If
70    Close #1

Catch:
    With Err
        Call .Raise(.Number, "lees_instelling, line " & CStr(Erl), .Description)
    End With

End Function

Verwijderd

Topicstarter
Ok, ik heb het dus gevonden. Het had helemaal niks te maken met het lezen van dat bestand.
Ik test tegenwoordig met een database die via het netwerk aangesproken moet worden. Dus dat duurt iets langer als dat hij lokaal op m'n laptop stond. Nu ging het fout bij de timer ( met bijhorende functies). Ik controleer in m'n hoofdscherm om de seconde of er een nieuwe bestelling geplaatst was. Toen ik lokaal testte was die seconde blijkbaar voldoende om de database te zoeken en vervolgens evt verbinding te maken met die database. Nu via het netwerk niet meer.

Dus ik heb de timer nu pas aangezet vanaf t moment dat hij succesvol verbinding gemaakt heeft.

Hoe ben ik erachter gekomen? Ik had tss m'n code een aantal msgbox'en gezet. En bij uitvoer van m'n nieuwe gecompileerde .exe zag ik dat de fout niet tss 2 msgbox in kwam maar op t moment dat er een msgbox op t scherm stond ... Toen wist ik natuurlijk dat het met m'n timer te maken had...

|:(

Toch bedankt allemaal !
Pagina: 1