NL Computer Forum

Maak het zelf => Programmeren => Topic gestart door: jvdpeet † op 19 juli 2012, 14:15:31

Titel: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 19 juli 2012, 14:15:31
Ik krijg de in Onderwerp genoemde fout in de volgende code op regel 'adoConnection.Open connectString'
Private Sub Command1_Click()
Dim adoConnection As ADODB.Connection
Dim adoRecordset As ADODB.Recordset
Dim connectString As String
' Creëer een nieuwe verbinding
Set adoConnection = New ADODB.Connection
' Creëer een nieuwe recordset
Set adoRecordset = New ADODB.Recordset
' Bouw onze connection string om te gebruiken wanneer we de verbinding openen.
connectString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=I:\InvestOptimal\beleggen/DATABASE\Portef1.mdb"
adoConnection.Open connectString
adoRecordset.Open "PortefeuilleTab", adoConnection
Do Until adoRecordset.EOF
    List1.AddItem adoRecordset!Name
    adoRecordset.MoveNext
Loop
adoRecordset.Close
adoConnection.Close
Set adoRecordset = Nothing
Set adoConnection = Nothing
End Sub
Ik wil deze database converteren naar Access 2000 of 2002. Hoe doe je dat het beste, Via Acces van MS Office of door een nieuwe zelfde database aan te maken in Visual Basic 6.0 en dan de inhoud te importeren uit de oude database naar de nieuwe?
De foutcode is -2147467259(80004005).
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 19 juli 2012, 22:16:44
Hoi Jan,

Deze map kan natuurlijk niet: I:\InvestOptimal\beleggen/DATABASE\Portef1.mdb

Hieronder een voorbeeld om dat te testen:

Private Sub Command1_Click()
Dim adoConnection As ADODB.Connection
Dim adoRecordset As ADODB.Recordset
Dim connectString As String
Dim sFile As String              'database bestand
Dim etxt As String               'error tekst
Dim e As Long                    'error status
Dim RW As Integer                'regelwijzer igv errors
On Error GoTo errhandle

' Creëer een nieuwe verbinding
RW = 0
Set adoConnection = New ADODB.Connection
' Creëer een nieuwe recordset
Set adoRecordset = New ADODB.Recordset
' Bouw onze connection string om te gebruiken wanneer we de verbinding openen.
'connectString = "Provider=Microsoft.Jet.OLEDB.4.0;"
'& "Data Source=I:\InvestOptimal\beleggen/DATABASE\Portef1.mdb"
sFile = "I:\InvestOptimal\beleggen/DATABASE\Portef1.mdb"
RW = 10
e = Len(Dir(sFile, vbArchive))
If e <> 0 Then
   RW = 20
   connectString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sFile
   adoConnection.Open connectString
   adoRecordset.Open "PortefeuilleTab", adoConnection
   Do Until adoRecordset.EOF
      List1.AddItem adoRecordset!Name
      adoRecordset.MoveNext
   Loop
   RW = 100
   adoRecordset.Close
   adoConnection.Close
   Set adoRecordset = Nothing
   Set adoConnection = Nothing
Else
   MsgBox "File error: " & etxt & vbCrLf & sFile, vbCritical
End If
Exit Sub                               'verlaat sub als alles goed is gegaan

errhandle:
   etxt = Err.Number & " : " & Err.Description
   If RW = 10 Then
      'database bestand controle, verdergaan
   Else
      'een andere fout melden
      If MsgBox("RW=" & RW & vbCrLf & etxt, vbCritical + vbOKCancel) = vbCancel Then Exit Sub
   End If
   Resume Next
End Sub


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 20 juli 2012, 15:19:03
Hoi Peter,
Bedankt voor de code. Ik had deze fout inmiddels ook ontdekt, verbeterd en de toepassing opnieuw gedraaid, maar de fout m.b.t. vorige versies bleef bestaan. De code was imiddels al verstuurd.
Het converteren met Access van MSOffice is mislukt. Het nieuwe bestand geeft dat het mogelijk corrupt is of dat het is aangemaakt met een vorige versie en niet geopend kan worden.
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 20 juli 2012, 20:54:51
Hoi Jan,

