[VB] Access form select query geeft foutmelding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlauweFles
  • Registratie: Maart 2000
  • Niet online
Hallo,

mijn vriendin heeft een probleempje met een Access Database die ze heeft gemaakt om een tabel te querrien. Heeft ze mij natuurlijk gevraagd het even op te lossen, maar ook ik kom er zo 1-2-3 niet uit.

Kunnen jullie helpen?

Bij het uitvoeren krijgt ze de volgende foutmelding: method or data member not found


Ze heeft de volgende Macro gemaakt:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Option Compare Database
Option Explicit

Public Sub Clear_Click()
    Dim intIndex As Integer
    
    ' Clear all search items
    Me.SearchText = ""
    Me.CmbAgencyType = ""
    Me.CmbCountry = ""
    Me.CmbMethod = ""
       
End Sub

Public Sub Search_Click()
    
    Dim strAgencyName As String
    Dim strSearch As String
    
    
'Check SearchText for Null value or Nill Entry first.

    If IsNull(Me![SearchText]) Or (Me![SearchText]) = "" Then
        MsgBox "Please enter a value under AgencyName!", vbOKOnly, "Invalid Search Criterion!"
        Me![SearchText].SetFocus
    Exit Sub
End If

    ' Update the record source
Me.FrmSubAgencies.Form.RecordSource = "SELECT * FROM QryAgencyData " & BuildFilter
    
    ' Requery the subform
Me.FrmSubAgencies.Requery

End Sub

Public Function BuildFilter() As Variant
    Dim varAgency As Variant
    Dim varItem As Variant
    Dim intIndex As Integer

    varAgency = Null  ' Main filter
    
    ' Check for AgencyName
    If Me.SearchText > "" Then
        varAgency = varAgency & "[SearchText] LIKE """ & Me.SearchText & "*"" AND "
    End If
    
    ' Check for AgencyType
    If Me.CmbAgencyType > "" Then
        varAgency = varAgency & "[AgencyType] = " & Me.CmbAgencyType & " AND "
    End If
    
    ' Check for Country
    If Me.CmbCountry > "" Then
        varAgency = varAgency & "[Country] = " & Me.CmbCountry & " AND "
    End If
    
    ' Check if there is a filter to return...
    If IsNull(varAgency) Then
        varAgency = ""
    Else
        varAgency = "WHERE " & varAgency
        
        ' strip off last "AND" in the filter
        If Right(varAgency, 5) = " AND " Then
            varAgency = Left(varAgency, Len(varAgency) - 5)
        End If
    End If
    
    BuildFilter = varAgency
    
End Function


De tabellen en forms zijn allemaal aanwezig. Het form FrmSubAgencies is als subform ingevoerd in het form Search All Agencies.

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 09:49

Reptile209

- gers -

Op welke regel van de code krijg je die foutmelding? Eventueel even met de debugger door de code heen 'steppen' om dat te achterhalen. En dan zal het antwoord op je vraag al een stuk eenvoudiger zijn.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • BlauweFles
  • Registratie: Maart 2000
  • Niet online
De fout komt op regel 30: Me.FrmSubAgencies.Form.RecordSource

Acties:
  • 0 Henk 'm!

  • bazs2000
  • Registratie: November 2000
  • Laatst online: 05-08 11:09

bazs2000

Pixels zo groot als een atoom

code:
1
2
3
4
5
6
   varAgency = Null  ' Main filter
    
    ' Check for AgencyName
    If Me.SearchText > "" Then
        varAgency = varAgency & "[SearchText] LIKE """ & Me.SearchText & "*"" AND "
    End If

Het probleem komt uit "BuiltFilter" vermoed ik en dan met name de manier waarop de SQL-string wordt opgebouwd. Ieder keer wordt "varAgency" gebruikt die is gedefiniëerd als NULL. Dat betekent dat je midden in een query ineens met NULL'en strooit en volgens mij bijt hij daarop zijn tanden stuk.

Definiëer anders een varAgency2 en bouw hierop de string, dan kun je de varAgency lekker op NULL houden (Volgens mij is dat het al twijfel ik wel een beetje). :)

[ Voor 13% gewijzigd door bazs2000 op 06-01-2011 13:28 ]

Krankzinnige muziek vind je hier.


Acties:
  • 0 Henk 'm!

  • BlauweFles
  • Registratie: Maart 2000
  • Niet online
