Toon posts:

[vba/access] can't update, database or object is read-only

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer gegevens vanuit outlook98 naar Access97 te schrijven. Ik gebruik vbscript en nt4. Ik krijg nu telkens de foutmelding: can't update, database or object is read-only.
Ik heb overal online naar oplossing gezocht maar lukt nog steeds niet.
properties van mijn mdb file is NIET read-only.
user = admin en passw is leeg in mijn vbscript.

Weet iemand hoe ik dit kan oplossen??

Verwijderd

Topicstarter
nog een ding, mdb file is in mijn desktop dus folder rechten speelt hier geen rol

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Hoe maak je een connectie met de db? Zowel bij het openen van de connection, als de recordset, kun je opgeven of ie readonly moet zijn. Of niet dus ;)

Exact expert nodig?


Verwijderd

Topicstarter
via odbc en in de script roep ik gewoon mijn DSN. Ik heb net de settings van de DSN bekeken en daar ligt het niet aan.

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Hoe ziet je recordset eruit en hoe voeg je gegevens toe? Niet met een INSERT query waarschinlijk maar met een Add method oid van het recordset object vermoed ik.
Als je recordset gegevens uit meerdere tabellen bevat (dus bv select * from tabel1, tabel2 where tabel1.id = tabel2.fik), dan is die recordset niet 'live', en kun je er dus ook geen wijzigingen in aanbrengen.

https://fgheysels.github.io/


Verwijderd

Heb je de beschikking over Microsoft Access zelf? Kun je de database wel openen met Access zelf?

Meestal komt dit door oudere mdb files die met nieuwere versies van Access worden geopend. Je krijgt dan read-only. De oplossing is dan converteren naar huidige versie.

[Edit] Post eens de betreffende code....

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
[nohtml]
Verwijderd schreef op 07 november 2002 @ 10:39:

Meestal komt dit door oudere mdb files die met nieuwere versies van Access worden geopend. Je krijgt dan read-only. De oplossing is dan converteren naar huidige versie
Read only in dat geval wil gewoon zeggen dat je geen aanpassingen kunt doen aan de objectdefinities, je kunt dus de structuur van de tabellen bv. niet gaan wijzigen, maar je kunt wel nog altijd gegevens toevoegen/verwijderen.

https://fgheysels.github.io/


Verwijderd

Whoami, je hebt gelijk, had ik over het hoofd gezien. :+

[Edit] Dan zit het toch in de vb script code. Verkeerde aanroep of verkeerd cursor type.

Verwijderd

Topicstarter
Sub CommandButton1_Click

Set ComboBox1 = Item.GetInspector.ModifiedFormPages("Form").ComboBox1
Set ComboBox7 = Item.GetInspector.ModifiedFormPages("Form").ComboBox7

Dim MyDbEng
Dim MyWkSpace
Dim MyDbConn
Dim MyRs

Set MyDbEng = CreateObject("DAO.DBEngine.35")

Set MyWkSpace = MyDbEng.CreateWorkspace("WkSpace", "admin", "", 1)

MyDbEng.Workspaces.Append MyWkSpace

Set MyDbConn = MyWkSpace.OpenConnection("Leisure", 1, False,"ODBC;DATABASE=test;UID=;PWD=;DSN=test")

Set MyRs = MyDbConn.OpenRecordset("SELECT * FROM RFC WHERE ID = False")

MyRs.AddNew

MyRs.Fields("Application") = ComboBox1.text
MyRs.Fields("ProjectPlanActivity") = ComboBox7.text

MyRs.Update

MyRs.Close

MyDBCOnn.Close

End Sub

Verwijderd

Wil je een record toevoegen of bewerken? Anders is het rs.Edit. Een recordset openen op basis van een query en dan een record toevoegen is raar. Open dan alleen de tabel OpenrecordSet("RFC").

Verwijderd

Topicstarter
ik wil een record toevoegen

Verwijderd

Topicstarter
een recordset openen en daarna gegevens invoegen is niet raar trouwens.

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Verwijderd schreef op 07 november 2002 @ 11:09:
een recordset openen en daarna gegevens invoegen is niet raar trouwens.


Ik vind van wel. Helemaal niet mooi, die manier. Gegevens toevoegen aan een databank doe je met een INSERT commando.
Stel dat je recordset er als volgt uit ziet:
code:
1
2
select * from tblKlant, tblOrder
WHERE tblKlant.KlantId = tblOrder.KlantId

Dan kun je aan die recordset mbhv addNew geen record toevoegen, want dan krijg je als foutmelding::
can't update, database or object is read-only

https://fgheysels.github.io/


Verwijderd

Topicstarter
in mijn geval werk ik met 1 tabel

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Ik vind het nogal eenvreemde situatie. Je gaat eerst alle records gaan ophalen, gewoon om er een te kunnen aan toevoegen.

