[VBA/ Access '97] IsNull werkt niet

Pagina: 1
Acties:

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 11:42
Hallo tweakers,

Ik wist niet zeker of dit onderwerp hier of bij SA hoort, maar ik vermoed hier dus bij deze. Ik zit met een probleem met IsNull; zie onderstaande code;

----------------------------------------------------------------
'Alle medewerkers nieuw functioneringsformulier
'Stap 1 -- Tabel maken met daarin alle PID
DoCmd.RunSQL "SELECT Persoonsgegevens.PID INTO tblPID FROM
Persoonsgegevens;"
NR:
DoCmd.OpenTable "tblPID"
If IsNull([Table]![TblPID]![PID]) Then GoTo Verder
DoCmd.Close acTable, "tblPID", acSaveYes

'Stap 2 -- Tabel maken met daarin de MinPID
DoCmd.RunSQL "SELECT Min(tblPID.PID) AS MinVanPID INTO tblMinPID FROM tblPID;"

'Stap 3 -- Nieuw formulier toevoegen
DoCmd.RunSQL "INSERT INTO Formulieren ( GID )SELECT Max([GID])+1 AS Expr1 FROM Formulieren;"

'Stap 4 -- Tabel maken met daarin de MaxGID
DoCmd.RunSQL "SELECT Max([GID]) AS Expr1 INTO tblMaxGID FROM Formulieren;"

'Stap 5 -- ToevoegQuery die MinPID en MAXGID toevoegd aan Form_ID
DoCmd.RunSQL "INSERT INTO FormID ( PID, GID )SELECT tblMinPID.MinVanPID, tblMaxGID.Expr1 FROM tblMaxGID, tblMinPID;"

'Stap6 -- Verwijder MinPID van tabel PID
DoCmd.RunSQL "DELETE Min([PID])FROM tblPID;"
GoTo NR

Verder:
MsgBox "Alle records toegevoegd"
----------------------------------------------------------------

Het probleem zit in de regel If IsNull([Table]![TblPID]![PID]) Then GoTo Verder. Op de een of andere manier kan ik geen tabel aanspreken.. :? Hij opent hem wel netjes, maar dan zegt hij dat hij het desbtreffende veld niet kan vinden, terwijl die er wel is. Ik heb hier al diverse andere expressies (alleen PID, zonder table, etc) ingevoerd, allemaal met een negatief resultaat. Ook de tabel de focus geven werkt niet. Ik heb al gezocht in de search en via google, maar dit is iets te specifiek om er een antwoord op te vinden.

Ik ben opzich nog niet zo lang bezig met VBA, dus misschien zeggen jullie ook wel, waarom doe je het niet zo en zo. Deze suggesties zijn ook welkom.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


Verwijderd

Waarom gebruik je geen recordset? Op deze manier kun je velden heel makkelijk aanspreken. Verder vind ik het gebruik van GoTo niet echt fraai })

Dim wrkJet As Workspace
Dim dbs As Database
Dim rst As Recordset

Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
Set dbs = wrkJet.OpenDatabase("c:\mydatabase.mdb", True)

Set rst = dbs.OpenRecordset("table1")
' of Set rst = dbs.OpenRecordset("Select * from table1 where bla bla")

MsgBox IsNull(rst!ID)

rst.close
dbs.close
set rst=nothing
set dbs=nothing

Cheers,
Underscore

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 11:42
Goto lijkt nu opeens ook niet meer te werken?? Eerst ging hij dus oneindig door met records toevoegen; nu voegt hij er maar 1 in (stap 5), alleen (stap 3) wordt goed toegevoegd totdat de tabel leeg is :?
Het probleem is ook dat ik jouw code niet goed snap, hier heb ik eerder nooit gebruik van gemaakt. ;(

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


Verwijderd

[Goto lijkt nu opeens ook niet meer te werken?? Eerst ging hij dus oneindig door met records toevoegen; nu voegt hij er maar 1 in (stap 5), alleen (stap 3) wordt goed toegevoegd totdat de tabel leeg is :?
1: je geeft geen .MoveNext. Daarmee kom je wel behoorlijk in een loop ;)
2: als je zegt dat goto 'opeens niet meer werkt', kun je dan aangeven wat je veranderd hebt, dan kunnen we daar weer op reageren
Het probleem is ook dat ik jouw code niet goed snap, hier heb ik eerder nooit gebruik van gemaakt. ;(
persoonlijk gebruik ik ook altijd RecordSets. Erg flexibel, en je ziet beter waar je mee bezig bent...

Verwijderd

Masch schreef op 10 oktober 2002 @ 12:20:
Het probleem is ook dat ik jouw code niet goed snap, hier heb ik eerder nooit gebruik van gemaakt. ;(
Ik denk dat je ten onrechte gebruik maakt van docmd.opentable. Dit gebruik je als je de gebruiker een tabel wilt laten zien. Jouw bewerkingen kun je prima onderwater uitvoeren zonder tabellen te tonen. Hiervoor is recordset bedoeld.

Ik raad je aan de Access Help eens te bekijken, met name Recordset Object.

Zie ook:
http://msdn.microsoft.com...naccessingdatawithdao.asp
http://msdn.microsoft.com...l/output/F1/D2/S5A29F.asp

Als je daarna nog vragen hebt, wil ik je wel op weg helpen.

Cheers,
Underscore

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 11:42
Ik zal me er wat meer in gaan verdiepen. Ik heb liever dat ik de code snap, dan dat ik code klakkeloos ga overnemen. Daarin hebben jullie ook gelijk.

Als ik daarna nog vragen heb zal ik ze hier weer gaan stellen. In ieder geval al bedankt voor de geboden hulp.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!

Pagina: 1