Ringer en sql-forespørsel fra vba-tilgangskoden. Generering av en SQL-spørringsstreng i VBA. Databasespørringer INSERT, UPDATE, DELETE i VBA

Adgang lagret en spørring utviklet ved hjelp av en spørringsbygger kalt "myQuery". Databasen er koblet til systemet via en ODBC-tilkobling. Makroer er alle inkludert.

utmerke har en ADODB-tilkobling for å koble til databasen via

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Åpne "MyDatabase.accdb" Avslutt med

Vanligvis går du videre og skriver SQL-en din, noe som er helt greit, og så gjør du noe sånt som

Dim sqlQuery As String sqlQuery = "SELECT * FROM myTable" Sett rs = New ADODB.Recordset rs.Open sqlQuery, con, ...

Men jeg vil ha tilgang til spørringen som jeg har lagret i tilgangsdatabasen. Så hvordan kan jeg ringe en lagret spørring på databasen jeg nettopp koblet til.

Har allerede prøvd det

  1. con.Execute("EXEC myQuery") men den ene fortalte meg at den ikke kunne finne myQuery.
  2. rs.Åpne "myQuery", con men denne er ugyldig og vil ha SELECT /etc-setninger fra den
vba excel-vba ms-access-2007 adodb excel

5 svar


6

Jeg tror du kan tenke på det som en lagret prosedyre.

Hvis vi starter rett før Dim sqlQuery As String

Dim cmd som ny ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Sett rs = cmd.Execute()

Ta så rekordjobben etter det.


1

Du var nesten der:

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Åpne "z:\docs\MyDatabase.accdb" Avslutt med con.Execute "MyQuery"

Bare la Exec stå til side.

Du kan også legge til parametere, dette er litt utdatert, men burde hjelpe:


0

Det er et slags hack, men du kan be om det. Det vil si, bytt ut sql-linjen med følgende:

SqlQuery = "SELECT * FROM QueryName;"

Før du kjører dette programmet, må du sørge for at databasen Få tilgang til data ble reddet dvs. trykk Ctrl+S (det er ikke nok at spørringen kjøres i Access).


0

Jeg var i stand til å kjøre en oppdateringsspørring som allerede var lagret i Access ved å bruke:

Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

Dette ga meg feil inntil jeg erstattet mellomrom i spørringsnavnet med understrekinger i både Access-databasen og execute-setningen.


0

Det er lenge siden denne tråden ble opprettet. Hvis jeg forstår alt riktig, kan jeg legge til noe nyttig. Jeg har gitt et navn til det OP'en beskriver, som er prosessen med å bruke SQL fra en spørring lagret i ACCDB for å kjøres i VBA via DAO eller ADOBD. Jeg ga den navnet "objekteiendomsleverandør", selv med akronymet OPP i notatene mine, og et prefiks/suffiks for objektnavnet.

Tanken er at et eksisterende objekt i ACCDB (vanligvis en spørring) avslører en egenskap (vanligvis SQL) som må brukes i VBA. Jeg satt sammen en funksjon bare for å suge SQL ut av spørringene for dette; se nedenfor. Advarsel: Beklager, men alt dette er i DAO, jeg bruker ikke ADODB mye. Jeg håper du fortsatt finner disse ideene nyttige.

Jeg gikk til og med så langt som å utvikle en metode for å bruke/sette inn utskiftbare parametere i SQL som kommer fra disse OPP-spørringene. Deretter bruker jeg VBA.Replace() for å gjøre erstatningen før jeg bruker SQL i VBA.

DAO-objektbanen til SQL-spørringen i ACCDB er som følger:

MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

Jeg bruker utskiftbare parametere ved å vurdere hva som må erstattes og velge et uvanlig navn for parameteren som kanskje ikke finnes i den virkelige databasen. For det meste er de eneste erstatningene jeg har gjort felt- eller tabellnavn eller WHERE og HAVING-klausuluttrykk. Så jeg kaller dem ting som "(ReplaceMe00000001)" og bruker deretter Replace()-funksjonen for å gjøre jobben...

SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter") ...

og bruk deretter sqlText i VBA. Her er et fungerende eksempel:

Offentlig funksjon MySqlThing() Dim sqlText as String Dim myParamater as String Dim myExpression as String "Sett alt opp. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "Some10127Eller" . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Bruk deretter SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.ApO. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Set app = Access.Application Set db = app.CurrentDb Set qdefs = db.QueryDefs Set qdef = qdefs(oppName) oppGetSqlText = Q End Function.


Kjør en spørring i Access MakeTable fra Excel

Jeg har en Excel-fil som jeg må automatisere. Når en bruker åpner en Excel-rapport, vil de bli bedt om å oppdatere dataene. Hvis de sier ja, må jeg kjøre spørringen...


Utfør VBA-funksjonen via visningsspørring i MS Access 2013 fra JS ActiveX ADO

Hvordan kjører jeg en VBA-makro via visningsspørring i MS Access 2013 fra JS ActiveX ADO? VBA funksjon ment å motta nåværende bruker, logget på med: Public Declare...


Utfør lagret spørring som inneholder "funksjon" i access db fra excel

Jeg prøver å kjøre en spørring lagret i en tilgangsdatabase fra excel vba. Spørringen fungerer fint hvis jeg åpner og kjører den i tilgangsdatabasen, men gir en feilmelding når jeg kjører den fra en modul...


MS Access - Utfør lagret spørring etter navn i VBA

Hvordan utføre en lagret spørring i MS Access 2007 i VBA? Jeg vil ikke kopiere og lime inn SQL i VBA. Jeg vil heller bare utføre forespørselsnavnet. Dette vil ikke fungere... VBA finner ikke søket....


Hvordan utføre en forespørsel i ms-access i VBA-kode?

Hvordan kan jeg kjøre en spørring for å returnere poster i databasen ms-tilgangsdata bruker VBA-kode?


Kjør en tilgangsforespørsel fra excel og send dens parametere

Hvordan kjøre en spørring i MS Access db fra Excel VBA-kode eller makro. MS-Access-forespørselen godtar noen parametere som må sendes fra Excel. Takk skal du ha


Administrere en Excel-arbeidsbok fra Access 2010 VBA

Jeg har en situasjon som ligner veldig på følgende innlegg: Be om tilgang til excel 2010 for å lage en graf via vba I mitt tilfelle eksporterer jeg en tabell, men jeg vil gjøre mye mer med filen...


Utfør SQL Server Pass-Through Query fra Access VBA

Jeg har et UPDATE-gjennomgangsspørsmål lagret i Access 2007. Når jeg dobbeltklikker på pass-through-spørringen, utføres den vellykket. Hvordan kan jeg få denne spørringen til å bli utført fra VBA? Jeg ville...


Importerer et stort datasett til Access fra Excel via VBA

Jeg har et stort datasett som jeg trenger å importere fra Excel til Access (~800k rader). Jeg kan imidlertid ignorere rader med en spesifikk kolonneverdi som er som 90 % ...


Noen MDX-spørringer i Excel vba?

er det en måte å utføre en MDX-spørring i Excel VBA? Jeg trodde dette kunne gjøres via ADO, akkurat som med SQL (ja, jeg vet at SQL er forskjellig fra MDX - et problem som mange ganger...

Access lagret en spørring som ble utviklet ved hjelp av myQuery-spørringsbyggeren. Databasen er koblet til systemet via en ODBC-tilkobling. Alle makroer er inkludert.

Excel Har opprettet en ADODB-forbindelse for å koble til databasen via

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Åpne "MyDatabase.accdb" Avslutt med

Vanligvis skriver du bare din SQL, som fungerer utmerket, og så gjør du noe sånt som

Dim sqlQuery As String sqlQuery = "SELECT * FROM myTable" Sett rs = New ADODB.Recordset rs.Open sqlQuery, con, ...

Men jeg vil ha tilgang til spørringen som jeg har lagret i tilgangsdatabasen. Så hvordan kaller jeg en lagret spørring på databasen jeg nettopp koblet til.

Jeg har allerede prøvd det

  1. con.Execute("EXEC myQuery"), men det fortalte meg at myQuery ikke ble funnet.
  2. rs.Åpne "myQuery", men den er ugyldig og krever SELECT/etc-setninger fra den

5 svar

Jeg tror du kan tenke på dette som en lagret prosedyre.

Hvis vi starter rett før Dim sqlQuery As String

Dim cmd som ny ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Sett rs = cmd.Execute()

Ta deretter opp arbeidet ditt med rekordsettet etter det.

Du var nesten der

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = New ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Åpne "z:\docs\MyDatabase.accdb" Avslutt med con.Execute "MyQuery"

Bare forlat Exec.

Du kan også legge til parametere, dette er litt utdatert men burde hjelpe: Oppdater 2 felt i en Access-database med Excel-data og kanskje en makro

Jeg var i stand til å kjøre en oppdateringsspørring som allerede var lagret i Access ved å bruke:

Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

Dette ga meg feil inntil jeg erstattet mellomrom i spørringsnavnet med understrekinger i både Access-databasen og execute-setningen.

Det er en slags hack-jobb, men du kan be om en forespørsel. Det vil si, bytt ut SQL-linjen med følgende:

SqlQuery = "SELECT * FROM QueryName;"

Før du starter må du forsikre deg om at Access-databasen er lagret, dvs. trykk Ctrl + S (det er ikke nok for at spørringen skal utføres i Access).

Det er lenge siden dette emnet ble opprettet. Hvis jeg forstår det riktig, kan jeg kanskje legge til noe nyttig. Jeg har gitt et navn til det OP'en beskriver: dette er prosessen med å bruke SQL fra en spørring lagret i ACCDB for å kjøres i VBA via DAO eller ADOBD. Jeg kalte det "Object Property Provider", selv med akronymet OPP i notatene mine og for objektnavnet prefiks/suffiks.

Tanken er at et eksisterende objekt i ACCDB (vanligvis en spørring) avslører en egenskap (vanligvis SQL) som må brukes i VBA. Jeg har satt sammen en funksjon bare for å suge SQL-en ut av spørringene for dette; Se nedenfor. Advarsel: Beklager, men alt dette er i DAO, jeg bruker ikke ADODB mye. Jeg håper du fortsatt finner ideene nyttige.

Jeg gikk til og med så langt som å utvikle en metode for å bruke/sette inn utskiftbare parametere i SQL som kommer fra disse OPP-spørringene. Deretter bruker jeg VBA.Replace() for å gjøre erstatningen før jeg bruker SQL i VBA.

DAO-objektbanen til SQL-spørringen i ACCDB er som følger:

MySqlStatement = Access.Application.CurrentDb.QueryDefs("myQueryName").SQL

Jeg bruker utskiftbare parametere ved å vurdere hva som må erstattes og velge et uvanlig navn for parameteren som kanskje ikke finnes i selve databasen. For det meste er de eneste erstatningene jeg har gjort felt- eller tabellnavn eller WHERE og HAVING-klausuluttrykk. Så jeg kaller dem ting som "(ReplaceMe00000001)" og bruker deretter Replace()-funksjonen for å gjøre jobben...

SqlText = VBA.Replace(sqlText, "(ReplaceMe00000001)", "SomeActualParameter")

Og bruk deretter sqlText i VBA. Her er et fungerende eksempel:

Offentlig funksjon MySqlThing() Dim sqlText as String Dim myParamater as String Dim myExpression as String "Sett alt opp. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "Some10127Eller" . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Bruk deretter SQL. db.Execute sqlText, dbFailOnError End Function Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.ApO. As DAO.QueryDefs Dim qdef As DAO.QueryDef Dim sqlText As String Set app = Access.Application Set db = app.CurrentDb Set qdefs = db.QueryDefs Set qdef = qdefs(oppName) oppGetSqlText = Q End Function.

Denne leksjonen er dedikert til SQL-spørringer til databasen på VBA-tilgang. Vi skal se på hvordan INSERT, UPDATE, DELETE-spørringer lages til databasen i VBA, og vi vil også lære hvordan du får en spesifikk verdi fra en SELECT-spørring.

De som programmerer VBA-tilgang og mens du arbeider med basen SQL-data servere står veldig ofte overfor en så enkel og nødvendig oppgave som å sende en SQL-spørring til en database, enten det er INSERT, UPDATE eller en enkel SQL SELECT-spørring. Og siden vi er nybegynnere programmerere, bør vi også kunne gjøre dette, så i dag skal vi gjøre nettopp det.

Vi har allerede vært inne på temaet innhenting av data fra SQL server, hvor de skrev kode i VBA for å få tak i disse dataene, for eksempel i artikkelen om Opplasting av data til en tekstfil fra MSSql 2008 eller også berørt det litt i materialet Laste opp data fra Access til en Word- og Excel-mal, men på en eller annen måte så vi på det overfladisk, og i dag foreslår jeg å snakke om dette litt mer detaljert.

Merk! Alle eksemplene nedenfor vurderes å bruke Access 2003 ADP-prosjektet og MSSql 2008-databasen Hvis du ikke vet hva et ADP-prosjekt er, så vi på dette i materialet Hvordan opprette og konfigurere et Access ADP-prosjekt.

Kildedata for eksempler

La oss si at vi har en tabell test_table, som vil inneholde tallene og navnene på månedene i året (spørringer utføres ved å bruke Management Studio)

LAG TABELL .( IKKE NULL, (50) NULL) PÅ GÅ

Som jeg allerede har sagt, vil vi bruke et ADP-prosjekt konfigurert til å fungere med MS SQL 2008, der jeg opprettet et testskjema og la til en startknapp med en signatur "Løpe", som vi trenger for å teste koden vår, dvs. Vi vil skrive all koden i hendelsesbehandleren " Knappetrykk».

Databasespørringer INSERT, UPDATE, DELETE i VBA

For ikke å utsette for lenge, la oss komme i gang med en gang, la oss si at vi må legge til en rad i testtabellen vår ( kode kommentert)/

Private Sub start_Click() "Erklære en variabel for å lagre spørringsstrengen Dim sql_query As String "Skriv spørringen vi trenger inn i den sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "juni")" "Utfør it DoCmd RunSQL sql_query End Sub

I dette tilfellet utføres spørringen ved å bruke gjeldende databasetilkoblingsparametere. Vi kan sjekke om dataene er lagt til eller ikke.

Som du kan se, er dataene lagt inn.

For å slette en linje skriver vi følgende kode.

Private Sub start_Click() "Erklære en variabel for å lagre spørringsstrengen Dim sql_query As String "Skriv en slettespørring inn i den sql_query = "DELETE test_table WHERE id = 6" "Kjør den DoCmd.RunSQL sql_query End Sub

Hvis vi sjekker, vil vi se det nødvendig linje venstre.

For å oppdatere dataene, skriv oppdateringsforespørselen til sql_query-variabelen, jeg håper meningen er klar.

SELECT-spørring til en database i VBA

Her er ting litt mer interessant enn med andre SQL-konstruksjoner.

Først, la oss si at vi trenger å hente alle dataene fra tabellen, og for eksempel vil vi behandle dem og vise dem i en melding, og du kan selvfølgelig bruke den til andre formål, for dette skriver vi følgende kode

Private Sub start_Click() "Erklære variabler "For et sett med poster fra databasen Dim RS As ADODB.Recordset "Query string Dim sql_query As String "String for å vise de endelige dataene i meldingen Dim str As String "Opprett et nytt objekt for records set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Kjør spørringen med gjeldende RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Ikke løkke gjennom postene mens (RS.EOF) "Fyll variabelen for å vise meldingen str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "gå til neste post RS.MoveNext Wend "Skriv ut meldingen msgbox str End Sub

Her bruker vi allerede VBA Access-løkker for å iterere gjennom alle verdiene i rekordsettet vårt.

Men ganske ofte er det nødvendig å ikke hente alle verdier fra et sett med poster, men bare én, for eksempel månedens navn etter koden. Og for å gjøre dette er det på en eller annen måte dyrt å bruke en løkke, så vi kan ganske enkelt skrive en spørring som vil returnere bare én verdi og få tilgang til den, for eksempel får vi månedens navn ved å bruke kode 5

