Toon posts:

[VB][ADO]Runtime error -2147217887

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

Verwijderd

Topicstarter
Ik heb een applicatie geschreven op een Pentium 4 met Windows XP.
Deze applicatie gebruikt ADO 2.7 componenten en JET 4.0

De applicatie werkt op deze PC prima.

Echter!!!

Wanneer ik deze applicatie draai op een Pentium 2 met Windows 98 SE geeft het problemen.

Ik krijg hier een runtime error wanneer ik een bewaar functie op de database uitvoer.

De foutmelding die ik krijg is:

Runtime error -2147217887
Bij een OLE DB bewerking die uit meerdere stappen bestaat, zijn fouten opgetreden.
Controleer alle OLE DB statuswaarden als deze beschikbaar zijn.
Er is niets gewijzigd.

Mijn code ziet er als volgt uit:

Voor de connectie:
-----------------------------------------------------
strCn = App.Path + "\data\mijndata.mdb"

With Conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.CommandTimeout = 500
.ConnectionTimeout = 500
.Open strCn, "", ""
End With

De bewaar functie:
-----------------------------------------------------
Public Function Bewaar() As Boolean

Dim lvobjRecordset As New ADODB.Recordset
Dim strSQL As String

Bewaar = True

strSQL = "SELECT * FROM klant WHERE klant_ID = " & cvlKlantID

With lvobjRecordset
Set .ActiveConnection = cvobjDBConnection
.LockType = adLockOptimistic
.CursorLocation = adUseServer
.CursorType = adOpenDynamic
.Open strSQL

If .EOF Then
If cvlKlantDbId <> -1 Then
Bewaar = False
End If
.AddNew
End If

.Fields("Klant_Code").Value = KlantCode
.Fields("Voorletters").Value = Voorletters
.Fields("Achternaam").Value = Achternaam
.Fields("tussenvoegsel").Value = Tussenvoegsel :(
.Fields("straatnaam").Value = Straatnaam
.Fields("Huisnummer").Value = Huisnummer
.Fields("Toevoeging").Value = Toevoeging
.Fields("Postcode").Value = Postcode
.Fields("Woonplaats").Value = Woonplaats

.Update

cvlKlantDbId = .Fields("Klant_ID").Value

End With
Set lvobjRecordset = Nothing

End Function
-----------------------------------------------------

De foutmeling komt op de regel met het teken :(

Dit vind ik een vreemde plaats. De .Addnew gaat dus kennelijk goed ??

Weet iemand een oplossing

Ik zou het fijn vinden als er wat experts hun gedachten over lieten.
Ik kom er namelijk echt niet uit

Verwijderd

KB artikel Q269495

zoek het op http://support.microsoft.com

copy/paste van resolution sectie uit dat artikel:
You can work around this problem in the following ways:

Do not use the "Persist Security Info" keyword in your ADO connection string.


Add the OLEDB_SERVICES registry entry as follows:

IMPORTANT: This article contains information about editing the registry. Before you edit the registry, make sure you understand how to restore it if a problem occurs. For information about how to do this, view the "Restoring the Registry" Help topic in Regedit.exe or the "Restoring a Registry Key" Help topic in Regedt32.exe.


Start Registry Editor (Regedit.exe).


In the registry under HKEY_CLASSES_ROOT\CLSID, find the CLSID of the OLE DB Provider. For example, the following registry key is for the Microsoft OLE DB Provider for SQL Server (SQLOLEDB):
HKEY_CLASSES_ROOT\CLSID\{0C7FF16C-38E3-11d0-97AB-00C04FC2AD98}
Click the CLSID, and then on the Edit menu, click Add Value and add the following registry value:


Value Name: OLEDB_SERVICES
Data Type: REG_DWORD
Value: 0xFFFFFFFF

NOTE: To find the CLSID for the provider you are using, search for the provider's ProgID (SQLOLEDB, for example) in the registry under HKEY_LOCAL_MACHINE\SOFTWARE\Classes\. Under the ProgID, there will be a key named CLSID.


If the above conditions are satisfied and you still receive the error, check your connection string for other possible errors.
Btw: die -2blabla error is een hexadecimaal getal. Copy/paste het in de windows calculator en klik op 'hex'. Je krijgt dan de hexadecimale representatie. DIE representatie (zonder de FFFFFFFFF prefix) gebruiken voor het zoeken naar oplossingen voor die error in de Knowledge Base.

Verwijderd

Topicstarter
Enig idee naar welke ClsId ik moet zoeken voor Access database

Verwijderd

Topicstarter
wat ook zo vreemd is waarom werkt het op de andere computer wel. Daar heb ik ook de registry niet aangepast.

Het stukje dat je ingevoegd had, had ik ook al in de msdn gevonden, maar ik snap niet precies wat ze ermee bedoelen.

Het is toch heel normaal dat je waarden in een recordset kunt toevoegen hiervoor hoef je toch zeker niet de registy in ??

Zit er misschien iets verkeer in mijn code??

Verwijderd

Topicstarter
De registry key bestond al alleen was de waarde

0xFFFFFFFe

Ik heb deze aangepast in
0xFFFFFFFF
maar ook hierna veranderde er niets

Verwijderd

Heb je al gedaan wat ze zelf al voorstellen? in de errors collectie van je connection object kijken?

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 14:20
Misschien dat in 98 (oudere versie ADO ??) er een verschil zit tussen hoofdletters/kleine letters ? (Tussenvoegsel <> tussenvoegsel , in je veldnaam dus) ??

Whatever


Verwijderd

Topicstarter
Ik ben aan het debuggen geweest,

En ik heb ontdekt dat als ik alle velden een waarde geef en dus geen "" dat het dan wel werkt.

Maar het moet ook mogelijk zijn om een lege string aan een veld toe te kennen. Dit is in de DB in ieder geval wel toegestaan.

En vergeet niet de zelfde code werkt op de andere pc. Zie verschillende specs wel!!

Verwijderd

Fields("tussenvoegsel").Value = iif(Tussenvoegsel="",null,Tussenvoegsel)

en dat zo voor al je fields, problem solved waarschijnlijk

  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 14:20
Microsoft Knowledgebase bevat een paar artikelen in deze richting, o.a. Q239781. Advies : upgrade naar ADO 2.5 of hoger. Check de ADO versie op die 98 bak eens ?

Whatever


Verwijderd

Topicstarter
Ik heb de ado 2.7 componenten extra geiinstalleerd op de betreffende PC's.

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 00:16 schreef Yarvieh het volgende:
Fields("tussenvoegsel").Value = iif(Tussenvoegsel="",null,Tussenvoegsel)

en dat zo voor al je fields, problem solved waarschijnlijk
Op zich een goede oplossing, maar waarom is dit probleem er. Waarschijnlijk doe ik iets verkeerd.

Het bestaat toch niet dat ik geen "" aan een stringveld in een recordset kan toekennen. Dit lijkt me dan een enorme fout in ADO of Jet. Ik denk echter toch dat de fout bij mij ligt.

Kan iemand misschien mijn code eens proberen ??

Verwijderd

Op dinsdag 19 maart 2002 00:36 schreef KingLois het volgende:
Het bestaat toch niet dat ik geen "" aan een stringveld in een recordset kan toekennen.
Hangt 'n beetje van je database af, access heeft geloof ik in z'n table properties een allow zerolength string setting zitten. Gebruiken alle clients dezelfde access database?

Verwijderd

Topicstarter
Geloof het of niet:

Zowel de code als de database is op beide systemen het zelfde.

Ook de ADO en de JET versie is gelijk.

Heeft niemand anders dit probleem ??

Kan iemand dit eens uitproberen. Als het bij iedereen zo is dan moet ik er misschien mee leren leven. Anders wil ik het echt oplossen. En het is al zo laat :Z

Verwijderd

Heb je nou al in je errors collectie gekeken? dan heb je teminste 'n iets duidelijkere foutmelding waarmee we je evt kunnen helpen..

Verwijderd

Topicstarter
Op dinsdag 19 maart 2002 00:58 schreef Yarvieh het volgende:
Heb je nou al in je errors collectie gekeken? dan heb je teminste 'n iets duidelijkere foutmelding waarmee we je evt kunnen helpen..
Hoe moet ik die OLEDB statuswaarden opvragen?
Als ik in het immidiate window ?Error typ dan krijg ik alleen de bekende melding te zien.
De errorscollection van het connection object is leeg (count=0)

Verwijderd

Topicstarter
Het is 1:41 in de nacht en ik ben eruit!!!!
:) :) :) :)

Na lang zoeken zag ik op de site van microsoft welke versies van Jet er meegeleverd werden met de verschillende versies van Windows (98,ME,2000,XP)

Vanaf ME wordt de 4.0 versie meegeleverd. Tot en met 98 de 3.51 versie. Dit was me al bekend.

Echter de update naar 4.0 die standaard op de microsoft site geboden wordt is die met het service pack 3.

Deze is al verouderd daar er al een Service pack 5 beschikbaar is.

Deze service pack wordt standaard meegeleverd vanaf Windows XP.

Heb de service pack gedownload en geinstalleer op mijn Win98 PC en Waarempel. Het werkt perfect

Allen die een reactie hebben gegeven hartelijk dank!!

Ik kan gaan slapen :z

Verwijderd

Op dinsdag 19 maart 2002 00:13 schreef KingLois het volgende:
Ik ben aan het debuggen geweest,
En ik heb ontdekt dat als ik alle velden een waarde geef en dus geen "" dat het dan wel werkt.
Maar het moet ook mogelijk zijn om een lege string aan een veld toe te kennen. Dit is in de DB in ieder geval wel toegestaan.
En vergeet niet de zelfde code werkt op de andere pc. Zie verschillende specs wel!!
Dit is ook een bekende bug in ADO 2.1. Upgrade naar ADO 2.5. (En gebruik geen serverside cursor, je gebruikt Access, die heeft geen serverside)

Die bug was je tegengekomen als je had gezocht in de MSDN op de errorcode die je kreeg.

Verwijderd

Topicstarter
Geloof me daar had ik echt wel gezocht.

Maar ik kwam pas vrij laat achter het feit dat het hem in de "" waarde zat.
Pagina: 1