Använda ADOX för att skapa en SQL-direktfråga i Access

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Måttlig: Kräver grundläggande makron, kodning och kompatibilitetsfärdigheter.

Den här artikeln gäller endast för Microsoft Access-databaser (.accdb och .mdb).

Sammanfattning

I den här artikeln beskrivs hur du skapar en SQL-direktfråga i Microsoft Visual Basic for Applications (VBA) med Microsoft ActiveX Data Objects (ADO).

Mer information

Du kan skriva en funktion i Visual Basic för program som skapar en SQL-direktfråga. En SQL-direktfråga består av ett SQL-uttryck och en anslutningssträng. När du kör frågan skickar den kommandon direkt till databasservern för bearbetning. Det här tar bort overheaden för Microsoft Jet-databasmotorn.

Med DAO-modellen (Data Access Object) kan du använda SQL-direktfrågor för att förbättra prestandan när du fick åtkomst till externa data. Med ADO kan du använda Microsoft OLE DB Provider för SQL Server för direkt åtkomst till en SQL Server utan overhead av Microsoft Jet eller ODBC. Du kan också använda Microsoft OLE DB-providern för ODBC för att komma åt data i alla ODBC-datakällor.

Även om du inte längre behöver skapa SQL-direktfrågor i Microsoft Jet-databasen för att förbättra prestandan kan du fortfarande göra det med hjälp av ADOX och Jet Provider. Följande kod visar hur du skapar en SQL-direktfråga.

Obs! Exempelkoden i den här artikeln använder både ADO och ActiveX Data Objects Extensions för ADOX (Data Definition Language and Security). För att den här koden ska köras korrekt måste du klicka på Referenser på menyn Verktyg i Visual Basic Editor och kontrollera att följande två referenser är markerade:

  • Microsoft ActiveX Data Objects 2.1-bibliotek
  • Microsoft ADO Ext. 2.6 för DDL och säkerhet

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supportexperter kan hjälpa till att förklara funktionerna i en viss procedur, men de kommer inte att ändra dessa exempel för att tillhandahålla extra funktioner eller konstruera procedurer för att uppfylla dina specifika behov. Så här skapar du en SQL-direktfråga i koden:

  1. Öppna northwind-exempeldatabasen.
  2. Skapa en ny modul och skriv eller klistra sedan in följande kod:
Function CreateSPT(SPTQueryName As String, strSQL As String)

Dim cat As ADOX.Catalog
  Dim cmd As ADODB.Command

Set cat = New ADOX.Catalog
  Set cmd = New ADODB.Command

cat.ActiveConnection = CurrentProject.Connection

Set cmd.ActiveConnection = cat.ActiveConnection

cmd.CommandText = strSQL
  cmd.Properties("Jet OLEDB:ODBC Pass-Through Statement") = True

'Modify the following connection string to reference an existing DSN for 
 'the sample SQL Server PUBS database.

cmd.Properties _
     ("Jet OLEDB:Pass Through Query Connect String") = _
       "ODBC;DSN=myDSN;database=pubs;UID=sa;PWD=;"
  cat.Procedures.Append SPTQueryName, cmd

Set cat = Nothing
  Set cmd = Nothing

End Function

  1. Om du vill testa den här funktionen skriver du följande rad i direktfönstret och trycker sedan på RETUR:

    ? CreateSPT("MySptQuery", "Select * from Authors")