In VB6, open menu Project - References...
Wat is daar allemaal aangevinkt?


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 21 juli 2012, 15:38:56
Hoi Peter,
 
In Project/References is aangevinkt:
Visual Basic for Applications,
VB runtime objects and procedures,
VB objects and procedures,
MS DAO 3.6 Object Libraries,
OLE Automation,
MS ActiveX Data Objects 2.8 Library,
MS Data Environment Instance 1.0,
MS Data Binding Collection VB 6.0 (SP4),
MS ActiveX Data Objects Recordset 2.8 Library
GSServer
 
Mogelijk is er na een test met iets uitproberen 1 of 2 teveel aangevinkt gebleven.
 
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 21 juli 2012, 16:12:28
Hoi Jan,

Dat ziet er goed uit.
Je zegt "Het converteren met Access van MSOffice is mislukt." Met welke Office versie heb je geconverteerd?


Peter
 
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 21 juli 2012, 17:53:28
Hoi Peter,
Ik heb geconverteerd met Office 2003. Als ik aanklik welke database ik wil converteren, maakt het systeem automatisch een nieuwe database aan met de namen db1 enz. Je ziet daarna niet of er iets gebeurt en als je deze databases daarna wilt openen krijg je ofwel de melding dat deze mogelijk corrupt is, ofwel dat deze niet geopend kan worden omdat hij is aangemaakt met een eerdere versie van de applicatie. Dat is vreemd, want de bedoeling van converteren was nu juist deze mededeling kwijt te raken.
Deze laatste mededeling is ook nog om ee nadere reden vreemd, omdat Access 2003 van latere datum is dan 2002 en zeker dan 2002, 2000 of 1997. Of doe ik  iets fout?
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 22 juli 2012, 12:04:09
Hoi Jan,

Eens kijken wat er zoal in je register ingesteld staat en of je de bijbehorende bestanden aan boord hebt.
Download de bijlage jettest.txt naar je bureaublad.
Verander de extensie naar .bat.
Start jettest.bat
En worden nu 2 logbestandjes gemaakt, jet.txt en log.txt
Post beide als bijlage in een nieuw bericht.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 10:04:45
Hoi Peter,
Na de verandering van de extensie van jettest.txt in .bat en Uitvoeren gebeurt er niets. Het blijft een kladblok tekstbestand en wordt kennelijk niet als bat-bestand herkend. Wat doe ik fout?
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 23 juli 2012, 12:28:08
Hoi Jan,

Citaat
Het blijft een kladblok tekstbestand en wordt kennelijk niet als bat-bestand herkend. Wat doe ik fout?
Je hebt de naam verandert, niet de extensie.
Waarschijnlijk is de volledige bestandsnaam nu jettest.bat.txt.
Doe het volgende:
Open het tekstbestand jettest.txt met Notepad
Klik op Bestand - Opslaan als...
Bij Opslaan in, selecteer Bureaublad
Bij Bestandsnaam, typ jettest.bat
Bij Opslaan als type, selecteer Alle bestanden
Klik op Opslaan

Als het goed is heb je nu wel een uitvoerbaar .bat bestand.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 14:44:41
Hoi Peter,
Inderdaad, nu lukte het wel. Hier zijn de bestandjes.
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 23 juli 2012, 15:22:24
Hoi Jan,

Ok, dat geeft wat meer informatie.
De nieuwe bijlage ook even uitvoeren en de log posten.
Na het downloaden de extensie eerst veranderen in .bat en vervolgens jettest2.bat uitvoeren.

Daarna kunnen we gaan repareren.


Peter


Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 17:05:36
Hoi Peter,
Hier is hij.
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 23 juli 2012, 17:30:22
Hoi Jan,

