[VB/ADO/ACCESS]updaten niet ondersteund

Pagina: 1
Acties:
  • 134 views sinds 30-01-2008

  • Oli4
  • Registratie: November 1999
  • Laatst online: 10-02 22:56
Ik ben bezig bewerkingen uit te voeren op een access 2000 db. Connectie loopt via ADO. Connectiestring is
"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + padDB
Ik kan wel wel lezen uit de db maar ik kan geen update uitvoeren. Want als ik de functie update bij een object recordset aanroep. Dan krijg ik de foutmelding
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype
De locktype voor de recordset stel ik in op adLockOptimistic. Maar als ik debug staat deze weer op adLockReadOnly.

Ik heb al de laatste MDAC (2.7) met extra de JET4 SP3 geinstalleerd.

In het topic [topic=233372] lijkt iemand hetzelfde probleem te hebben. Alleen de oplossing die hij dan gevonden heeft werkt dus bij mij niet.

Verder kan ik op internet ook geen oplossingen vinden (en ook niet op msdn)

Wie weet wat ik fout doe?

Verwijderd

Kan het zijn dat je database van cd afkomt ofzo en daarom nog readonly is?

  • Oli4
  • Registratie: November 1999
  • Laatst online: 10-02 22:56
Op zondag 03 februari 2002 18:12 schreef Hompie het volgende:
Kan het zijn dat je database van cd afkomt ofzo en daarom nog readonly is?
Database heb ik zelf gemaakt in Access 2000. Hij is niet read only

Verwijderd

Waarom gebruik je niet gewone SQL statements om je data te updaten? Da's veel netter/sneller/mooier en je bent van deze fout af!
Maar voor dit probleem: Zet je de locktype vóór de refresh van je connectie? En wordt ie meteen na de refresh naar read-only gezet, of blijft ie dan nog goed?

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

KoenM: Waarom gebruik je niet gewone SQL statements om je data te updaten? Da's veel netter/sneller/mooier...

Jij hebt duidelijk nooit met ADO gewerkt :)

  • Oli4
  • Registratie: November 1999
  • Laatst online: 10-02 22:56
Jij hebt duidelijk nooit met ADO gewerkt :)
Dat vind ik ook. ADO werkt veel netter/sneller/net+snel=mooier. Alleen moet het dan wel werken.

Het bleek dus dat als ik connectie.execute('query') aanriep, de recordset die ik hiervan terugkreeg automatisch readonly werd. Dit stond in de kleine letters in msdn.Om dit te voorkomen moet ik nu een recordset object gebruiken en met een functie hierbij de query aanroepen.

Bedankt voor jullie antwoorden.

Verwijderd

Op zondag 03 februari 2002 20:42 schreef stylee het volgende:
Jij hebt duidelijk nooit met ADO gewerkt :)
Da's _HELEMAAL_ fout gegokt! ;)
Ik werk dagelijks met ADO! Persoonlijk vindt ik een mooi SQL statement veel mooier, en het lijkt me ook veeeel sneller dan een loopje met allemaal rst.update statements. Want in een DBS zit een query optimizer en die ontwijk je op vernuftige wijze als je allemaal rst.update statements hebt.
Bovendien is SQL in mijn opinie veel duidelijk (is immers een 4GL) dan dat je de database opdrachten in VB hebt verweefd (3GL).
Zeg nou zelf, wat is mooier:
code:
1
Con.Execute "UPDATE Tabel SET veld = 'waarde' WHERE conditie"

of:
code:
1
2
3
4
5
6
7
8
9
Dim Rst as ADODB.Recordset
Set Rst = Con.Execute("SELECT * FROM Tabel WHERE conditie")

If Not Rst Is Nothing
  Do while not Rst.EOF
    Rst.Fields("veld") = "waarde"
    Rst.Update
  Loop
End If

:?

Ook lijkt me dat de eerste variant veel sneller is.

Overtuigd :? :+

Verwijderd

