Hulp nodig bij MSDataGrid in Access

Pagina: 1
Acties:

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20-08 09:24

Maasluip

Kabbelend watertje

Topicstarter
Ik zit een beetje omhoog met het laten zien van data in een grid op een form in MS Access.

Ik moet data weergeven vanuit een query die veranderlijk is, de whereclause van de selectie voor het grid moet een waarde meekrijgen die ik in een combo uitkies.
Ik kan natuurlijk een subform/subreport op mijn form leggen, maar zoals ik het zie kan ik de query die daar aan vast zit niet veranderen. Dwz: ik zie de recordsource wel, maar ik heb (of ik vind) geen mogelijkheid om die recordsource te updaten als ik in de combobox de waarde voor de whereclause selekteer. Je zou zeggen dat je properties in andere forms kunt benaderen door
code:
1
Forms![Table1 subform].[Field1_Label].Value
of zoiets, maar dat werkt niet. (foutmelding: Microsoft Access can't find the form 'Table1 subform' referred to in a macro expression or Visual Basic code)

Ik wilde eigenlijk ook geen subform gebruiken, dus ik heb een MSDataGrid op mijn form gelegd. Maar dan krijg ik het probleem dat ik absoluut niet kan vinden hoe hier data aan toe te kennen.
Google geeft veel hulp met ASP, C/C++/C# of VB.NET voorbeelden, maar VB is kennelijk al uitgestorven. En de voorbeelden die ik vind spreken over een property .DataSource, en die bestaat niet in een MSDataGrid. Wel .ControlSource, maar daar kan ik niks over vinden op Google.

Wat mij een goede tip leek was dit, maar zoals ik al aangaf wordt daar over DataGrid1.DataSource gesproken en als ik dat verander in DataGrid1.ControlSource dan krijg ik al direkt een complieer error: Invalid use of property. Sterker nog, zelfs als ik het voorbeeld uit de helpfile van Access wil gebruiken krijg ik ook die foutmelding. Alsof je gewoon niets kunt toewijzen aan .ControlSource.


Misschien is een MSDataGrid niet de beste oplossing, maar andere grids heb ik niet in mijn (zeer beperkte) ontwikkelomgeving, en het zou ook niet handig zijn als gebruikers van de applicatie extra OCX'en moeten gaan installeren.
Waar ik dus tegenaan hik is dat ik wel goed (standaard) VB kan programmeren, maar van ADO of DAO nog weinig kaas gegeten heb. Gewoon queries maken in VB en de data daarvan gebruiken lukt me wel, maar nu dus laten zien in een grid is het probleem.

Signatures zijn voor boomers.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Het datagrid is geen simpel ding als je gewend bent in VBA en Access te werken :Y)

De eenvoudigste manier is nog om het te binden aan een data control, dat je vervolgens in code manipuleert. Hou er wel rekening mee dat een aantal properties objecten zijn en dat de toekenning dus met SET xx.yy = object moet.

Maar waarom zou je niet gewoon een (sub) formulier gebruiken; in sheet weergave? Dat kun net als ieder ander formulier manipuleren als je eerst het formobject ophaalt met de eigenschap form van de container waarin het subformulier staat.
[rml]Niesje in "[ Access 2003] Formulier stress!"[/rml]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20-08 09:24

Maasluip

Kabbelend watertje

Topicstarter
Niesje schreef op donderdag 01 september 2005 @ 11:16:
Het datagrid is geen simpel ding als je gewend bent in VBA en Access te werken :Y)
No shit, Sherlock ;)
Hmm, ja, maar hoe ik dat precies moet toepassen is me niet helemaal duidelijk.

Ik selekteer dus in mijn hoofdform uit de combo mijn waarde. Dan zet ik daar in de AfterUpdate mijn query en wijs die aan een recordset toe... en dan?
Mijn AfterUpdate is nu:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub cboLoc_AfterUpdate()
    
    Dim sQuery As String
    'Dim rs As Recordset
    
    Set db = CurrentDb

    sQuery = "SELECT Table1.* FROM [Table1] WHERE (((Table1.Field1)=""" & cboLoc.Value & """));"
    
    Set rs = db.OpenRecordset(sQuery)
    
End Sub

Dan moet ik dus ergens
Visual Basic:
1
 set rs=forms!Main![Table1 subform].form.recordsetclone 
doen, maar waar? In het subform ergens?

En een vraagje ernaast: als ik die Dim rs As Recordset uncomment, dan krijg ik een "Type Mismatch" bij de Set rs = ....
Waarom?

Signatures zijn voor boomers.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Een formulier koppel je aan een tabel query d.mv. de eigenschap 'recordsource'. Dat is een string, m.a.w. je hebt zo heel dat gedoe met rs en db niet nodig.


Visual Basic .NET:
1
2
3
4
5
Private Sub cboLoc_AfterUpdate()
    Dim sQuery As String
    sQuery = "SELECT Table1.* FROM [Table1] WHERE (Table1.Field1='"  & cboLoc.Value & "');"
    forms!Main![Table1 subform].form.recordsource=squery
End Sub


Ik heb trouwens ook je """" vervangen door single quotes. Vind ik wel net zo makkelijk.

offtopic:
Nog een open deur dan maar: lees je helpfile eens en zoek op recordsource / recordbron ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20-08 09:24

Maasluip

Kabbelend watertje

Topicstarter
Niesje schreef op donderdag 01 september 2005 @ 12:13:

Ik heb trouwens ook je """" vervangen door single quotes. Vind ik wel net zo makkelijk.
Ja, soms denk ik er zelf aan dat dat in Access ook kan.

Maar het werkt zo, geweldig!
offtopic:
Nog een open deur dan maar: lees je helpfile eens en zoek op recordsource / recordbron ;)
Ja ik zie het nu. Ik heb er niet echt naar gekeken omdat ik dus zat met het niet kunnen veranderen van de recordsource van het subform. Daarom liet ik het subform concept ook links liggen en keek ik naar het datagrid.

Misschien dat een fatsoenlijke cursus ook wat zoden aan de dijk zet.

Signatures zijn voor boomers.