De bijlage jet2.txt is verminkt, post aub een nieuwe.
(Niet openen/bewerken met Word of een dergelijke tekstverwerker.)


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 18:07:35
Hoi Peter,
Hopelijk doet deze het beter.
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 23 juli 2012, 19:22:08
Hoi Jan,

Ok, de tekst is nog steeds verminkt maar de gegevens zijn goed.
Plaats de bijlage jetfix.txt op je bureaublad.
Verander weer de extensie in .bat
Start vervolgens jetfix.bat
Herstart je computer.

Start de bijlage jettest.bat uit een eerder bericht nogmaals ter controle.
Post de logfiles logfix.txt en jet.txt

Hoe gaat het nu met je VB programma, nog foutmeldingen?


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 20:19:00
Hoi Peter,
Hier zijn de nieuwe bestanden.
 
 
Jan
 
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 23 juli 2012, 20:38:36
Hoi Peter,
Sorry Peter, maar het programma geeft nog steeds bij 2 onderdelen de fout Disk or network error.
Welke veranderingen heb je met het voorgaande aangebracht? Is het niet het beste de in het programma gebruikte databases opnieuw te maken met VB6 en dan de inhoud uit de bestaanden tabellen te importeren in de nieuwe. Mogelijk bestaat er ergens een voorbeeldcode om zoiets te doen. Het is wel wat werk, maar misschien toch vlugger dan voortmodderen met de oude databases. Wat denk jij? Ik kan dan tevens de data controls afdanken en met ADO verder gaan. Of misschien is het zelfs zo, dat overgaan op ADO de problemen zal oplossen ook zonder nieuwe databases te maken. Hoe kun je informatie  over de bestaande databases onttrekken, zoals is het een DAO, RDO of nog een andere database, welke versie is het, enz.? Wat opvalt is dat bij het invullen van de connection in ADO het ingevulde gedeelte niet altijd hetzelfde is. Geeft ADO automatisch al de meest voor de hand liggende soort aan?   
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 23 juli 2012, 20:52:12
Hoi jan,

Vreemd, zo te zien zijn de register wijzigingen niet toegepast.
Dit is toch een Windows XP systeem?
De 2 logfiles van het register zijn identiek. Ofwel de wijzigingen zijn niet toegepast of het is geen nieuwe logfile van de register export.

Ben je een beetje bekend met handmatig het register aanpassen ?
Eventueel maandag-avond van 21:00-22:00 de chatroom bezoeken.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 24 juli 2012, 00:29:16
Hoi Peter,
Het lijkt er inderdaad op dat de registerwijzigingen niet zijn toegepast. Nadat ik mijn laatste antwoord had verzonden heb ik de JET en log bestanden gelezen en er achter gekomen dat je de databases hebt geconverteerd door importeren van de inhoud naar een nieuwe database. Dan zouden deze bij openen geen fout meer mogen geven dat met een vorige versie aangemaakte databases niet geopend kunnen worden, maar bij controle bleken deze fouten er nog steeds te zijn.
Ik heb inderdaad een Windows XP Professional en ben bekend met handmatig kleine wijzigingen in het register aan te brengen via regedit.
 
 
Jan
 
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 24 juli 2012, 00:50:22
Hoi Peter,
Ik heb de laatste jettest.bat ter controle nog een keer gedraaid en aangehecht om zeker te weten dat de wijzigingen in het register al dan niet zijn uitgevoerd.
 
Jan
 
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 24 juli 2012, 01:11:18
Hoi Jan,

Citaat
Windows XP...
Ik begrijp even niet waarom de .bat file de register aanpassingen niet uitvoerd terwijl de logfiles wel aangeven dat de register bewerkingen uitgevoerd zijn.

Ook je laatste log laat niet de wijzigingen zien.

Dan maar handmatig het register wijzigen:

Klik op Start - Uitvoeren
Typ REGEDIT en klik op OK
De Register-editor opent nu.

Als je wilt kan je eerst een register-backup maken.

Blader in linker kolom naar HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 2.x
Rechtsklik in de rechterkolom en kies Nieuw - Tekenreekswaarde
Geef als naam win32
Geef de waarde C:\WINDOWS\System32\Msrd2x40.dll
Zie de screenshot-bijlage.

Blader in linker kolom naar HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 3.x
Rechtsklik in de rechterkolom en kies Nieuw - Tekenreekswaarde
Geef als naam win32
Geef als waarde C:\WINDOWS\System32\Msrd3x40.dll

Let op dat je de bestandsnamen goed ingeeft, of kopieer en plak ze vanaf dit bericht.

Sluit Regedit
Herstart je computer.

Hoe gaat het nu met je VB programma, nog foutmeldingen?


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 24 juli 2012, 10:08:37
Hoi Peter,
Ik heb geprobeerd de registersleutels in te geven, maar dat was al gebeurd. Het systeem met jettest.bat heeft dus wel gewerkt.
Ondanks dat blijven de fouten bestaan. Het probleem met het niet openen van de database oude versie heeft fout nummer
-2147467259 en is een vervelende fout omdat deze fout ook optreedt als ik de datacontrol vervang door ADO.
 
 
Jan
 
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 24 juli 2012, 11:26:43
Hoi Jan,

Citaat
Ik heb geprobeerd de registersleutels in te geven, maar dat was al gebeurd. Het systeem met jettest.bat heeft dus wel gewerkt.
Vreemd dat de logfile dat niet meldt dan.

Citaat
Ondanks dat blijven de fouten bestaan.
Tja, dan weet ik zo 1-2-3 geen oplossing.
Misschien een meelezer.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 24 juli 2012, 12:02:17
Hoi Peter,
Ik zal eens beginnen met alle data controls te vervangen door ADOdc's. Mogelijk geeft dat wat meer informatie waar we de fout moeten zoeken. Het resultaat daarvan zal ik weer melden.
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 24 juli 2012, 21:11:25
Hoi Peter,
Alle data controls vervangen door ADO-verbindingen werkt niet, omdat je geen database kunt openen die gecreëerd is in een eerdere versie van VB. Deze melding krijg ik als ik Jet 3.51 of Jet 4.0 als Provider kies. In de keuzelijst staan nog veel meer mogelijkheden. Als ik een van die andere selecteer heb ik dan wel een bij de database passende Provider en gesteld dat bepaalde databases gecreëerd zijn in VB3.0, 4.0 0f 5.0welke zou dan dan moeten zijn?
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 25 juli 2012, 10:53:53
Hoi Jan,

Voor zover ik weet is er geen standaard manier om te bepalen waarbij een database gemaakt is. Er zijn wel eigenschappen van database bestanden op te vragen maar dat is weer afhankelijk van de manier hoe de database aangemaakt is.
Sommige database bestanden bevatten bijvoorbeeld de eigenschap "AccessVersion" wat aangeeft met welke Access versie de database gemaakt is. Zo ook de eigenschap "Jet".

Op DEZE (http://support.microsoft.com/kb/303528) pagina staat globaal aangegeven welke Jet-engines gebruikt zijn in access databases. 
Hopelijk kun je daar wat mee.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 31 juli 2012, 15:26:54
Hoi Peter,
Heb jij een verklaring voor het volgende: Als ik via Add-ins/Visual Data Manager een database probeer te openen, krijg ik de fout dat een met een vorige versie (van VB?) gecreëerde versie niet geopend kan worden (je zou denken omdat VB6 die niet verwerken kan), maar als ik voor het openen van de database met een data control werk, dan lukt het zonder problemen. Kennelijk heeft VB6 er dus totaal geen moeite mee. Als het probleem niet in VB6 zit, waarin dan wel? Of is de foutmelding flauwekul?
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 31 juli 2012, 20:01:51
Hoi Jan,

Ik ben niet zo thuis in de wirwar van drivers en versies mbt databases.
Kijk HIER (http://support.microsoft.com/kb/252438) eens, of volg 1 van links onderaan die pagina.

Kun je wel deze databases openen met MS Access.
Zoniet, stel je vraag eens op het MS Office forum (http://community.compuserve.com/n/pfx/forum.aspx?webtag=ws-msoffice).


Peter


Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 1 augustus 2012, 13:24:05
Hoi Peter,
Bedankt voor je reactie. De eerste link in het door jou aangegeven artikel geeft nuttige informatie. De fout die ik krijg heeft kennelijk geen duidelijke oplossing. Het lijkt erop dat de fout (disk or network error) een meervoudige oorzaak kan hebben. Ik krijg hem als ik de databasenaam en de recordsource op meer dan 1 plaats codeer, maar ik krijg hem ook op een plaats, waar hij
op het eerste gezicht niets met een database of een netwerk te maken heeft. Ik krijg hem namelijk in of na de routine WriteLOG, welke een onderdeel is van de systematiek die je mijn indertijd eens hebt gegeven om een logbestand van fouten die tijdens het gebruik van een van mijn toepassingen optreden te maken. Toepassing van deze code heeft veel nut opgeleverd om fouten die optreden te verbeteren. Wat zou in dit geval de oorzaak van deze fout kunnen zijn? Het errornumber is 3043 en deze wordt in forums vaak in problemen vermeld, maar ik heb geen duidelijke oplosssing kunnen vinden.
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: Peter op 1 augustus 2012, 19:21:20
Hoi Jan,

Error 3043 = "Disk or Network Error".

Staan alle bestanden die in je project gebruikt worden op 1 en dezelfde computer of gebruik je een netwerk?
Kan er een probleem zijn met gebruikersaccounts en/of lees- en schrijf-rechten?

Kijk HIER (http://www.granite.ab.ca/access/corruption/symptoms.htm) en HIER (http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q150/9/43.asp&NoWebContent=1) eens.


Peter
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 8 augustus 2012, 20:32:27
Hallo,
Wie heeft ervaring met het volgende databaseprobleem:
Ik heb een database welke corrupt lijkt, maar het waarschijnlijk niet is. Als ik de database probeer te openen met Add-in Visual Data Manager in VB6.0, krijg ik fout -2147467259 met als beschrijving dat databases die zijn gecreëerd met een eerdere versie van VB niet geopend kunnen worden. Het gekke is echter dat deze database wel geopend kan worden met DataView en dat de database wel normaal verwerkt kan worden (lezen en schrijven, etc.) door de applicatie. Kennelijk is de database dus niet corrupt. Compact en Repair geven geen oplossing. Als ik de database eerst converteer naar Access 2000 en dan compact and repair uitvoer zie je na het geven van de opdracht niets gebeuren, zelfs geen foutmelding. Het lijkt erop alsof ADO in combinatie met DAO3.6 de oorzaak van bovenstaande fout is. Ik denk daarom dat ik de ADO weer moet vervangen door data controls, zodat ADO en DAO3.6 elkaar niet meer in de weg zitten of heeft iemand een betere oplossing?
 
 
Jan
Titel: Re: Openen van in een vorige versie van je applicatie gemaakte database geeft fout
Bericht door: jvdpeet † op 9 augustus 2012, 12:20:07
Ik heb de oplossing van het in mijn vorige reactie vermelde probleem gevonden. De database blijkt inderdaad niet corrupt, maar Visual Data Manager herkent deze niet omdat MS Access 2000 werd uitgebracht na Visual Basic 6.0. Het is alleen vreemd, dat je daar niet door MS op attent gemaakt wordt, maar dat er een lange zoektocht op internet voor nodig is om daar achter te komen.
 
 
Jan