query gebruiken of tabel aanmaken?

  • Onderwerp starter Onderwerp starter ivdh
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

ivdh

Gebruiker
Lid geworden
2 jun 2004
Berichten
54
Ik heb een database waarin gebruikers zelf een selectie kunnen maken. Ik maak dan een tabel met de geselecteerde gegevens en deze wordt vervolgens getoond. Door het aanmaken (en verwijderen) van deze tabellen groeit de mdb nogal.

Is het ook mogelijk om via een SQLopdracht een (tijdelijke) query aan te maken? En neemt die dan minder ruimte in beslag?
 
Gebruik altijd een query. Een query kost bijna geen ruimte om op te slaan.
Je kunt ook een SQL statement op de Recordbron propertie van het formulier plaatsen, dan hoef je het SQL statement zelfs niet als query op te slaan.

Het aanmaken en verwijderen van tijdelijke tabellen kost inderdaad veel ruimte en helpt ook de performance van je toepassing om zeep.
 
Da's duidelijk, maar mijn volgende vraag is dan "hoe maak je een query aan". Ik kan wel met een SQL opdracht via VBA een "query" maken, maar ik wil ook daadwerkelijk een query in het tabblad query's zien vervolgens. Ik wil de gegevens namelijk naar Word/Excel kunnen laten exporteren.
 
Uit de MS Access help files:

Sub CreateQueryDefX()

Dim dbsNorthwind As Database
Dim qdfTemp As QueryDef
Dim qdfNew As QueryDef

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind
' Create temporary QueryDef.
Set qdfTemp = .CreateQueryDef("", _
"SELECT * FROM Employees")
' Open Recordset and print report.
GetrstTemp qdfTemp
' Create permanent QueryDef.
Set qdfNew = .CreateQueryDef("NewQueryDef", _
"SELECT * FROM Categories")
' Open Recordset and print report.
GetrstTemp qdfNew
' Delete new QueryDef because this is a demonstration.
.QueryDefs.Delete qdfNew.Name
.Close
End With

End Sub

Function GetrstTemp(qdfTemp As QueryDef)

Dim rstTemp As Recordset

With qdfTemp
Debug.Print .Name
Debug.Print " " & .SQL
' Open Recordset from QueryDef.
Set rstTemp = .OpenRecordset(dbOpenSnapshot)

With rstTemp
' Populate Recordset and print number of records.
.MoveLast
Debug.Print " Number of records = " & _
.RecordCount
Debug.Print
.Close
End With

End With

End Function
 
dit heb ik geprobeerd en ik krijg nu het aantal records in beeld. Ik heb van debug.print msgbox gemaakt want anders gebeurde er niets.

Ik vond ook nog deze:
Sub NieuweQuery()
Dim dbs As Database, qdf As QueryDef, strSQL As String

' Database-variabele instellen die naar de huidige database verwijst.
Set dbs = CurrentDb
strSQL = "SELECT * FROM BRS"

' Nieuwe query maken.
Set qdf = dbs.CreateQueryDef("TEST", strSQL)
DoCmd.OpenQuery qdf.Name
Set dbs = Nothing
End Sub

Maar dan krijg ik als melding:
fout 7874, kan het object "TEST" niet vinden.
Als ik naar het tabblad Query ga zie ik wel een query met als naam TEST staan en kan ik deze ook openen.
 
Debug.Print doet het wel hoor, die zet de gegevens in het "Venster Direct" (kun je activeren vanuit het menu Beeld).
Bij mij doet de door jou geposte code het wel.
Waarschijnlijk was access gewoon nog niet klaar met het maken van de query en werd de OpenQuery methode toen al uitgevoerd.
Dat kun je ondervangen door het commande DoEvents voor de regel
DoCmd.OpenQuery qdf.Name
uit te voeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan