Volání sql dotazu z přístupového kódu vba. Generování řetězce dotazu SQL ve VBA. Dotazy do databáze INSERT, UPDATE, DELETE ve VBA

Přístup uložil dotaz vyvinutý pomocí nástroje pro tvorbu dotazů s názvem „myQuery“. Databáze je k systému připojena přes ODBC připojení. Makra jsou všechna zahrnuta.

Vynikat má ADODB připojení pro připojení k databázi přes

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nové ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otevřít "MyDatabase.accdb" End With

Obvykle pokračujete a prostě napíšete své SQL, což je úplně v pořádku, a pak uděláte něco jako

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

Ale chci získat přístup k dotazu, který mám uložený v databázi přístupu. Jak tedy mohu zavolat uložený dotaz na databázi, kterou jsem právě připojil.

Už to zkusil

  1. con.Execute("EXEC myQuery") ale ten mi řekl, že to nemůže být find myQuery.
  2. rs.Otevřít "myQuery", con ale tento je neplatný a chce od něj příkazy SELECT /etc
vba excel-vba ms-access-2007 adodb excel

5 odpovědí


6

Myslím, že si to můžete představit jako uloženou proceduru.

Pokud začneme těsně před Dim sqlQuery As String

Dim cmd jako nový ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

Poté si vezměte svou úlohu sady záznamů.


1

Byl jsi skoro tam:

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nové ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otevřít "z:\docs\MyDatabase.accdb" End with con.Execute "MyQuery"

Nechte Exec stranou.

Můžete také přidat parametry, je to trochu zastaralé, ale mělo by pomoci:


0

Je to takový hack, ale můžete si to vyžádat. To znamená, že nahraďte řádek sql následujícím:

SqlQuery = "SELECT * FROM QueryName;"

Před spuštěním tohoto programu se musíte ujistit, že databáze Přístupová data byl zachráněn tzn. stiskněte Ctrl+S (nestačí, aby byl dotaz spuštěn v Accessu).


0

Podařilo se mi spustit aktualizační dotaz, který již byl uložen v Accessu pomocí:

Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

To mi dávalo chyby, dokud jsem nenahradil mezery v názvu dotazu podtržítky v databázi Accessu i v příkazu vykonat.


0

Od založení tohoto vlákna už uplynula dlouhá doba. Pokud vše správně chápu, mohu přidat něco užitečného. Pojmenoval jsem to, co OP popisuje, což je proces použití SQL z dotazu uloženého v ACCDB ke spuštění ve VBA přes DAO nebo ADOBD. Dal jsem mu název „poskytovatel vlastnosti objektu“ i se zkratkou OPP v poznámkách a předponou/příponou názvu objektu.

Myšlenka je taková, že existující objekt v ACCDB (obvykle dotaz) odhaluje vlastnost (obvykle SQL), kterou je třeba použít ve VBA. Dal jsem dohromady funkci, abych vysál SQL z dotazů; viz. níže. Upozornění: Omlouvám se, ale toto vše je v DAO, ADODB moc nepoužívám. Doufám, že vám tyto nápady budou stále užitečné.

Šel jsem dokonce tak daleko, že jsem vyvinul metodu pro použití/vkládání nahraditelných parametrů v SQL, které pochází z těchto OPP dotazů. Poté používám VBA.Replace() k provedení nahrazení před použitím SQL ve VBA.

Cesta objektu DAO k dotazu SQL v ACCDB je následující:

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

Vyměnitelné parametry používám tak, že vyhodnotím, co je třeba nahradit, a zvolím pro parametr neobvyklý název, který nemusí existovat ve skutečné databázi. Z velké části jsou jedinými náhradami, které jsem provedl, názvy polí nebo tabulek nebo výrazy klauzule WHERE a HAVING. Takže jim říkám věci jako "(ReplaceMe00000001)" a pak použiji funkci Replace() k provedení práce...

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

a poté použijte sqlText ve VBA. Zde je pracovní příklad:

Veřejná funkce MySqlThing() Dim sqlText jako řetězec Dim myParamater jako řetězec Dim myExpression jako řetězec "Nastavit vše. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "Something12Do17Some" . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Potom použijte SQL. db.Execute sqlText, dbFailOnError End Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.Application Dim Database Dim Ddefs 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 = qdef.SQL End Function


Spusťte dotaz v Access MakeTable z Excelu

Mám soubor Excel, který potřebuji zautomatizovat. Když uživatel otevře sestavu Excel, bude vyzván k aktualizaci dat. Pokud řeknou ano, musím spustit dotaz...


Spusťte funkci VBA pomocí dotazu na zobrazení v MS Access 2013 z JS ActiveX ADO

Jak spustit makro VBA pomocí dotazu na zobrazení v MS Access 2013 z JS ActiveX ADO? funkce VBA určené k přijetí současný uživatel, přihlášený pomocí: Public Declare...


Spusťte uložený dotaz obsahující "funkci" v access db z excelu

Snažím se spustit dotaz uložený v databázi přístupu z aplikace Excel vba. Dotaz funguje dobře, pokud jej otevřu a spustím v databázi Access, ale při spuštění z modulu vyvolá chybu...


MS Access - Proveďte uložený dotaz podle jména ve VBA

Jak provést uložený dotaz v MS Access 2007 ve VBA? Nechci kopírovat a vkládat SQL do VBA. Raději bych jen provedl název požadavku. To nebude fungovat... VBA nemůže najít dotaz....


Jak provést požadavek v ms-access v kódu VBA?

Jak mohu spustit dotaz pro vrácení záznamů v databázi ms-access data pomocí kódu VBA?


Spusťte požadavek na přístup z aplikace Excel a předejte mu parametry

Jak spustit dotaz v MS access db z kódu Excel VBA nebo makra. Požadavek MS-Access přijímá některé parametry, které je třeba předat z Excelu. Děkuji


Správa excelového sešitu z Accessu 2010 VBA

Mám situaci velmi podobnou následujícímu příspěvku: Žádost o přístup do excelu 2010 pro vytvoření grafu přes vba V mém případě exportuji tabulku, ale se souborem chci udělat mnohem víc...


Spusťte předávací dotaz SQL Server z Access VBA

Mám UPDATE pass through dotaz uložený v Access 2007. Když dvakrát kliknu na pass through dotaz, provede se úspěšně. Jak mohu dosáhnout toho, aby byl tento dotaz proveden z VBA? Já bych...


Import velkého souboru dat do Accessu z Excelu přes VBA

Mám obrovský soubor dat, který potřebuji importovat z Excelu do Accessu (~800 000 řádků). Mohu však ignorovat řádky s konkrétní hodnotou sloupce, které jsou jako 90% ...


Nějaký MDX dotaz v Excel vba?

existuje způsob, jak provést dotaz MDX v aplikaci Excel VBA? Myslel jsem, že by to mohlo být provedeno přes ADO, stejně jako u SQL (ano, vím, že SQL se liší od MDX - problém, který mnohokrát ...

Access uložil dotaz, který byl vyvinut pomocí nástroje pro tvorbu dotazů myQuery. Databáze je k systému připojena přes ODBC připojení. Všechna makra jsou zahrnuta.

Excel naváže ADODB připojení pro připojení k databázi přes

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nové ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otevřít "MyDatabase.accdb" End With

Obvykle stačí napsat svůj SQL, který funguje skvěle, a pak udělat něco jako

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

Chci ale získat přístup k dotazu, který mám uložený v databázi přístupu. Jak tedy zavolám uložený dotaz na databázi, kterou jsem právě připojil.

Už jsem to zkusil

  1. con.Execute("EXEC myQuery"), ale to mi řeklo, že myQuery nelze nalézt.
  2. rs.Open "myQuery", ale je neplatný a vyžaduje od něj příkazy SELECT/etc

5 odpovědí

Myslím, že si to můžete představit jako uloženou proceduru.

Pokud začneme těsně před Dim sqlQuery As String

Dim cmd jako nový ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "myQuery" cmd.ActiveConnection = con Set rs = cmd.Execute()

Poté si vyzvedněte svou práci se sadou záznamů.

Byl jsi skoro tam

Dim con As ADODB.Connection Dim rs As ADODB.Recordset Set con = Nové ADODB.Connection With con .Provider = "Microsoft.ACE.OLEDB.12.0" .Otevřít "z:\docs\MyDatabase.accdb" End with con.Execute "MyQuery"

Nechte Exec.

Můžete také přidat parametry, je to trochu zastaralé, ale mělo by pomoci: Aktualizujte 2 pole v databázi Access s daty Excel a možná makrem

Podařilo se mi spustit aktualizační dotaz, který již byl uložen v Accessu pomocí:

Connection.Execute "My_Update_Query_Already_Saved_In_Access", adExecuteNoRecords, adCmdStoredProc

To mi dávalo chyby, dokud jsem nenahradil mezery v názvu dotazu podtržítky v databázi Accessu i v příkazu vykonat.

Je to trochu hackovací práce, ale můžete požádat o žádost. To znamená, že nahraďte řádek SQL následujícím:

SqlQuery = "SELECT * FROM QueryName;"

Před spuštěním se musíte ujistit, že databáze Accessu byla uložena, tzn. stiskněte Ctrl + S (nestačí, aby se dotaz provedl v Accessu).

Už je to dávno, co toto téma vzniklo. Pokud tomu dobře rozumím, možná bych mohl přidat něco užitečného. Pojmenoval jsem to, co OP popisuje: toto je proces použití SQL z dotazu uloženého v ACCDB ke spuštění ve VBA přes DAO nebo ADOBD. Nazval jsem to "Object Property Provider", dokonce se zkratkou OPP v poznámkách a pro předponu/příponu názvu objektu.

Myšlenka je taková, že existující objekt v ACCDB (obvykle dotaz) odhaluje vlastnost (obvykle SQL), kterou je třeba použít ve VBA. Dal jsem dohromady funkci, abych vysál SQL z dotazů za tímto účelem; Viz. níže. Upozornění: Omlouvám se, ale toto vše je v DAO, ADODB moc nepoužívám. Doufám, že vám nápady budou stále užitečné.

Šel jsem dokonce tak daleko, že jsem vyvinul metodu pro použití/vkládání nahraditelných parametrů v SQL, které pochází z těchto OPP dotazů. Poté používám VBA.Replace() k provedení nahrazení před použitím SQL ve VBA.

Cesta objektu DAO k dotazu SQL v ACCDB je následující:

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

Vyměnitelné parametry používám tak, že vyhodnotím, co je třeba nahradit, a zvolím pro parametr neobvyklý název, který ve skutečné databázi nemusí existovat. Z velké části jsou jedinými náhradami, které jsem provedl, názvy polí nebo tabulek nebo výrazy klauzule WHERE a HAVING. Takže jim říkám věci jako "(ReplaceMe00000001)" a pak použiji funkci Replace() k provedení práce...

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

A pak použijte sqlText ve VBA. Zde je pracovní příklad:

Veřejná funkce MySqlThing() Dim sqlText jako řetězec Dim myParamater jako řetězec Dim myExpression jako řetězec "Nastavit vše. sqlText = getSqlTextFromQuery("myQuery") myParameter = "(ReplaceMe00000001)" myExpression = "Something12Do17Some" . sqlText = VBA.Replace(sqlText, myParameter, myExpression) "Potom použijte SQL. db.Execute sqlText, dbFailOnError End Function getSqlTextFromQuery(ByVal oppName As String) As String Dim app As Access.Application Dim Database Dim Ddefs 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 = qdef.SQL End Function

Tato lekce je věnována SQL dotazy do databáze na Přístup VBA. Podíváme se, jak se ve VBA provádějí dotazy INSERT, UPDATE, DELETE do databáze a také se naučíme, jak získat konkrétní hodnotu z SELECT dotazu.

Ti, kteří programují Přístup VBA a při práci se základnou SQL data servery se velmi často potýkají s tak jednoduchým a nezbytným úkolem, jako je odeslání SQL dotazu do databáze, ať už jde o INSERT, UPDATE nebo jednoduchý SQL SELECT dotaz. A protože jsme začínající programátoři, měli bychom to také umět, takže dnes to uděláme.

Tématu získávání dat jsme se již dotkli SQL server, kde napsali kód ve VBA pro získání těchto dat např. v článku o Nahrání dat do textového souboru z MSSql 2008 nebo se toho také trochu dotkli v materiálu Nahrání dat z Accessu do šablony Word a Excel, ale tak či onak jsme se na to podívali povrchně a dnes navrhuji mluvit o tom trochu podrobněji.

Poznámka! Všechny níže uvedené příklady jsou považovány za použití projektu Access 2003 ADP a databáze MSSql 2008. Pokud nevíte, co je projekt ADP, pak jsme se na to podívali v materiálu Jak vytvořit a nakonfigurovat projekt Access ADP

Zdrojová data pro příklady

Řekněme, že máme tabulku test_table, která bude obsahovat čísla a názvy měsíců v roce (dotazy prováděné pomocí Management Studio)

VYTVOŘIT TABULKU .( NOT NULL, (50) NULL) ON GO

Jak jsem již řekl, použijeme projekt ADP nakonfigurovaný pro práci s MS SQL 2008, ve kterém jsem vytvořil testovací formulář a přidal tlačítko start s podpisem "Běh", který budeme potřebovat k otestování našeho kódu, tzn. Celý kód zapíšeme do obsluhy události " Stisk tlačítka».

Dotazy do databáze INSERT, UPDATE, DELETE ve VBA

Abychom nezdržovali příliš dlouho, začněme hned, řekněme, že potřebujeme přidat řádek do naší testovací tabulky ( kód okomentován)/

Private Sub start_Click() "Deklarujte proměnnou pro uložení řetězce dotazu Dim sql_query As String "Zapište do ní dotaz, který potřebujeme sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "Červen")" "Spustit it DoCmd RunSQL sql_query End Sub

V tomto případě se dotaz provede pomocí aktuálních parametrů připojení k databázi. Můžeme zkontrolovat, zda byla data přidána nebo ne.

Jak vidíte, data byla vložena.

Abychom odstranili jeden řádek, napíšeme následující kód.

Private Sub start_Click() "Deklarujte proměnnou pro uložení řetězce dotazu Dim sql_query As String "Zapište do ní mazací dotaz sql_query = "DELETE test_table WHERE id = 6" "Spusťte DoCmd.RunSQL sql_query End Sub

Když to zkontrolujeme, uvidíme požadovaný řádek vlevo, odjet.

Chcete-li aktualizovat data, napište požadavek na aktualizaci do proměnné sql_query, doufám, že význam je jasný.

SELECT dotaz do databáze ve VBA

Zde jsou věci o něco zajímavější než u jiných konstrukcí SQL.

Nejprve řekněme, že potřebujeme získat všechna data z tabulky a například je zpracujeme a zobrazíme ve zprávě a vy je samozřejmě můžete použít pro jiné účely, k tomu píšeme následující kód

Private Sub start_Click() "Deklarovat proměnné "Pro sadu záznamů z databáze Dim RS As ADODB.Recordset "Řetězec dotazu Dim sql_query As String "Řetězec pro zobrazení souhrnných dat ve zprávě Dim str As String "Vytvořit nový objekt pro záznamy set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Spusťte dotaz pomocí aktuálního nastavení připojení projektu RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Procházet záznamy, zatímco ne ( RS.EOF) "Vyplňte proměnnou, aby se zobrazila zpráva str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "přejít na další záznam RS.MoveNext Wend " Výstup zprávy msgbox str End Sub

Zde již používáme smyčky VBA Access k iteraci všech hodnot v naší sadě záznamů.

Poměrně často je však nutné získat ne všechny hodnoty ze sady záznamů, ale pouze jednu, například název měsíce podle jeho kódu. A k tomu je nějak drahé používat smyčku, takže můžeme jednoduše napsat dotaz, který vrátí jen jednu hodnotu a přistupovat k ní, například získáme název měsíce pomocí kódu 5

Private Sub start_Click() "Deklarovat proměnné" Pro sadu záznamů z databáze Dim RS As ADODB.Recordset "Řetězec dotazu Dim sql_query As String "Řetězec pro zobrazení konečné hodnoty Dim str As String "Vytvořit nový objekt pro sadu záznamů RS = New ADODB.Recordset "Řádek dotazu sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Spusťte dotaz pomocí aktuálního nastavení připojení projektu RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Získejte naši hodnotu str = RS. Pole(0) msgbox str End Sub

Pro univerzálnost jsme zde již řešili nikoli názvem buňky, ale jejím indexem, tzn. 0 a toto je úplně první hodnota v Sada záznamů, nakonec jsme dostali hodnotu "Smět".

Jak vidíte, vše je docela jednoduché. Pokud často potřebujete získat konkrétní hodnotu z databáze ( jako v posledním příkladu), pak doporučuji vypsat celý kód do samostatné funkce (Jak napsat funkci ve VBA Access 2003) s jedním vstupním parametrem, například kód měsíce ( vezmeme-li v úvahu náš příklad) a jednoduše tam, kde je potřeba tuto hodnotu zobrazit, zavoláme potřebnou funkci s požadovaným parametrem a je to, tím výrazně zredukujeme VBA kód a zlepšíme vnímání našeho programu.

To je pro dnešek vše. Hodně štěstí!

Access umožňuje programově vytvářet řetězce SQL dotazů a také řetězce, které slouží jako hodnoty pro vlastnosti formulářů, sestav atd., parametry funkcí atd., které také musí odpovídat syntaxe SQL. Zároveň musíme pamatovat na to, že konstanty obsažené v takovém řádku musí být také naformátovány podle pravidel SQL, a to:

  • v číslech musí být oddělovač desetinných míst tečka,
  • řetězce musí být uzavřeny v uvozovkách nebo apostrofech (a uvozovky nebo apostrofy jsou uvnitř řetězce zdvojené),
  • Data musí být uzavřena do křížových značek a zapsána v americkém formátu (mm/dd/rrrr) s lomítkem jako oddělovačem.

    Pokud je toto porušeno, jsou možné následující účinky:

  • číslo jako 10,5 s čárkou místo tečky bude vnímáno jako seznam dvou čísel 10 a 5, což povede k určitému nesouladu v počtu polí,
  • řetězec jako Vasya bez uvozovek a apostrofů bude vnímán jako název pole, pokud takové pole existuje, nebo jako název parametru, který bude okamžitě požadován,
  • datum jako 1/2/2010 nebo 1-2-2010 bez hash značek bude považováno za aritmetický výraz (s dělením a odečítáním, v tomto pořadí),
  • datum jako 1.2.2010 bude interpretováno jako zlomkové číslo se dvěma desetinnými čárkami a bude mít za následek chybu,
  • datum s hashovacími značkami, ale ne v americkém formátu, bude vnímáno jako datum, ale jiné (den a měsíc budou přeskupeny).

    Níže v každé části je uveden příklad řetězce SQL, který by měl být vytvořen tvorba softwaru a poté kód VBA, který jej vytváří. Níže je velmi užitečné doporučení.

    1. Použití čísel

    SELECT * FROM Tabulka WHERE (((Tabulka .Quanty)= 12 .197 ));
    VBA v1

    Dim q Jako Single q = 12 .197 strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & q & "));"
    VBA v2

    Dim q As String q = "12,197" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" & Str (q) & "));"
    Poznámka:

  • VBA v1- pro celá čísla. Pro zlomková čísla se jedná o speciální případ pouze tehdy, je-li systémovým oddělovačem tečka.
  • VBA v2- správnější možnost, protože v klasickém programování lze s řetězci zřetězit pouze řetězce, zatímco VBA v1 používá implicitní převod typu, i když u celých čísel nebyly na tuto metodu žádné stížnosti. (Příklad je uveden, když je systémovým oddělovačem čárka.)
  • Někdy se pro převod používá také funkce CStr(), ale není vždy použitelná, protože vrací číslo jako řetězec, kde je zapsáno přes systémový oddělovač, zatímco SQL přijímá jako oddělovač pouze tečku.
  • NB! Při použití atypických systémových oddělovačů nemusí výše uvedené příklady fungovat, v těchto případech je potřeba programově nahradit systémový oddělovač tečkou. Níže je funkce, která vrací systémový oddělovač.
    Funkce GetDecimalSeparator() As String GetDecimalSeparator = Formát ( 0 #, "." ) End Function Také si uvědomte, že některé standardní akce Access nemusí v tomto případě fungovat.

    2. Použití provázků

    SELECT * FROM Tabulka WHERE (((Tabulka .Název)="Vše" ));
    VBA v1

    Dim q As String q = "All" strSQL = "SELECT * " _ & "FROM Table " _ & "WHERE (((Table.Quanty)=" "" & DoubleQuote(q) & "" "));"
    VBA v2

    Dim q As String q = "Vše" strSQL = "SELECT * " _ & "FROM Table" _ & "WHERE (((Table.Quanty)="" & DoubleApostrophe(q) & "" ));"
    Poznámka:

  • VBA v1: DoubleQuote() - funkce, která se zdvojnásobí citáty.

    Příklad:
    vzorkovací podmínka:
    SQL "a":
    WHERE pole=" ""a"s"VBA:
    strWhere = " pole WHERE=""" & "a""""a"." & """ "

  • VBA v2:: DoubleApostrophe() - funkce, která se zdvojnásobí apostrofy.

    Příklad:
    vzorkovací podmínka:
    SQL "a":
    WHERE pole=" a"a""VBA:
    strWhere = " WHERE pole="" & "a""a""s" & "" "

  • Výše uvedené funkce DoubleQuote a DoubleApostrophe NEJSOU vestavěné funkce Access, ale funkce definované uživatelem, jejichž implementace je ponechána na uvážení programátora. Konkrétně ve verzích Access 2000 a vyšších můžete pro tento účel použít vestavěnou funkci Nahradit a ve verzi 97 a nižších můžete použít tuto funkci:

    Veřejná funkce Replace97(StrMain As String , StrFind As String , StrZam As String ) As String On Error Přejít na chybu Dim pos as Long If StrFind = "" Then GoTo err If StrMain = "" Then Replace97 = StrZam: Exit Function Do InStr( 1 , StrMain, StrFind) = 0 pos = InStr( 1 , StrMain, StrFind) StrMain = střední (StrMain, 1 ,po- 1 ) & StrZam & střední (StrMain, pos + Len(StrFind), Len(StrMain)) Smyčka Nahradit97 = Funkce ukončení StrMain err: Nahradit97 = Koncová funkce StrMain
    3. Použití datlí

    SELECT * FROM Tabulka WHERE (((Tabulka .TimeOpen)=# 3 /31 /2003 11 :17 :19 #));
    VBA

    Dim q As Date q = Now strSQL = "SELECT * " _ & "FROM Table" _ & "WHERE (((Table.TimeOpen)=#" & Format (q, "mm\/dd\/yy hh\:mm" \:ss" ) & "#));"
    Poznámka:

  • Microsoft JET SQL operuje s daty v americkém formátu, tzn. přesně ve výše uvedeném tvaru Měsíc/Den/Rok.
  • Nevynechávejte znaky # (uzavře celou konstantu datum a čas) a \ (zabraňuje tomu, aby byly / a : nahrazeny nastavením národního prostředí, k čemuž obvykle slouží funkce Format a která zabraňuje řádný provoz SQL příkazy).
  • Doporučuje se přečíst si zde: o způsobech uložení data/času.
  • NB! Neměli byste používat převod data na celé číslo (nebo dlouhé), protože v Accessu a SQL Serveru odpovídají různá čísla stejnému datu a při porovnání můžete získat neočekávaný výsledek.

    Po složení takového řetězce obsahujícího SQL příkaz a odeslání ke spuštění může vést k chybě. V takovém případě vytiskněte tento řetězec do ladicího okna a podívejte se na něj očima. Možná vás chyba okamžitě zaujme. Pokud to nefunguje, vytvořte nový dotaz v návrháři dotazů, přepněte do režimu SQL, vložte tam text dotazu a spusťte jej. Pokud dojde k chybě, bude zobrazena jasněji.