Gaijin66
Gebruiker
- Lid geworden
- 25 aug 2007
- Berichten
- 37
Access QueryDef Object ongeldig of niet meer ingesteld.
Hallo Mensen,
Ik zit met een probleem waar ik niet uitkom. Ik ben een beginnende VBA programmeur. Ik zal de situatie uitleggen.
Ik wil een database ontwerpen waarin kaarten staan van het spel Magic 2014(c). In de "Cards" tabel staan de kenmerken van de verschillende kaarten. Ik heb een tabel "Decks" waarin een samenstelling van kaarten en kenmerken van het deck staan. Deze twee tabellen hebben een veel-op-veel relatie. Een deck kan veschillende kaarten bevatten en een kaart kan in verschillende decks voorkomen. Ik heb dus een tussentabel "DeckItems" gemaakt. De primaire sleutel DeckId van "Decks" is gerelateerd aan DeckId van "DeckItems". De primaire sleutel CardId van "Cards" heeft een relatie met CardId van "DeckItems". Ik heb een formulier "Decks" met subformulier "DeckItems". Bij de gebeurtenis "Bij activeren" heb ik de volgende VBA code staan:
Ik heb op het formulier "Decks" een Label "StatsLabel" staan. Ik wil hierop het aantal kaarten per deck gecategoriseerd op Card Type laten verschijnen. Ik heb hiervoor een klasse module clsDeckStats ontworpen waarin onder andere een get property CreautureCards. Deze heeft de volgende code:
De subroutine clsDeckStats.Initialize ziet er als volgt uit:
clsDeckStats.Show bevat de volgende code:
Als ik het formulier "Decks" open krijg ik de foutmelding: 3420 "Object ongeldig of niet meer ingesteld". Ik gebruik trouwens Access 2007. Wat doe ik fout en wie wil mij helpen? Bij voorbaat dank.
Hallo Mensen,
Ik zit met een probleem waar ik niet uitkom. Ik ben een beginnende VBA programmeur. Ik zal de situatie uitleggen.
Ik wil een database ontwerpen waarin kaarten staan van het spel Magic 2014(c). In de "Cards" tabel staan de kenmerken van de verschillende kaarten. Ik heb een tabel "Decks" waarin een samenstelling van kaarten en kenmerken van het deck staan. Deze twee tabellen hebben een veel-op-veel relatie. Een deck kan veschillende kaarten bevatten en een kaart kan in verschillende decks voorkomen. Ik heb dus een tussentabel "DeckItems" gemaakt. De primaire sleutel DeckId van "Decks" is gerelateerd aan DeckId van "DeckItems". De primaire sleutel CardId van "Cards" heeft een relatie met CardId van "DeckItems". Ik heb een formulier "Decks" met subformulier "DeckItems". Bij de gebeurtenis "Bij activeren" heb ik de volgende VBA code staan:
Code:
Private Sub Form_Activate()
Dim DeckStats As clsDeckStats
Dim LabelContents As String
Set DeckStats = New clsDeckStats
LabelContents = Me![StatsLabel].Caption
DeckStats.Show LabelContents
Set DeckStats = Nothing
End Sub
Ik heb op het formulier "Decks" een Label "StatsLabel" staan. Ik wil hierop het aantal kaarten per deck gecategoriseerd op Card Type laten verschijnen. Ik heb hiervoor een klasse module clsDeckStats ontworpen waarin onder andere een get property CreautureCards. Deze heeft de volgende code:
Code:
Public Property Get CreatureCards() As Integer
Dim MagicDatabase As DAO.Database
Dim qryDeckStats As DAO.QueryDef
Dim QueryResults As DAO.Recordset
Dim SQlStatement As String
Dim Counter As Integer
'Connect to Magic 2014 database
Set MagicDatabase = CurrentDb
'SQL Statement for searching for number of creatures of current deck
SQlStatement = "SELECT DeckItems.DeckItemId, DeckItems.DeckId, DeckItems.CardId, DeckItems.Qty, Cards.[Card Type] " & _
"FROM Cards INNER JOIN DeckItems ON Cards.CardId = DeckItems.CardId " & _
"WHERE DeckId = " & Str(Forms![Decks].CurrentRecord) & " AND Cards.[Card Type].Value = ""Creature"""
With MagicDatabase
'Create Query and open it to look for creature cards and count it.
Set qryDeckStats = .CreateQueryDef("DeckStatsQuery", SQlStatement)
Set QueryResults = .OpenRecordset("DeckStatsQuery", dbOpenSnapshot)
QueryResults.MoveFirst
For Counter = 1 To QueryResults.EOF
Creatures = Creatures + QueryResults.Fields("Qty")
QueryResults.MoveNext
Next
.Close
qryDeckStats.Close
.QueryDefs.Delete qryDeckStats.Name
Debug.Print Creatures
CreatureCards = Creatures
End With
End Property
De subroutine clsDeckStats.Initialize ziet er als volgt uit:
Code:
Private Sub DeckStats_Initialize()
Dim MagicDatabase As DAO.Database
Dim qryDeckStats As DAO.QueryDef
Creatures = 0
Sorceries = 0
Instants = 0
Enchantments = 0
Artifacts = 0
Lands = 0
Total = 0
Set MagicDatabase = CurrentDb
'Delete existing query
MagicDatabase.QueryDefs.Delete qryDeckStats.Name
End Sub
clsDeckStats.Show bevat de volgende code:
Code:
Public Sub Show(ByRef StatsView As String)
StatsView = "Stats:" & vbCrLf & vbCrLf & _
"Creature Cards:" & vbTab & vbTab & Str(CreatureCards) & vbCrLf & _
"Sorcery Cards:" & vbTab & vbTab & Str(SorceryCards) & vbCrLf & _
"Instant Cards:" & vbTab & vbTab & Str(InstantCards) & vbCrLf & _
"Enchantment Cards:" & vbTab & Str(EnchantmentCards) & vbCrLf & _
"Artifact Cards:" & vbTab & vbTab & Str(ArtifactCards) & vbCrLf & _
"Land Cards:" & vbTab & vbTab & vbTab & Str(LandCards) & vbCrLf & _
"Other Cards:" & vbTab & vbTab & Str(OtherCards) & vbCrLf & _
"Cards:" & vbTab & vbTab & vbTab & vbTab & Str(TotalCards) & vbCrLf
Debug.Print StatsView
End Sub
Als ik het formulier "Decks" open krijg ik de foutmelding: 3420 "Object ongeldig of niet meer ingesteld". Ik gebruik trouwens Access 2007. Wat doe ik fout en wie wil mij helpen? Bij voorbaat dank.
Laatst bewerkt: