Funkce MsgVyber
Použití funkce umožňuje vývojáři zobrazit záznamy s možností jejich výběru.
Použití funkce má pro vývojáře tyto výhody:
1. Zobrazení dialogu bez zdlouhavého designování formuláře. |
2. Dialog ve stylu Windows Vista. |
3. Možnosti rozdělení textu do jednotlivých sekcí podle významu. |
Syntaxe
MsgVyber(Zdroj As Variant, RozsirenyZdroj As Variant, VyberPodle As String, DB As Database, Optional Titulek As String, Optional HlavniInstrukce As String, Optional SekundarniInstrukce As String, Optional ByVal TypVyberu As avTypVyberu = avNasobnyVyber, Optional Poznamka As String, Optional NazvyPoli As String, Optional TitulkyPoli As String, Optional SirkyPoli As String, Optional VybraneZaznamy As String, Optional Vyska As Integer = 7000, Optional Sirka As Integer = 9000, Optional ZParametry As String, Optional ZNabidnoutZobrazeniVKontextu As Boolean = True, Optional ZPouzitPosledniZobrazeniVKontextu As Boolean = False, Optional ByVal CancelError As Boolean = False, Optional ByVal TypNavratoveHodnoty As avCollectionItems = avPKValue, Optional CekatPriZadnemVyberu As Boolean, Optional ByVal VlastnostiPoli As String) As Collection
Parametry
Zdroj As Variant | viz Zdroje dat a příklady. |
RozsirenyZdroj As Variant | viz Zdroje dat a příklady. |
VyberPodle As String | Definuje pole, podle kterého se vybírají záznamy. |
DB As Database | Databáze odkud se volá funkce. |
Optional Titulek As String | Titulek dialogu. |
Optional HlavniInstrukce As String | Hlavní instrukce dialogu. |
Optional SekundarniInstrukce As String | Sekundární instrukce dialogu. |
Optional JednoduchyVyber As Boolean = False | Určuje, zda se jedná o jednoduchý či násobný výběr. |
Optional Poznamka As String | Poznámka v zápatí. |
Optional NazvyPoli As String | Seznam polí oddělený středníky. Pokud je zdoj pole či kolekce tak určuje jak se
dané pole mají jmenovat. Při ostatních zdrojích tento parametr může určovat, které sloupce se mají zobrazit. |
Optional TitulkyPoli As String | Titulky polí oddělené středníky. |
Optional SirkyPoli As String | Šířky polí oddělelené středníky. |
Optional VybraneZaznamy As String | Seznam polí, které se mají vybrat při otevření oddělený středníky. |
Optional Vyska As Integer = 7000 | Výška dialogu. |
Optional Sirka As Integer = 9000 | Šířka dialogu. |
Optional ZParametry As String | Seznam hodnot parametrů zobrazení oddělený středníky. |
Optional ZNabidnoutZobrazeniVKontextu As Boolean = True | Pokud True, tak se zobrazí combo s výběrem ostatních zobrazení v daném kontextu. |
Optional ZPouzitPosledniZobrazeniVKontextu As Boolean = False | Pokud True, tak se vyhledá poslední použité zobrazení v daném kontextu daným uživatelem. Pokud nebude nalezeno, použije se zobrazení z prarametru RozsirenyZdroj. |
CancelError | Tlačítko Cancel vyvolá výjimku. |
TypNavratoveHodnoty | Určuje typ návrátové hodnoty. Vraci se vždy kolekce. Kolekce může obsahovat seznam primárních klíčů nebo seznam Dictionary s opisem záznamů. |
CekatPriZadnemVyberu | Určuje, zda se má code zastavit i ve chvíli, kdy se nevybírá záznam. |
VlastnostiPoli | Určuje vlastnosti polí formuláře viz. příklad. |
Základní příklad
Private Sub TestMsgVyberZdrojCodeDbSQL()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
SourceExtended = "SELECT Firmy.Firma, Firmy.Nazev_firmy, Firmy.Mesto, Firmy.Stat FROM Firmy;"
Set Hodnoty = MSGVyber(CodeDb, SourceExtended, "Firma", CodeDb)
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
Zdroje dat a příklady
Funkce přebírá tyto kombinace zdroje dat:
1. SQL string
Zdroj = Database As Database
RozsirenyZdroj = SQL As String
Private Sub TestMsgVyberZdrojCodeDbSQL()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
SourceExtended = "SELECT Firmy.Firma, Firmy.Nazev_firmy, Firmy.Mesto, Firmy.Stat FROM Firmy;"
Set Hodnoty = MSGVyber(CodeDb, SourceExtended, "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
2. Uložený dotaz
Zdroj = Database As Database
RozsirenyZdroj = Název dotazu As String
Private Sub TestMsgVyberZdrojCodeDbQuery()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
SourceExtended = "D_Kontakty"
Set Hodnoty = MSGVyber(CodeDb, SourceExtended, "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
3. SQL String z cizí databáze
Zdroj = Cizí databáze As String
RozsirenyZdroj = SQL As String
Private Sub TestMsgVyberZdrojForeignDbSQL()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
SourceExtended = "SELECT Firmy.Firma, Firmy.Nazev_firmy, Firmy.Mesto, Firmy.Stat FROM Firmy"
Set Hodnoty = MSGVyber("DATA####", SourceExtended, "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
4. Uložený dotaz z VarioLib
Zdroj = ""
RozsirenyZdroj = Název dotazu As String
Private Sub TestMsgVyberZdrojUlozenyDotaz()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
SourceExtended = "R_Agendy"
Set Hodnoty = MSGVyber("", SourceExtended, "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
5. Collection
Zdroj = Collection As Collection
RozsirenyZdroj = ""
Private Sub TestMsgVyberZdrojCollection()
Dim Hodnoty As Collection
Dim V As Variant
Dim colHodnoty As Collection
Set colHodnoty = New Collection
colHodnoty.Add "Kontakt A"
colHodnoty.Add "Kontakt B"
colHodnoty.Add "Kontakt C"
colHodnoty.Add "Kontakt D"
Set Hodnoty = MSGVyber(colHodnoty, "", "Kontakt", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Kontakt", "Kontakt", "2000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
Set colHodnoty = Nothing
End Sub
6. Array
Zdroj = Array As Variant
RozsirenyZdroj = ""
Private Sub TestMsgVyberZdrojArray()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
Dim R As Recordset
Dim arrHodnoty() As Variant
SourceExtended = "SELECT Firmy.Firma, Firmy.Nazev_firmy, Firmy.Mesto, Firmy.Stat FROM Firmy"
Set R = CodeDb.OpenRecordset(SourceExtended, dbOpenDynaset, dbSeeChanges, dbOptimistic)
R.MoveLast
R.MoveFirst
arrHodnoty = R.GetRows(R.RecordCount)
Set Hodnoty = MSGVyber(arrHodnoty, "", "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy;Mesto;Stat", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
R.Close
Set R = Nothing
Set Hodnoty = Nothing
End Sub
7. Recordset
Zdroj = Recordset As Recordset
RozsirenyZdroj = ""
Private Sub TestMsgVyberZdrojRecordset()
Dim Hodnoty As Collection
Dim SourceExtended As String
Dim V As Variant
Dim R As Recordset
SourceExtended = "SELECT Firmy.Firma, Firmy.Nazev_firmy, Firmy.Mesto, Firmy.Stat FROM Firmy"
Set R = CodeDb.OpenRecordset(SourceExtended, dbOpenDynaset, dbSeeChanges, dbOptimistic)
Set Hodnoty = MSGVyber(R, "", "Firma", CodeDb, "Titulek", "Výběr kontaktů", "Vyberte kontakty", False, "Poznámka", "Firma;Nazev_firmy", "Kontakt", "2000;3000", "")
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
R.Close
Set R = Nothing
Set Hodnoty = Nothing
End Sub
8. Zobrazení
Zdroj = Kontext Zobrazení as String
RozsirenyZdroj = IDZobrazeni as String
Private Sub TestMsgVyberZdrojZobrazeni()
Dim Hodnoty As Collection
Dim V As Variant
Set Hodnoty = MsgVyber("Fakturace", "Doklady/Fakturace 01", "PK", CodeDb, "Fakturace zakázek", "Fakturace zakázek", "Vyberte podklady pro fakturaci", , , , , , , , , """;A - Storex", True, True)
If Not Hodnoty Is Nothing Then
For Each V In Hodnoty
Debug.Print CStr(V)
Next V
End If
Set Hodnoty = Nothing
End Sub
Příklad nastavení vlastností polí
Sub TestMsgVyberVlastnostiPoli()
On Error GoTo Chyba
MsgVyber "DATA####", "SELECT Polozky_dokladu.Cislo_dokladu, Polozky_dokladu.Popis, Polozky_dokladu.Mnozstvi, Polozky_dokladu.Mnozstvi AS MnozstviNew FROM Polozky_dokladu", "RowGuid", CodeDb, , "Editace množství", VlastnostiPoli:="[MnozstviNew].locked=false;[MnozstviNew].ValidationRule=""<=[Mnozstvi]"";[MnozstviNew].ValidationText=""Množství new musí být menší než množství"";[MnozstviNew].ControlType=111;[MnozstviNew].RowSourceType=""Value list"";[MnozstviNew].RowSource=""1;2;3;4;5"";[MnozstviNew].BackColor=16423586"
GoTo Konec
Chyba:
If Vario.Chyby.Chyba(Err) = vbRetry Then
Resume
Else
Resume Konec
End If
Konec:
End Sub
"[Cislo_dokladu].OnDblClick=""=RunRun('<SlozkaVaria>Doplnky\Rezervace_Stigma\Rezervace_Stigma.ZobrazitSeznamPolozek', [Cislo_dokladu])"""