Private Sub start_Click() "Declare variables" For et sett med poster fra databasen Dim RS As ADODB.Recordset "Query string Dim sql_query As String "String for å vise den endelige verdien Dim str As String "Opprett et nytt objekt for postsett RS = Nytt ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Kjør spørringen ved å bruke gjeldende RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Få vår verdi str = RS. Fields(0) msgbox str End Sub

For universalitet, her har vi allerede adressert ikke med cellenavnet, men ved dets indeks, dvs. 0, og dette er den aller første verdien i Rekordsett, til slutt fikk vi verdien "Kan".

Som du kan se, er alt ganske enkelt. Hvis du ofte trenger å hente en bestemt verdi fra databasen ( som i siste eksempel), så anbefaler jeg å sende ut all koden til en egen funksjon (Hvordan skrive en funksjon i VBA Access 2003) med én inngangsparameter, for eksempel månedskoden ( hvis vi ser på vårt eksempel) og ganske enkelt, der det er nødvendig å vise denne verdien, ring funksjonen vi trenger med den nødvendige parameteren, og det er det, ved å gjøre dette vil vi redusere VBA-koden betydelig og forbedre oppfatningen av programmet vårt.

Det var alt for i dag. Lykke til!

Access lar deg programmatisk lage strenger med SQL-spørringer, samt strenger som fungerer som verdier for egenskaper for skjemaer, rapporter osv., funksjonsparametere osv., som også må samsvare SQL-syntaks. Samtidig må vi huske at konstantene som inngår i en slik linje også må formateres etter SQL-regler, nemlig:

  • i tall må desimalskilletegnet være et punkt,
  • strenger må være omsluttet av anførselstegn eller apostrof (og henholdsvis anførselstegn eller apostrof er doblet inne i strengen),
  • Datoer må vedlegges i hash-tegn og skrives i amerikansk format (mm/dd/åååå) med en skråstrek som skilletegn.

    Hvis dette brytes, er følgende effekter mulig:

  • et tall som 10,5 med komma i stedet for en prikk vil bli oppfattet som en liste med to tall 10 og 5, noe som vil føre til en slags uoverensstemmelse i antall felt,
  • en streng som Vasya uten anførselstegn og apostrof vil bli oppfattet som navnet på et felt, hvis et slikt felt eksisterer, eller som navnet på en parameter som umiddelbart vil bli bedt om,
  • en dato som 1/2/2010 eller 1/2/2010 uten hash-tegn vil bli behandlet som et aritmetisk uttrykk (med henholdsvis divisjon og subtraksjon),
  • en dato som 1.2.2010 vil bli tolket som et brøktall med to desimaler og vil resultere i en feil,
  • en dato med hash-merker, men ikke i amerikansk format, vil bli oppfattet som en dato, men annerledes (dagen og måneden vil bli omorganisert).

    Nedenfor i hver seksjon er et eksempel på SQL-strengen som skal produseres når programvareoppretting og deretter VBA-koden som oppretter den. Nedenfor er en veldig nyttig anbefaling.

    1. Bruke tall

    VELG * FRA tabell HVOR (((tabell .Antall)= 12 .197 ));
    VBA v1

    Dim q Som Enkel q = 12 .197 strSQL = "VELG * " _ & "FRA tabell " _ & "HVOR (((Table.Quanty)=" & q & "));"
    VBA v2

    Dim q As String q = "12,197" strSQL = "VELG * " _ & "FRA tabell " _ & "HVOR (((Table.Quanty)=" & Str (q) & "));"
    Merk:

  • VBA v1- for heltall. For brøktall er dette et spesielt tilfelle bare når systemseparatoren er en prikk.
  • VBA v2- et mer riktig alternativ, fordi i klassisk programmering kan bare strenger settes sammen med strenger, mens VBA v1 bruker implisitt typekonvertering, selv om det ikke var noen klager på denne metoden for heltall. (Eksemplet er gitt når systemskilletegnet er et komma.)
  • Noen ganger brukes CStr()-funksjonen også for konvertering, men den er ikke alltid aktuelt, fordi returnerer et tall som en streng, der det skrives gjennom systemskilletegnet, mens SQL godtar bare et punktum som skilletegn.
  • NB! Når du bruker atypiske systemseparatorer, kan det hende at eksemplene ovenfor ikke fungerer i disse tilfellene, du må programmessig erstatte systemseparatoren med en prikk. Nedenfor er en funksjon som returnerer systemskilletegnet.
    Funksjon GetDecimalSeparator() Som streng GetDecimalSeparator = Format ( 0 #, "." ) Sluttfunksjon. Vær også oppmerksom på at noen standard tilgangshandlinger kanskje ikke fungerer i dette tilfellet.

    2. Bruke strenger

    SELECT * FROM Table WHERE (((Table .Name)="Alle" ));
    VBA v1

    Dim q As String q = "Alle" strSQL = "VELG * " _ & "FRA tabell " _ & "HVOR (((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
    VBA v2

    Dim q As String q = "Alle" strSQL = "VELG * " _ & "FRA tabell" _ & "WHERE (((Table.Quanty)="" & DoubleApostrophe(q) & "" ));"
    Merk:

  • VBA v1: DoubleQuote() - funksjon som dobler sitater.

    Eksempel:
    prøvetakingstilstand:
    a"a"s SQL:
    WHERE field=" en""a"s"VBA:
    strHvor = " WHERE field=""" & "en""""a"s" & """ "

  • VBA v2:: DoubleApostrophe() - funksjon som dobler apostrof.

    Eksempel:
    prøvetakingstilstand:
    a"a"s SQL:
    WHERE field=" a"a""s"VBA:
    strHvor = " WHERE field="" & "en""a""s" & "" "

  • DoubleQuote- og DoubleApostrophe-funksjonene nevnt ovenfor er IKKE innebygde Access-funksjoner, men brukerdefinerte funksjoner hvis implementering er overlatt til programmererens skjønn. Spesielt i Access-versjoner 2000 og høyere kan du bruke den innebygde Replace-funksjonen til dette formålet, og i 97 og lavere kan du bruke denne funksjonen:

    Public Function Replace97(StrMain As String , StrFind As String , StrZam As String ) As String On Error GoTo err Dim pos As Long If StrFind = "" Then GoTo err If StrMain = "" Then Replace97 = StrZam: Exit Function Do Until InStr( 1 , StrMain, StrFind) = 0 pos = InStr( 1 , StrMain, StrFind) StrMain = mid (StrMain, 1 , pos - 1 ) & StrZam & mid (StrMain, pos + Len(StrFind), Len(StrMain)) Loop Replace97 = StrMain Exit Function err: Replace97 = StrMain End Function
    3. Bruk av datoer

    VELG * FRA tabell HVOR (((tabell .TimeOpen)=# 3 /31 /2003 11 :17 :19 #));
    VBA

    Dim q Som Dato q = Nå strSQL = "VELG * " _ & "FRA tabell" _ & "HVOR (((Table.TimeOpen)=#" & Format (q, "mm\/dd\/åå tt\:mm \:ss" ) & "#));"
    Merk:

  • Microsoft JET SQL opererer med datoer i amerikansk format, dvs. nøyaktig i skjemaet ovenfor Måned/Dag/År.
  • Ikke slipp #-tegnene (det omslutter hele datetime-konstanten) og \ (det forhindrer / og : fra å bli erstattet av lokalinnstillinger, som er hva Format-funksjonen pleier å gjøre og som forhindrer riktig drift SQL-kommandoer).
  • Det anbefales å lese her: om måter å lagre dato/klokkeslett på.
  • NB! Du bør ikke bruke datokonvertering til heltall (eller lang), fordi i Access og i SQL Server tilsvarer forskjellige tall samme dato og sammenlignet kan du få et uventet resultat.

    Etter å ha komponert en slik streng som inneholder SQL kommando, og å sende den til kjøring kan resultere i en feil. I dette tilfellet, skriv ut denne strengen inn i feilsøkingsvinduet og se på den med øynene. Kanskje feilen umiddelbart vil fange oppmerksomheten din. Hvis det ikke fungerer, oppretter du en ny spørring i spørringsdesigneren, bytter til SQL-modus, setter inn spørringsteksten der og kjører den. Hvis det er en feil, vil den vises tydeligere.