Eigenlijk vind ik ado toch mooier. :)

edit: Dat komt waarschijnlijk omdat ik geen bal van SQL snap.

Verwijderd

ff om onduidelijkheid te voorkomen: De SQL Statements maken uiteraard ook gebruik van ADO. Dus opzich heb ik natuurlijk niks tegen ADO. Er is immers nauwelijks keus :+.
Maar de beschreven methode om data te bewerken vindt ik lelijk/onoverzichtelijk en lijkt me heel traag.

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

KoenM: Da's _HELEMAAL_ fout gegokt! ;)

KAN gebeuren :D

Ja in jouw voorbeeld ben ik het ermee eens dat een SQL statement als
code:
1
UPDATE tabel SET prijs=prijs*2.20371

veel handiger is dan een loopje, maar als je bijvoorbeeld gegevens van één bepaalde klant moet updaten dan vindt ik bijv ADO weer een stuk handiger
code:
1
2
3
4
rsKlant("naam") = ""
rsKlant("adres") = ""
rsKlant("postcode") = ""
rsKlant.Update

Kwestie van smaak lijkt me :)

Verwijderd

Op zondag 03 februari 2002 23:20 schreef stylee het volgende:
Kwestie van smaak lijkt me :)
Tuurlijk :). Maar toch...
Als je een record toevoegd hoe doe je dat dan?
Eerst een rst opvragen, daar dan AddNew op aanroepen, dan de velden updaten en dan Update aanroepen :?
Dat vindt ik ontzettelijk onduidelijk, want je hebt heel veel regels code nodig die er niet echt toe doen.
Bij een 'mooi' INSERT statement is veel duidelijker wat je nou eigenlijk bedoelt, vindt ik althans...

Ik moet trouwens zeggen dat ik eerst ook altijd de .Update methode gebruikte, maar op een gegeven moment ben ik overgestapt naar pure SQL statements, en tot nu toe bevalt dat veel beter :).

  • Boss
  • Registratie: September 1999
  • Laatst online: 16:52

Boss

+1 Overgewaardeerd

Op zondag 03 februari 2002 23:20 schreef stylee het volgende:
code:
1
2
3
4
rsKlant("naam") = ""
rsKlant("adres") = ""
rsKlant("postcode") = ""
rsKlant.Update