Naar mijn idee kan dat veel beter en veel efficienter door gewoon
code:
1
2
3
4
INSERT INTO tabel
(veld1, veld2)
VALUES
(waarde1, waarde2)

te doen.

https://fgheysels.github.io/


Verwijderd

code:
1
2
3
4
5
6
7
8
9
Dim cn 
Dim rs

Set cn = CreateObject("ADODB.Connection")
cn.Open "DSN=Test; UID=admin"

Set rs = cn.Execute("INSERT INTO Verkoper (Naam) VALUES ('japio');")

cn.Close

Verwijderd

Topicstarter
insert into RFC (Applicatie, ProjectPlanActiviteit) values (combobox1, combobox2) kan volgens mij niet

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Verwijderd schreef op 07 November 2002 @ 11:29:
insert into RFC (Applicatie, ProjectPlanActiviteit) values (combobox1, combobox2) kan volgens mij niet


Dat kan wel, maar je zult eens moeten kijken hoe. :D
Dat is: kijk eens hoe je parameters kunt opgeven aan de query, of hoe je die query dynamisch opbouwt, en hoe je weet welk item je van die combobox moet inserten.

https://fgheysels.github.io/


Verwijderd

Verwijderd schreef op 07 november 2002 @ 11:29:
insert into RFC (Applicatie, ProjectPlanActiviteit) values (combobox1, combobox2) kan volgens mij niet
Het wordt iets als

code:
1
("INSERT INTO mytable (veld1, veld2) VALUES (' " + ComboBox1.text + " ', ' " + ComboBox1.text + " ');")


Extra spaties zijn voor de leesbaarheid.

Verwijderd

Topicstarter
volgende code lukt wel

Sub CommandButton1_Click()

Set ComboBox1 = Item.GetInspector.ModifiedFormPages("Form").ComboBox1
Set ComboBox7 = Item.GetInspector.ModifiedFormPages("Form").ComboBox7

Dim MyDbEng
Dim MyWkSpace
Dim MyDbConn
Dim MyRs

Set MyDbEng = CreateObject("DAO.DBEngine.35")

Set MyWkSpace = MyDbEng.CreateWorkspace("C:\WINNT\System32.system.mdw", "admin", "", 1)

MyDbEng.Workspaces.Append MyWkSpace

Set MyDbConn = MyWkSpace.OpenConnection("test", 1, False, "ODBC;DATABASE=test;UID=admin;PWD=;DSN=test")

' Set MyRs = MyDbConn.OpenRecordset("SELECT * FROM RFC WHERE ID = False",2)

'MyRs.AddNew

'MyRs.Fields("Application") = ComboBox1.text
'MyRs.Fields("ProjectPlanActivity") = ComboBox7.text

'MyRs.Update

'MyRs.Close
MyDBConn.execute(" insert into RFC (Application, ProjectPlanActivity) values (' " + ComboBox1.text + " ', ' " + ComboBox7.text + " ');")

MyDBConn.Close

End Sub

maar in mijn formulier (outlook zit geen ID) maar in mijn RFC tabel wel. ID en Application vormen samen mijn primary key en telkens als er een nieuwe record toegevoegd wordt, moet de ID met 1 verhoogd worden. Dus ik moet toch mijn recordset openen of niet????

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Neen, als ID een autonummer veld is, dan je tabel ziet er zo uit:
code:
1
2
3
4
tabel
Id : autonummer
Veld1 : int
Veld2 : string

Dan ga je een insert query schrijven die enekl Veld1 en Veld2 toevoegd. Het dbms zal wel automatisch het id ophogen.
Zo dus:
code:
1
insert into tabel (veld1, veld2) VALUES ( waard1, waarde2)

https://fgheysels.github.io/


Verwijderd

Topicstarter
id is geen autonummer maar ik kan met MAX werken en vervolgens met 1 verhogen

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Idd, maar waarom maak je er gewoon geen autonummering van?

https://fgheysels.github.io/


Verwijderd

Topicstarter
in de test dababase kan ik het wel doen maar de bestaande database niet (daar zitten al records in). Dus ik test alles in mijn test.mdb type van id moet ook met de bestaande db overeenkomen

Verwijderd

Kleine moeite om nieuwe tabel aan te maken en oude gegevens te mergen.

Verwijderd

Topicstarter
kleine moeite? 700 records zitten daar in

  • whoami
  • Registratie: December 2000
  • Laatst online: 29-08 15:58
Progje schrijven die die gegevens overzet of gewoon copy - paste.

https://fgheysels.github.io/


Verwijderd

Topicstarter
okee daar heb je wel gelijk in.

Verwijderd

Topicstarter
shit lukt niet, de id worden veranderd... dan maar met MAX
Pagina: 1