Modul mSQL - popis funkcí

K dokumentu náleží i příkladová databáze Priklad_mSQL.mdb, již je nutno otevřít z již spuštěného Varia nad SQL daty. Databáze se nachází v adresáři SDK\moduly\mSQL instalačního CD Varia.

1) Popis tabulky Dotazy_SQL

Pole Typ MSSQL Typ MS Access Popis pole
Dotaz varchar(255) text(255) jméno dotazu, který se vytvoří v databázi Cilova_databaze
SQL text memo definice dotazu (SQL string) v syntaxi Transact SQL
Parametry text memo deklarace parametrů ve formátu: 
parametr;datovy_typ_parametru_VBA;......  (např. parCisloDokladu;string;parCelkem;currency)
povolené datové typy jsou: Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, String, Nahrada.
Predavaci YesNo Ano/Ne pokud je TRUE(-1), pak je předávací (je zpracován SQL serverem),
pokud je FALSE(0), jedná se o běžný dotaz Accessu
ReturnsRecords YesNo Ano/Ne je použit pouze v případě, že je předávací. 
Pokud TRUE (-1), vrací záznamy, 
pokud FALSE (0), lze použít DML (update, insert ...)
Cilova_databaze varchar(128) text(128) databáze, ve které se bude předávací dotaz spouštět. Není-li dotaz předávací (Predavaci = 0), je hodnota ignorována. (Například Data, DMaj ....). Je-li hodnota v poli Cilova_databaze tabulky Dotazy_SQL ukončena znakem '\' (zpětné lomítko), není databáze číslována (např. hodnota 'Firmy\' zaručí, že předávací dotaz bude spuštěn nad databází Firmy a ne Firmy0001)
ODBC Timeout int long ODBC Timeout dotazu v sekundách (výchozí 600)
 (jako vzor lze naimportovat tabulku Dotazy_SQL ze souboru Vario.mda)

V dotazu lze použít následující funkce shodným způsobem, jako v běžných dotazech:

TiskDatabazeSQL (JmenoDB As String, Optional Archiv As Byte)
TiskAgenda ()
TiskKniha (Optional Agenda As String)
TiskRok (Optional Agenda As String)
TiskObdobi (Optional Agenda As String)
AktualniAgenda ()
AktualniKniha (Optional Agenda As String, Optional Opravneni As Byte)
AktualniRok (Optional Agenda As String)
AktualniObdobi (Optional Agenda As String)
AktualniData ()
HospodarskyRok (Datum As Date)
HospodarskyRokZacatek (Rok As Integer)
HospodarskyRokKonec (Rok As Integer)
HospodarskyRokObdobi (Datum As Date)

Tyto funkce budou vyhodnoceny standardním způsobem a místo nich bude do SQL výrazu dosazena jejich návratová hodnota uvozená v závislosti na datovém typu návratové hodnoty znakem ' (apostrof) v případě datového typu String. Např. funkce TiskKniha() vrátí hodnotu 'Adresář'. To znamená, že není potřeba se starat uvození řetězcových proměnných v SQL výrazu.

Funkce TiskDatabazeSQL vrátí jméno databáze včetně číselného suffixu závislého na parametru Archiv funkce.

Archiv= 0, zajímá-li mě číslo aktuální databáze právě otevřené firmy
         = 1, zajímá-li mě číslo pracovní databáze právě otevřené firmy
         = 2, zajímá-li mě číslo archivní databáze právě otevřené firmy

Například volání TiskDatabazeSQL("Data", 2) vrátí řetězec Data5001, TiskDatabazeSQL("Data", 1) vrátí řetězec Data0001 a TiskDatabazeSQL("Data", 0) vrátí řetězec Data0001 nebo Data5001 v závislosti na tom, zda mám otevřená pracovní nebo archivní data. Jako jméno databáze lze použít i jména zákaznických databází. Funkci lze využít zejména v okamžiku, kdy potřebuji načíst data jak z pracovních tak z archivních dat.

a) Je-li definice dotazu následující:

select * from doklady
union
select * from TiskDatabazeSQL("Data", 2).dbo.doklady

bude nad databází Data0001 spuštěn následující dotaz:

select * from doklady
union
select * from Data5001.dbo.doklady

Cílem dotazu je vrátit všechny doklady z pracovních i archivních dat.


b) Je-li definice dotazu následující:

select * from doklady
where kniha = AktualniKniha("Zakázky")

a aktuální kniha je 'nabídky'
bude nad databází Data0001 spuštěn následující dotaz:

select * from doklady
where kniha = 'Nabídky'

 

2) PripravDotazSQL

Function PripravDotazSQL(Dotaz As String, CisloDat As Integer, DDefinic As Database, _
DDotazu As Database, Server As String, Optional retHodnotyParametru As String) As Boolean

Popis parametrů:

Dotaz - jméno SQL Dotazu v tabulce definic 'DotazySQL' (pole Dotaz)

CisloDat
- číslo dat nad kterými se má dotaz spustit

DDefinic
- databáze, ve které je umístěna tabulka Dotazy_SQL

DDotazu
- databáze, ve které se dotaz vytvoří/nastaví

Server
- jméno SQL Serveru

retHodnotyParametru - seznam parametrů oddělených středníkem, kde n-tá hodnota je jméno parametru a n+1-ní hodnota je hodnota, která se má místo parametru dosadit. Je-li retHodnotyParametru = "" (řetězec nulové délky), potom je proměnná retHodnotyParametru nastavena volanou funkcí DejDotazSQL() (viz. níže) - to slouží pro případné využití volající funkcí. Chci-li v hodnotě parametru použít znak ';', musím jej zapsat jako ';;'.

!!!POZOR!!!, v žádném případě nesmí být jako jeden z parametrů v seznamu retHodnotyParametru zadán řetězec nulové délky (""), je potřeba zadat minimálně jednu mezeru (" ").

Příklad:
Mějme proměnnou X, která může za jistých okolností nabývat hodnoty "" (řetězec nulové délky). Potom
parametr retHodnotyParametru bude vypadat např. takto:

Dim X as String
X=DejhodnotuX()     ' funkce DejhodnotuX() vrátila "" (řetězec nulové délky)
HodnotyParametru="parParametrX;" & X & ";parParametrY;'" & Y & "'"

Funkci bude předána následující hodnota:

"parParametrX;;parParametrY;'Y'"

což je chyba, neboť řetězec ";;" bude nahrazen pouze jedním znakem ";" a interně používaná funkce Split vrátí matici s nesprávným počtem prvků (bude jí předána hodnota "parParametrX;parParametrY;'Y'")

Správný postup je následující:

Dim X as String
X=DejhodnotuX() ' funkce DejhodnotuX() vrátila ""
if X = "" then X = " "
HodnotyParametru="parParametrX;" & X & ";parParametrY;'" & Y & "'"

potom bude funkci předána hodnota:

"parParametrX; ;parParametrY;'Y'" a funkci Split bude předána správná hodnota
"parParametrX; ;parParametrY;'Y'".

Závisí na funkcích:

DejDotazSQL
NastavDotazSQL
cODBCConnLes


Popis funkce:

Funkce slouží k jednoduché přípravě předávacího/výběrového dotazu v libovolné databázi (např. Tiskový formulář) na základě definice uložené v tabulce Dotazy_SQL.

Funkce volá funkci DejDotazSQL, která vrátí výsledný SQL string a další informace, na jejichž základě funkce PripravDotazSQL vytvoří v databázi DDotazu prostřednictvím funkce NastavDotazSQL uložený dotaz.

Je-li hodnota v poli Cilova_databaze tabulky Dotazy_SQL ukončena znakem '\' (zpětné lomítko), není databáze číslována (např. hodnota 'Firmy\' zaručí, že předávací dotaz bude spuštěn nad databází Firmy a ne Firmy0001).

Je-li hodnota v poli Predavaci tabulky Dotazy_SQL nastavena na FALSE (-1), bude v databázi DDotazu vytvořen běžný výběrový dotaz. V tom případě je ignorováno pole Cilova_Databaze a pole ReturnsRecords.

Je-li proměnná retHodnotyParametru neprázdná, je hodnota pole Parametry ignorována. Je-li prázdná, je použita hodnota pole Parametry a uživatel je dotázán na každý z deklarovaných parametrů. Proměnná retHodnotyParametru je potom nastavena na hodnotu, kterou lze v případě potřeby použít ve volající
funkci (jednotlivé parametry a jejich hodnoty lze z proměnné získat rozložením řetězce pomocí funkce Split).


Příklady (viz. Priklad_mSQL.mdb):

a) Vytvoření dotazu 'Sestava Pohledavky zpetne ke dni_SQL' v databázi Vario.mda na základě definice uložené v tabulce Dotazy_SQL umístěné v kódové databázi. Hodnota proměnné retHodnotyParametru je neprázdná.


Hodnoty v tabulce Dotazy_SQL:

Dotaz Sestava Pohledavky zpetne ke dni_SQL
SQL SELECT Doklady.*,
      isnull(Souvisejici_doklady.Uhrazeno_po*PV,0) AS Uhrazeno_pozdeji,
      (Zbyva_uhradit*PV) + isnull(Souvisejici_doklady.Uhrazeno_po*PV,0) AS Saldo,
      Zbyva_uhradit*PV AS ZbyvaUhradit,
      Celkem*PV AS CelkemPV,
      uhrazeno*PV - isnull(Souvisejici_doklady.Uhrazeno_po*PV,0) AS UhrazenoPV
      FROM
      Doklady
      INNER JOIN Knihy
      ON Doklady.Kniha = Knihy.Kniha
      LEFT JOIN
       (
       SELECT convert(varchar(30), Souvisejici_doklady.Cislo_dokladu) AS Cislo_dokladu,
        convert(money, Sum(Souvisejici_doklady.Castka_platby)) AS Uhrazeno_po
       FROM Souvisejici_doklady
       WHERE Souvisejici_doklady.Datum>parDatum
        AND Souvisejici_doklady.Typ_souvislosti = 'PU'
       GROUP BY Souvisejici_doklady.Cislo_dokladu
       )
      AS Souvisejici_doklady
      ON Doklady.Cislo_dokladu = Souvisejici_doklady.Cislo_dokladu
      WHERE (Zbyva_uhradit*PV + isnull(Souvisejici_doklady.Uhrazeno_po*PV,0)<>0)
      AND (Doklady.Datum<=parDatum)
      AND (Doklady.PV<>0)
      AND (Knihy.Agenda='Vydané doklady')
      AND (Doklady.Typ_dokladu IN('FV','DV'))
      ORDER BY Doklady.Cislo_dokladu
Parametry parDatum;date
Predavaci -1
ReturnsRecords -1
Cilova_databaze Data
ODBC Timeout 600



Volání funkce:

*** ZAČÁTEK ***
Function PrikladPripravDotazSQL_1()
  Dim Parametry As String
  Dim Server As String
  Dim Datum As Date
 
  Const Dotaz = "Sestava Pohledavky zpetne ke dni_SQL"
 
  Datum = InputBox("Zadejte datum do:")
  Parametry = "parDatum;'" & msql.DateSQL(Datum) & "'"
  Server = firmy.Item(0).Server
  PripravDotazSQL Dotaz, app.AktualniData, CodeDb, app.Databaze, Server, Parametry
  ZobrazData Dotaz
End Function
*** KONEC ***

b) Vytvoření dotazu 'Sestava Pohledavky zpetne ke dni_SQL' v databázi Vario.mda na základě definice uložené v tabulce Dotazy_SQL umístěné v kódové databázi (codedb). Hodnota proměnné retHodnotyParametru je prázdná a uživatel bude dotázán na každou z hodnot deklarovaných v definici dotazu. Hodnota proměnné Parametry je nastavena volanou funkcí a lze ji dále použít.


Volání funkce:

*** ZAČÁTEK ***
Function PrikladPripravDotazSQL_2()
  Dim Parametry As String
  Dim Server As String
  Dim PoleParametru() As String
  Dim Datum As Date
  Dim ParametrDatum As String
 
  Const Dotaz = "Sestava Pohledavky zpetne ke dni_SQL"
 
  Server = firmy.Item(0).Server
  PripravDotazSQL Dotaz, app.AktualniData, CodeDb, app.Databaze, Server, Parametry
  ZobrazData Dotaz

  PoleParametru = Split(Parametry, ";")
  ParametrDatum = PoleParametru(0)
  Datum = CDate(Mid$(PoleParametru(1), 8, 2) & "." & _
        Mid$(PoleParametru(1), 6, 2) & "." & _
        Mid$(PoleParametru(1), 2, 4))
 
  MsgBox ("Hodnota parametru " & ParametrDatum & " je " & Datum), vbInformation
End Function
*** KONEC ***

3) DejDotazSQL

Function DejDotazSQL(Dotaz As String, DDefinic As Database, Optional retCilovaDB As String, _
Optional retHodnotyParametru As String, Optional retPredavaci As Boolean, _
Optional retODBCTimeout As Integer, Optional retReturnsRecords as Boolean) As String


Popis parametrů:

Dotaz - jméno SQL Dotazu v tabulce definic 'DotazySQL' (pole Dotaz)

DDefinic - databáze, ve které je umístěna tabulka Dotazy_SQL

retCilovaDB
- Prefix databáze, ve které se bude dotaz spouštět (např. Data, DMaj), uložený v tabulce definic

retHodnotyParametru - seznam parametrů oddělených středníkem, kde n-tá hodnota je jméno parametru a n+1-ní hodnota je hodnota, která se má místo parametru dosadit. Je-li = "", potom je proměnná retSeznamParametru nastavena touto funkcí a uživatel je dotázán na každý z parametrů deklarovaných v tabulce Dotazy_SQL (vhodné pro případné využití volající funkcí). Chci-li v hodnotě parametru použít znak ';' musím jej zapsat jako ';;'.

retPredavaci - True - Dotaz je předávací (SQL Server),
False - není předávací (File Server)

retReturnsRecords - True - Předávací dotaz vrací záznamy, 
False - nevrací záznamy (DML - update, insert ....)
parametr není použit v případě, že se jedná o předávací dotaz

retODBCTimeout - ODBCTImeout dotazu


Závisí na funkcích:

NastavParametryDotazuSQL


Popis funkce:

Funkce vrátí připravený SQL string založený na definici uložené v tabulce Dotazy_SQL a na základě neprázdného seznamu parametrů uloženého v proměnné <retHodnotyParametru>. Je-li <retHodnotyParametru> rovna "", potom je substituce parametrů provedena prostřednictvím funkce NastavParametryDotazuSQL na základě deklarace parametrů v tabulce Dotazy_SQL, přičemž uživatel je na každý z parametrů dotázán.

Funkce během zpracování nastaví hodnoty následujících proměnných:

  retCilovaDB - nastavena na hodnotu pole Cilova_Databaze v tabulce Dotazy_SQL

  retHodnotyParametru - v případě, že během volání má hodnotu "", je nastavena na hodnotu, kterou lze v případě potřeby použít ve volající funkci (jednotlivé parametry a jejich hodnoty lze z proměnné získat rozložením řetězce pomocí funkce Split).

  retPredavaci - nastavena na hodnotu pole Predavaci v tabulce Dotazy_SQL

  retODBCTimeout - nastavena na hodnotu pole ODBCTimeout v tabulce Dotazy_SQL


Příklad (viz. Priklad_mSQL.mdb):

Získání SQL stringu dotazu definovaného v tabulce Dotazy_SQL v kódové databázi (codedb):

*** ZAČÁTEK ***
Function PrikladDejDotazSQL() As String
  On Error Resume Next
  Dim SQL As String
  Dim CilovaDB As String
  Dim Parametry As String
  Dim Datum As Date
  Dim Predavaci As Boolean
  Dim ReturnsRecords As Boolean
  Dim ODBCTimeout As Integer
 
  Const Dotaz = "Sestava Pohledavky zpetne ke dni_SQL"
 
  Datum = InputBox("Zadejte datum do:")
  Parametry = "parDatum;'" & msql.DateSQL(Datum) & "'"
  SQL = DejDotazSQL(Dotaz, CodeDb, CilovaDB, Parametry, Predavaci, ODBCTimeout, ReturnsRecords)
  PrikladDejDotazSQL = "SQL string dotazu " & Dotaz & ":" & vbCrLf & _
  "-------------------------------------------------------" & vbCrLf & SQL & _
  vbCrLf & "Dotaz bude spuštěn v databázi: " & CilovaDB & vbCrLf & _
  "-------------------------------------------------------" & vbCrLf & _
  "Dotaz je předávací: " & Predavaci & vbCrLf & _
  "Předávací dotaz vrací záznamy: " & ReturnsRecords & vbCrLf & _
  "ODBC Timeout dotazu je: " & ODBCTimeout & " vteřin."
End Function
*** KONEC ***

4) NastavDotazSQL

Function NastavDotazSQL(Dotaz As String, DDotazu As Database, SQL As String, _
Optional ConnDotazu As String, Optional Timeout As Integer = 600, _
Optional ReturnsRecords As Boolean = True) As Boolean

Popis parametrů:

Dotaz - jméno SQL dotazu v databázi DDotazu

DDotazu - databáze, ve které se dotaz vytvoří/(nastaví jeho vlastnosti)

SQL - SQL String, na který bude nastavena vlastnost SQL dotazu

ConnDotazu - Connect string dotazu. Je-li prázdný, jedná se o běžný výběrový a ne předávací dotaz.

Timeout - ODBC Timeout dotazu

ReturnsRecords - TRUE - předávací dotaz vrací záznamy, 
FALSE - jedná se o DML (update, insert ....)

Popis funkce:

Funkce slouží k vytvoření uloženého dotazu v databázi DDotazu. Není-li zadán ConnDotazu, bude vytvořen běžný výběrový dotaz

Příklady (viz. Priklad_mSQL.mdb):

a) Vytvoření předávacího dotazu v databázi Vario.mda a zobrazení jeho výsledku

*** ZAČÁTEK ***
Function PrikladNastavDotazSQL_1()
  Dim SQL As String
  Dim Databaze As String
  Dim Connstr As String
  Const JmenoDotazu = "PrikladNastavDotazSQL"
 
  Databaze = "Data" & Format$(app.AktualniData, fmt0000)
  Connstr = cODBCConnLes & firmy.Item(0).Server & cDataConn & Databaze
  SQL = "SELECT * FROM Firmy WITH (NOLOCK) order by firma"
  NastavDotazSQL JmenoDotazu, App.Databaze, SQL, Connstr, , True
  ZobrazData JmenoDotazu
  app.Databaze.QueryDefs.Delete JmenoDotazu
End Function
*** KONEC ***

b) Vytvoření výběrového dotazu v databázi Vario.mda a zobrazení jeho výsledku

*** ZAČÁTEK ***
Function PrikladNastavDotazSQL_2()
  Dim SQL As String
  Dim Databaze As String
  Const JmenoDotazu = "PrikladNastavDotazSQL_File"
 
  Databaze = "Data" & Format$(app.AktualniData, fmt0000)
  SQL = "SELECT * FROM Firmy order by firma desc"
  NastavDotazSQL JmenoDotazu, app.Databaze, SQL
  ZobrazData JmenoDotazu
  app.Databaze.QueryDefs.Delete JmenoDotazu
End Function
*** KONEC ***

5) DateSQL

Function DateSQL(Datum As Date, Optional FormatData As Byte = 0) As String

Popis parametrů:

Datum - Datum
FormatData - formát, v jakém chci textové vyjádření data vrátit
                      0 - univerzální formát - YYYYMMDD
                      1 - formát ISO8601    - YYYY-MM-DD

Popis funkce:

Funkce vrátí textové vyjádření data v daném formátu.

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladDateSQL()
  Dim S As String
  Dim Datum As Date
 
  Datum = CDate(InputBox("Zadejte datum"))
  S = "Datum ve formátu ISO8601: " & DateSQL(Datum, 1)
  S = S & vbCrLf & vbCrLf & "Datum v univerzálním formátu: " & DateSQL(Datum, 0)
  MsgBox S, vbInformation
End Function
*** ZAČÁTEK ***

6) DatabazeSQL:

Function DatabazeSQL(Databaze As String, Optional Server As String) As Database

Popis parametrů:

Databaze - Databáze, kterou chci použít
Server  - Server, na němž je požadovaná databáze umístěna

Funkce vrátí objekt typu Database otevřený nad databází Databaze serveru Server

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladDatabazeSQL(JmenoDB As String)
  Dim D As Database
 
  If mSQL.DatabazeSQLExistuje(JmenoDB, firmy.Item(0).Server) Then
    Set D = mSQL.DatabazeSQL(JmenoDB, firmy.Item(0).Server)
    MsgBox D.Connect, vbInformation
    Set D = Nothing
  Else
    MsgBox "Databáze " & JmenoDB & " neexistuje", vbInformation
  End If
End Function
*** ZAČÁTEK ***

7) AktualniUzivatelSQL:

Function AktualniUzivatelSQL(Server As String) As String

Popis parametrů:

Server - Server, ke kterému je uživatel přihlášen

Popis funkce:

Funkce vrátí jméno k SQL Serveru přihlášeného uživatele

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladUzivatelSQL()
  MsgBox "Aktuální uživatel SQL serveru: " & _
    msql.AktualniUzivatelSQL(firmy.Item(0).Server), vbInformation
End Function
*** KONEC ***

8) DatabazeSQLExistuje

Function DatabazeSQLExistuje(Databaze As String, Server As String) As Boolean

Popis parametrů:

Databaze - Databáze, jejíž existence se zjišťuje
Server - Server, na němž se existence databáze zjišťuje

Popis funkce:

Funkce zjistí, zda je daná databáze na serveru vytvořena

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladDatabazeSQL(JmenoDB As String)
  Dim D As Database
 
  If mSQL.DatabazeSQLExistuje(JmenoDB, firmy.Item(0).Server) Then
    Set D = mSQL.DatabazeSQL(JmenoDB, firmy.Item(0).Server)
    MsgBox D.Connect, vbInformation
    Set D = Nothing
  Else
    MsgBox "Databáze " & JmenoDB & " neexistuje", vbInformation
  End If
End Function
*** KONEC ***
 
9) ProvedSQL

Function ProvedSQL(D As Database, SQL As String, ReturnsRecords As Boolean, _
  Optional ODBCTimeout As Integer = 600, Optional ExecuteOptions As Integer, _
  Optional R_Type As Integer = dbOpenDynaset, Optional Options As Integer = 0, _
  Optional LockEdit As Integer = dbReadOnly) As Variant

Popis parametrů:

D - odkaz na proměnnou typu Database, o deklaraci proměnné a vytvoření objektu se musí postarat volající procedura

SQL - SQL (T-SQL, DDL, DML) příkaz

ReturnsRecords - určuje zda se bude vracet recordset nebo proběhne DDL, DML, T-SQL

ODBCTimeout - ODBCTimeout dotazu

ExecuteOptions - dbFailOnError - podle definice metody Execute

R_Type - Recordset Type - podle definice metody OpenRecordset

Options - Recordset Options - podle definice metody OpenRecordset

LockEdit - Recordset LockEdit  - podle definice metody OpenRecordset

Popis funkce:

Funkce provede zadaný DDL nebo DML příkaz, případně vrátí objekt typu DAO.Recordset založený na hodnotě proměnné SQL (T-SQL příkaz). V případě, že ReturnRecords = True, je návratová hodnota odkaz na objekt typu DAO.Recordset. Je-li ReturnRecords = False, je návratová hodnota = 1 po úspěšném provedení dotazu nebo = 0 po neúspěšném provedení dotazu. DDL příkazy lze použít jen nad databází SQL serveru.

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladProvedSQL()
  Dim D As Database
  Dim DVario As Database
  Dim SQL As String
  Dim R As Recordset
  Dim Hlaska As String
 
  Const JmenoTabulky = "Test"
 
  Set D = DatabazeSQL("Data" & Format$(App.AktualniData, fmt0000))
  Set DVario = App.Databaze
 
  SQL = "CREATE Table dbo." & JmenoTabulky & " (ID int, Hodnota varchar(30), CONSTRAINT PK_Test PRIMARY KEY NONCLUSTERED (ID))"
  ProvedSQL D, SQL, False, , dbFailOnError
  SQL = "INSERT INTO " & JmenoTabulky & " (ID, Hodnota) VALUES (1, 'Hodnota_1')"
  ProvedSQL D, SQL, False, , dbFailOnError
  SQL = "INSERT INTO " & JmenoTabulky & " (ID, Hodnota) VALUES (2, 'Hodnota_2')"
  ProvedSQL D, SQL, False, , dbFailOnError
  SQL = "INSERT INTO " & JmenoTabulky & " (ID, Hodnota) VALUES (3, 'Hodnota_3')"
  ProvedSQL D, SQL, False, , dbFailOnError
 
  SQL = "SELECT * FROM " & JmenoTabulky & " ORDER BY ID"
  NastavDotazSQL JmenoTabulky, DVario, SQL, D.Connect, , True
 
  ZobrazData JmenoTabulky
 
  Set R = ProvedSQL(D, SQL, True, , , dbOpenDynaset, 0, dbOptimistic)
  If Not R.EOF Then
    Hlaska = "Záznamy v tabulce " & JmenoTabulky & ":"
    Hlaska = Hlaska & vbCrLf & "-------------------------------------"
    While Not R.EOF
      Hlaska = Hlaska & vbCrLf & "ID: " & R!ID & " , Hodnota: " & R!Hodnota
      R.MoveNext
    Wend
    Hlaska = Hlaska & vbCrLf & "Počet záznamů v tabulce " & JmenoTabulky & ": " & R.RecordCount
  End If
 
  MsgBox Hlaska, vbInformation
  DVario.QueryDefs.Delete (JmenoTabulky)
  SQL = "DROP Table dbo." & JmenoTabulky
  ProvedSQL D, SQL, False, , dbFailOnError
   
  R.Close
  Set R = Nothing
  Set DVario = Nothing
  Set D = Nothing
End Function
*** KONEC ***

10) StringToCollection

Function StringToCollection(Retezec As String, Optional Delimiter As String =  ";") As Collection

Popis parametrů:

Retezec - řetězec prvků oddělených znakem Delimiter (např. "Hodnota_1;Hodnota_2;Hodnota_3")

Delimiter - Oddělovač jednotlivých hodnot

Popis funkce:

Funkce převede zadaný řetězec prvků oddělených znakem <Delimiter> na kolekci.

Příklad (viz. Priklad_mSQL.mdb):

*** ZAČÁTEK ***
Function PrikladStringToCollection()
  Dim S As String
  Dim C As Collection
  Dim V As Variant
  Const Oddelovac = ";"
 
  S = "Hodnota_1;Hodnota_2; Hodnota_3 ; Hodnota_4"
  Set C = StringToCollection(S, Oddelovac)
  For Each V In C
    Debug.Print Trim$(V)
  Next V
  Set C = Nothing
End Function
*** KONEC ***