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) |
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 ***