Toon posts:

[VBA] [Access 2000] Hoe een close te maken van een RecordSet

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

Verwijderd

Topicstarter
Hi,

Ik zit met een probleem, ik moet een recordset uit een database hebben in Access 2000. Het probleem is dat ik deze records wil controleren aan de hand van externe waarde en waarde in de recordsets. Ik moet eventueel records in de recordset verwijderen, maar dit mag niet in de database gebeuren. Kort om, ik heb een recordset nodig die uit de database komt, maar na het ophalen van de gegevens los staat van de database;

Hieronder een stukje VBA dat bijna werkt;

Dim MyCon As Connection
Dim MyRs As New ADODB.Recordset
Dim MyClone As New ADODB.Recordset
Set MyCon = CurrentProject.Connection
Dim MySql As String
MySql = "SELECT * FROM Reservation;"
MyRs.CursorType = adOpenStatic
MyRs.LockType = adLockBatchOptimistic
MyRs.Open MySql, MyCon, , , adCmdText
Set MyClone = MyRs.Clone

@@@@@Hieronder ontstaat het probleem@@@@@
MyRs.Close
MyCon.Close
MyClone.MoveFirst

Ik heb na heel veel pielen de hier boven staande code gecreeerd.
Met deze code haal ik gegevens op in de recordset "MyRs", vervolgens "clone" ik deze naar "MyClone". In alle documentatie staat dat je na het clonen de database connectie (MyCon) en de oude recordset (MyRs) kunt sluiten en dan hou je nog steeds de geclonede recordset. Ik krijg echter deze foutmelding als ik de code laat lopen;

Afbeeldingslocatie: http://nekita.no-ip.com/~ice/images/FoutmeldingDatabase.jpg

Hebben jullie enig idee hoe ik een recordset kan copieren zodat ik deze kan bewerken zonder dat ik de data in de database kan wijzigen?

Bvd. Golfje, die hopeloos aan het worden is........

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Snap niet precies waarom je een kloon nodig hebt.

En naar mijn weten worden records die veranderd worden in .clone ook veranderd in de database.

Maar waarom moet je records veranderen in je recordset zonder dat dit doorgevoerd wordt in de database? Dan kun je ze net zo goed niet veranderen toch?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 24-08 22:38
Moet je niet een clientside cursor gebruiken bij het openen?
Disconnecting and Reconnecting the Recordset
One of the most powerful features found in ADO is the capability to open a client-side Recordset from a data source and then disconnect the Recordset from the data source. Once the Recordset has been disconnected, the connection to the data source can be closed, thereby releasing the resources on the server used to maintain it. You can continue to view and edit the data in the Recordset while it is disconnected and later reconnect to the data source and send your updates in batch mode.

To disconnect a Recordset, open it with a cursor location of adUseClient, and then set the ActiveConnection property equal to Nothing. (C++ users should set the ActiveConnection equal to NULL to disconnect.)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • JohanDM
  • Registratie: Augustus 2002
  • Laatst online: 16-07-2021

JohanDM

Optimist

Als je recordsets kloont, blijft de onderliggende data en database connectie gemeenschappelijk (welke documentatie gebruik je overigens :? ), je kan dan wel onafhankelijk erdoorheen scrollen.
Voor een database onafhankelijke kopie die ook niets uit zichzelf naar de database schrijft moet je een client-side recordset openen en die disconnecteren van de database.
Dit doe je door de CursorLocation van de recordset op client te zetten en na het openen de ActiveConnection op Nothing te zetten:
Visual Basic:
1
2
3
4
5
6
MyRs.CursorLocation = adUseClient
MyRs.CursorType = adOpenStatic
MyRs.LockType = adLockBatchOptimistic
MyRs.Open MySql, MyCon, , , adCmdText
Set MyRs.ActiveConnection = Nothing
MyCon.Close

Nu is MyRs een database onafhankelijk recordset waar je updates in kan doen zonder dat die naar de database gaan.

"Two things are infinite: the universe and stupidity. And the former I'm not so sure about." -- Albert Einstein


Verwijderd

Topicstarter
JohanDM schreef op 17 January 2003 @ 14:06:
Als je recordsets kloont, blijft de onderliggende data en database connectie gemeenschappelijk (welke documentatie gebruik je overigens :? ), je kan dan wel onafhankelijk erdoorheen scrollen.
Voor een database onafhankelijke kopie die ook niets uit zichzelf naar de database schrijft moet je een client-side recordset openen en die disconnecteren van de database.
Dit doe je door de CursorLocation van de recordset op client te zetten en na het openen de ActiveConnection op Nothing te zetten:
Visual Basic:
1
2
3
4
5
6
MyRs.CursorLocation = adUseClient
MyRs.CursorType = adOpenStatic
MyRs.LockType = adLockBatchOptimistic
MyRs.Open MySql, MyCon, , , adCmdText
Set MyRs.ActiveConnection = Nothing
MyCon.Close

Nu is MyRs een database onafhankelijk recordset waar je updates in kan doen zonder dat die naar de database gaan.
Yep, ben er net zelf achter gekomen, nou ja, 1 pagina op het inet.
Dit werkt inderdaad.... :)

Voor degene die wou weten waarom ik een losgekoppeld recordset wou is het volgende;

Ik moet met twee arrays van datums werken, nou ja twee maal twee datums die een soort van (twee) arrays vormen. Deze "arrays" moet ik controleren of ze overlappend zijn en dat is niet mogelijk met access omdat het niet goed met datums en intervals kan omgaan op SQL niveau. Ik heb daarom een VBA script geschreven en die doet het wel, alleen moet ik mijn public function natuurlijk wel voeder geven. En die voeder wil ik ook kunnen bewerken om vervolgens op een andere manier te kunnen controleren (ook in VBA) en dan wil ik dit alles koppelen aan een form.....

Beetje onduidelijk maarja,

Ik ben dus een schoolproject aan het maken;

Een hotel reserverings systeem in Access. In 1 tabel staan de reserveringen van ruimtes en de start en tijd datum/tijd hiervan. Nu wil ik als een klant belt aan de hand van een door de klant opgegeven start en eind datum/tijd kunnen kijken of er ruimtes beschikbaar zijn. En dat is het probleem dus voor access......


Documentatie;

Microsoft Access 2000 Visual Basic for Applications Fundamenten 403 Pagina's
Mastering Access 2000 Premium Edition 1402 Pagina's
SQL Visual Quickstart Guide 400 Pagina's
Het Complete Handboek Visual Basic 6 881 Pagina's
Het internet Te groot :P

Verwijderd

Topicstarter
Oke, nu heb ik nog 1 probleem.....

Hoe kan ik een recordset die ik heb bewerkt via de bovengenoemde wijze weer "terug koppelen" naar een formulier en/of een object op een formulier?

Ik heb ergens het volgende stukje gezien, maar dat willie dus niet doen.

Set DataList1.RowSource = rs1
Set DataList1.ListField = "TABLE_NAME"
Pagina: 1