Tietueen etsiminen ADO:n ja Jet OLE DB:n avulla

Huomautus

Office 365 ProPlus nimetään uudelleen Microsoft 365 Apps for enterprise -sovellukseksi. Lisätietoja tästä muutoksesta on tässä blogikirjoituksessa.

Lisäasetukset: Edellyttää asiantuntijakoodausta, yhteentoimivuutta ja yhteiskäyttötaitoja.

Tämä artikkeli koskee Microsoft Access -tietokantatiedostoa (.mdb) tai Microsoft Access -tietokantatiedostoa (.accdb).

Yhteenveto

Tässä artikkelissa esitellään, miten voit käyttää ActiveX Data Objects (ADO) - ja OLE DB -objekteja microsoft Jet -tietokannan tietueiden etsimiseen.

Lisätietoja

Seuraavassa on kaksi esimerkkimenettelyä. Ensimmäinen CreateJetDB luo uuden Microsoft Jet -tietokannan C-aseman päähakemistoon ja täyttää siihen tiedot. Toisessa, CursorLocationTimed-menetelmässä havainnollistetaan Etsi-menetelmän käyttöä palvelinpuolen kohdistimella ja asiakaspuolen kohdistimella.

Voit luoda nämä toimenpiteet seuraavasti:

  1. Luo uusi Microsoft Access -tietokanta.

  2. Luo uusi moduuli.

  3. Valitse Työkalut-valikossa Viittaukset ja varmista, että seuraavat viittaukset ovat valittuina:

    Microsoft ActiveX Data Objects 2.1 -kirjasto tai uudempi versio

    Microsoft ADO Ext. 2.1 DDL:lle ja tietoturvalle tai uudemmalle versiolle

  4. Kirjoita tai liitä seuraavat toimenpiteet:

Sub CreateJetDB()

Dim cat As ADOX.Catalog
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim numrecords As Long
   Dim i As Long

Set cat = New ADOX.Catalog
   Set cn = New ADODB.Connection
   Set rs = New ADODB.Recordset

' Number of sample records to create
   numrecords = 250000

On Error Resume Next

'Delete the sample database if it already exists.
   'Change "findseek.mdb" to "findseek.accdb" for Access 2007.
   'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 
   'Access 2007 ACCDB databases.
   Kill "c:\findseek.mdb"
   On Error GoTo 0

' Create a new Jet 4.0 database name findseek.mdb
   'Change "findseek.mdb" to "findseek.accdb" for Access 2007.
   'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 
 'Access 2007 ACCDB databases.

cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
   "Data Source=c:\findseek.mdb"

' Set the provider, open the database,
   'and create a new table called tblSequential.
   'Change "findseek.mdb" to "findseek.accdb" for Access 2007.
   'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 
   'Access 2007 ACCDB databases.

cn.Provider = "Microsoft.Jet.OLEDB.4.0"
   cn.Open "Data Source=c:\findseek.mdb"
   cn.Execute "CREATE TABLE tblSequential (col1 long, col2 text(75));"

'Open the new table.
   rs.Open "tblSequential", cn, adOpenDynamic, _
   adLockOptimistic, adCmdTableDirect

' Add sample records to the tblSequential table.
   For i = 0 To numrecords
      rs.AddNew
      rs.Fields("col1").Value = i
      rs.Fields("col2").Value = "value_" & i
      rs.Update
      Next i
   rs.Close

'Create a multifield Index on col1 and col2.
   cn.Execute "CREATE INDEX idxSeqInt on tblSequential (col1, col2);"

'Close the connection
   cn.Close

End Sub

Sub CursorLocationTimed()

Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim i, j As Long
   Dim time As Variant

Set cn = New ADODB.Connection
   Set rs = New ADODB.Recordset

On Error GoTo ErrHandler

'Change "findseek.mdb" to "findseek.accdb" for Access 2007.
   'Change the Provider to "Microsoft.ACE.OLEDB.12.0" for 
   'Access 2007 ACCDB databases.
   cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
   &  "Data Source=c:\findseek.mdb"

' Specify how ADO should open the recordset:
   ' adUseServer - use the native provider to perform cursor
   ' operations
   ' adUseClient - use the client cursor engine in ADO
   ' NOTE: adUseServer more closely resembles DAO

' Time opening a recordset and doing 1000 finds (Server cursor
   ' engine)
   '
   rs.CursorLocation = adUseServer
   time = Timer

' Open the recordset and perform serveral Finds to locate records.
   ' Using the adCmdTableDirect opens a base table against Jet, which
   ' is generally the fastest, most functional way to access tables.

rs.Open "tblSequential", cn, adOpenDynamic, adLockOptimistic, _
   adCmdTableDirect

For i = 0 To 1000
      rs.Find "col1=" & i
   Next i

Debug.Print "Sequential Find + Open (Server) = " & Timer - time
   rs.Close

' Time opening a recordset and doing 1000 finds (Client cursor
   ' engine)

rs.CursorLocation = adUseClient
   time = Timer

rs.Open "tblSequential", cn, adOpenDynamic, _
   adLockOptimistic, adCmdTableDirect

For i = 0 To 1000
      rs.Find "col1=" & i
   Next i

Debug.Print "Sequential Find + Open (Client) = " & Timer - time
   rs.Close

Exit Sub

ErrHandler:

For j = 0 To cn.Errors.Count - 1
      Debug.Print "Conn Err Num : "; cn.Errors(j).Number
      Debug.Print "Conn Err Desc: "; cn.Errors(j).Description
   Next j

Resume Next

End Sub

  1. Jos haluat luoda mallitietokannan, kirjoita seuraava rivi Välitön-ikkunaan ja paina sitten ENTER-näppäintä:

    CreateJetDB
    
    
  2. Voit esitellä Etsi-menetelmän kirjoittamalla seuraavan rivin Välittömään toimitusikkunaan ja painamalla sitten ENTER-näppäintä:

    CursorLocationTimed
    
    

    Tulos pitäisi olla seuraavan laista:

    Peräkkäinen Etsi + Avaa (Palvelin) = 0,28125

    Peräkkäinen Etsi + Avaa (asiakas) = 5,28125

    HUOMAUTUS Tuloksena saatavat luvut saattavat poiketa tietokoneesta toiseen.

Lisätietoja

Lisätietoja ActiveX-tietoobjekteista on kohdassa Microsoft ActiveX Data Objects (ADO).