Thx,

ik heb de lijn met de NULL eruit gehaald, maar de foutmelding blijft. Ook ipv NULL, "", neerzetten geeft hetzelfde resultaat.

Kan het niet zou zijn dat hij FrmSubAgencies niet herkent? Dat het hoofdform op de eoa manier het subform niet (h)erkend?

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 09:49

Reptile209

- gers -

Peewee schreef op donderdag 06 januari 2011 @ 12:50:
De fout komt op regel 30: Me.FrmSubAgencies.Form.RecordSource
Probeer 'm eens zonder 'Me.' ervoor, of anders Me.Form.RecordSource? Als FrmSubAgencies een form is, dan heeft dat niets met Me te maken, dus een van de twee klopt hier denk ik niet. Je probeert een component (een recordsource) aan te spreken die op een form staat, zoek dus even na hoe je die kunt aanspreken in deze context.
</klok-en-klepel>

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Peewee schreef op donderdag 06 januari 2011 @ 12:50:
De fout komt op regel 30: Me.FrmSubAgencies.Form.RecordSource
De hamvraag is: is FrmSubAgencies de naam van het subformulier of van de control die het subformulier bevat?

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


Acties:
  • 0 Henk 'm!

  • BlauweFles
  • Registratie: Maart 2000
  • Niet online
Dat eerste, naam van het subformulier.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

...en dat is fout, want het subformulier is geen lid van het hoofdformulier maar een object in de control.

vergelijk:
Visual Basic:
1
2
3
4
5
6
7
8
me.controls("controlnaam").form
me.controls!controlnaam.form  

me!controlnaam.form '! bevraagt de standaardcollectie, d.i. bij forms de controlcollectie
me.controlnaam (strikt genomen fout, maar Access slikt het)

versus
me.anotherformnaam 'is fout en compileert niet


. vraagt een property of eigenschap
! vraagt een lid van een collectie

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


Acties:
  • 0 Henk 'm!

  • BlauweFles
  • Registratie: Maart 2000
  • Niet online
Thx, ik kom er wel verder mee op die manier.

Ik heb de code aangepast en nu krijg ik de melding die ik zou verwachten:

Microsoft Access can find the the field "FrmSubAgencies" referred to in your expression.

Dus hij heeft wel door dat ik naar hem zoek, maar ziet hem niet staan? Dus ik moet de subform nog ergens aanmaken?

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Lustucru schreef op donderdag 06 januari 2011 @ 23:41:
...en dat is fout, want het subformulier is geen lid van het hoofdformulier maar een object in de control.

vergelijk:
Visual Basic:
1
2
3
me!controlnaam.form 
versus
me.anotherformnaam 'is fout en compileert niet
Peewee schreef op vrijdag 07 januari 2011 @ 13:56:
Microsoft Access can find the the field "FrmSubAgencies" referred to in your expression.

Dus hij heeft wel door dat ik naar hem zoek, maar ziet hem niet staan? Dus ik moet de subform nog ergens aanmaken?
Visual Basic:
1
me!anotherformname

Is nog steeds dezelfde fout: je moet de naam van het control meegeven.

[ Voor 31% gewijzigd door Lustucru op 08-01-2011 01:32 ]

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


Acties:
  • 0 Henk 'm!

Verwijderd

laat je even weten of je met de tips van Lustrucu tot een oplossing gekomen bent?

je lijkt immers nog steeds het concept van een control in een form en een subform in een form te verwarren.
dus stel ik even een alternatief voor.
een subform kan niet rechtstreeks in een form geplaatst worden, je hebt steeds een mainform, vervolgens een 'container'control, en tenslotte de subform : mainform>containercontrol>subform

het alternatief bestaat eruit de subform rechtstreeks aan te spreken, zodat je niet hoeft te weten hoe de control noemt waarin de subform vervat zit.
je kan bovenstaand doen door rechtstreeks de 'typename' van de subform te gebruiken in de codemodule van de mainform : in de vbe staan deze typenamen namelijk opgelijst. je zoekt dus gewoon de typenaam van je subform : alt+f11 om naar de vbe te gaan, vervolgens klap je eventueel de lijst met forms open in de projectlijst (ctrl+r) > microsoft access klassenobjecten > Form_naamsubform
indien de mainform geladen is (zichtbaar is), kan je de subform rechtstreeks aanspreken via bovenstaande typenaam
Pagina: 1