Kwestie van smaak lijkt me :)
Mag ik je nog iets handigers vertellen: rsKlant!naam = "" werkt ook. (als je 't dan toch in ADO wilt doen :))

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • 3volution
  • Registratie: September 2001
  • Niet online

3volution

tsja...

Even terug naar het probleem.

Het lijkt mij dat de recordset ReadOnly is. Je moet je CursorType instellen op bijvoorbeeld adOpenDynamic (dat had ik in [topic=233372] geloof ik ook al getiept).

  • Oli4
  • Registratie: November 1999
  • Laatst online: 10-02 22:56
Op maandag 04 februari 2002 14:22 schreef Bertjooo het volgende:
Even terug naar het probleem.

Het lijkt mij dat de recordset ReadOnly is. Je moet je CursorType instellen op bijvoorbeeld adOpenDynamic (dat had ik in [topic=233372] geloof ik ook al getiept).
Dat deed ik ook, maar zoals ik hierboven al schreef ben ik erachter gekomen waarom dat niet werkte. Het bleek dus dat als ik connectie.execute('query') aanriep, de recordset die ik hiervan terugkreeg automatisch readonly werd. Ook al had ik hem daarvoor op adOpenDynamic gezet. Dit stond in de kleine letters in msdn.Om dit te voorkomen moet ik nu een recordset object gebruiken en met een functie hierbij de query aanroepen.

Verwijderd

Ik lees deze berichten en denk ha mooi, ik kan het probleem oplossen. Niet dus. :(

Ik had of beter gezegd heb hetzelfde probleem. Ik gebruik wel de recordset.Open methode maar het gaat toch niet helemaal goed. Ik gebruik het script op een asp-pagina:

<%
set conn = server.createobject("adodb.connection")
set rs = server.createobject("adodb.recordset")
conn.provider = "Microsoft.Jet.OLEDB.4.0"

conn.open server.mappath("db/forum.mdb")
rs.open "select * from test", conn
Response.Write rs.Supports(adAddNew) & "<br>"
rs.addnew "testveld", "testtekst"
rs.Update
%>

Als ik de pagina oproep krijg ik de volgende foutmelding:

Error Type:
ADODB.Recordset (0x800A0CB3)
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.

Het rare is dat als ik naga of de recordset kan worden ge-update ik als antwoord True krijg. Ook addnew zou worden ondersteund. Iemand een goede tip?

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Zet eens voordat je de query uitvoert :
code:
1
2
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

Die LockType stond hierboven al, maar die CursorType wil bij mij nog wel eens helpen. (Staat namelijk ook in alle voorbeelden in MSDN)

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Als ik dat toevoeg krijg ik de volgende melding:

Error Type:
ADODB.Recordset (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/forum/procesform.asp, line 20

Ik heb meerdere combinaties (Cursortype, Locktype en Cursorlocation) geprobeerd. Tot nu toe geen succes

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Je kan niet zomaar de ADO constantes in ASP gebruiken, daarvoor moet je een of andere include voor doen waar ik even niet kan opkomen.

Of je vul een 1 in in plaats van adOpenKeyset en 3 in plaats van adLockOptimistic.
Dus in plaats van
code:
1
2
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic

dit :
code:
1
2
rs.CursorType = 1
rs.LockType = 3

Verwijderd

Tja, de opgegeven cijfertjes gebruikt maarre..., dan nu deze melding:

Error Type:
Microsoft JET Database Engine (0x80040E09)
Cannot update. Database or object is read-only.
/forum/procesform.asp, line 25

De connection mode heb ik gelijk maar eventjes van 0 t/m 5 geprobeerd. Helpt ook niet. :? Meer tips?

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Ik heb het even nagekeken en de 1 en 3 moeten goed zijn die gebruik ik namelijk zelf ook.

Dan komen we weer terug bij wat er in het begin is geopperd, is het geen read-only mdb-file en hebben de internetgebruikers wel genoeg rechten erop?

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17:13

beany

Meeheheheheh

Op maandag 04 februari 2002 09:43 schreef KoenM het volgende:

[..]

Tuurlijk :). Maar toch...
Als je een record toevoegd hoe doe je dat dan?
Eerst een rst opvragen, daar dan AddNew op aanroepen, dan de velden updaten en dan Update aanroepen :?
Dat vindt ik ontzettelijk onduidelijk, want je hebt heel veel regels code nodig die er niet echt toe doen.
Bij een 'mooi' INSERT statement is veel duidelijker wat je nou eigenlijk bedoelt, vindt ik althans...

Ik moet trouwens zeggen dat ik eerst ook altijd de .Update methode gebruikte, maar op een gegeven moment ben ik overgestapt naar pure SQL statements, en tot nu toe bevalt dat veel beter :).
Hmmm, dan ga ik toch voor stored procedures. Dat is nog veel mooier( vind ik dan ;) )

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Verwijderd

Systeembeheer? Nooit van gehoord. idd speelden NTFS rechten parten. Kan nu lekker records wegschrijven. :)

  • .GoO
  • Registratie: September 2001
  • Laatst online: 18-08 19:55
Even een harde schop (sorry), maar heb hetzelfde 'probleem'...

Wanneer ik de Cursurlock en Locktype gebruik lukt het ook niet, krijg dan de volgende foutmelding:
ADODB.Recordset error '800a0e79'

Operation is not allowed when the object is open.
Database is niet read-only..

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Open even een nieuw topic, kicks van meer dan 3-6 maanden lopen altijd fout met replies op mensen die al lang niet meer rondlopen en zo ;)

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.