Parametry připojovacího řetězce pro uložené specifikace
Access poskytuje druhou metodu popisu schématu textových souborů pomocí systémových tabulek MSysIMEXSpecs
a MSysIMEXColumns
pro uložení specifikací. V předchozím článku jsem popsal, jak schema.ini
lze použít k popisu struktury textového souboru. Soubor schema.ini
zahrnoval externí textový soubor, na který se implicitně odkazuje, ale se systémovými tabulkami nemáme žádné externí závislosti. Struktura je poměrně odlišná, i když existují určité překrývání.
MSysIMEXSpecs
a MSysIMEXColumns
systémová tabulka
Namísto spoléhání se na to, že externí schema.ini bude přítomen ve stejné složce jako textový soubor, je možné poskytnout specifikace pro textový soubor v libovolné cestě odkazem na uloženou specifikaci v databázi Accessu. Když použijete průvodce importem nebo exportem, můžete uložit nebo načíst specifikace pomocí Advanced
tlačítko.
Kliknutím na tlačítko Upřesnit se zobrazí dialogové okno se specifikacemi. Kromě načítání nebo ukládání specifikací můžete specifikace také přizpůsobit pomocí zobrazeného dialogu.
Kdykoli je specifikace uložena, je zapsána do obou MSysIMEXSpecs
a MSysIMEXColumns
systémové tabulky. Tabulky v nových souborech Accessu neexistují a budou vytvořeny pouze poprvé. Kromě toho můžete upravovat nebo dokonce mazat data z těchto tabulek. Přesto se stále jedná o systémové tabulky, takže jsou ve výchozím nastavení skryté. Pokud je chcete vidět v navigačním panelu, budete muset přejít do Možnosti navigace a povolit viditelnost pro skryté i systémové objekty.
Pokud porovnáte dostupné možnosti v dialogovém okně s možnostmi, které máte v schema.ini
, můžete vidět některé výrazné rozdíly. Například schema.ini
umožňuje více možností s ohledem na to, jak mohou být formátována data nebo částky v měně. S uloženými specifikacemi můžeme řídit formátování data pouze z přednastaveného seznamu možných formátů. Neexistují žádné přímé možnosti pro částky v měně, protože používáme typ dat k označení, že sloupec by měl být importován jako měna bez ohledu na formátování. Možnosti systémových tabulek jsou tedy ve srovnání se schema.ini jednoduché. Dále zkontrolujeme strukturu tabulek.
MSysIMEXSpecs
struktura
Tabulka představuje sadu uložených specifikací. U každého řádku tabulka popisuje celkový formát souboru, podobně jako ve 2. sekci schema.ini
. Existují však různé možnosti, které je třeba zvážit.
DateDelim
:Identifikuje oddělovač pro data. Obvykle je to/
nebo-
. Může to být pouze jeden nebo žádný znak.DateFourDigitYear
:Pole Ano/Ne udávající, zda jsou data formátována čtyřmi číslicemi pro roky. Pokud je nastaveno na ano, hodnoty jako10/10/20
nebudou považována za platná data.DateLeadingZeros
:Další pole Ano/Ne udávající, zda data obsahují nuly na začátku.DateOrder
:Určuje formátování data, které chceme použít. Následující kódy jsou platné:0
:DMY1
:DYM
2
:MDY3
:MYD
4
:YDM5
:YMD
DecimalPoint
:Označuje znak pro oddělení integrální a zlomkové části pro desetinné číslo. Musí to být přesně jen jeden znak.FieldSeparator
:Odděluje pole v textovém souboru. U souboru CSV by to bylo,
(čárka). Také to musí být přesně jeden znak.FileType
:Podobné jakoschema.ini
CharacterSet
. Jak bylo zmíněno v předchozím článku, můžete najít všechny možné kódové stránky podporované na vašem počítači se systémem Windows, podívejte se do klíče registruComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. Identifikuje kódování textového souboru. Můžete použít stejný identifikátor kódové stránky. Je tu však jeden problém.FileType
je definován jakoInteger
. Kódová stránka 65000 (např. Unicode) by proto byla hlášena jako -536. Chcete-li převést jakýkoli identifikátor kódové stránky větší než 32767, můžete použít vzorecCInt("&H" & Hex(x))
a pro obrácení operaceCLng("&H" & Hex(x))
. Například převod kódové stránky 65000 by prošel přesCInt("&H" & Hex(65000))
výtěžek -536. Pro obráceníCLng("&H" & Hex(-536))
získat 65 000 zpět.SpecID
:Automatické číslování tabulky. Všimněte si, že toto není primární klíč tabulky. Tento sloupec se používá sMSysIMEXColumns.SpecID
vztahovat záznamy. Mezi těmito dvěma tabulkami však není žádné omezení cizího klíče, takže může dojít k osamoceným smazáním.SpecName
:Primární klíč tabulky. Jednoznačně identifikuje specifikaci. Kdykoli uložíte specifikaci, jméno, které zadáte, bude zaznamenáno v tomto poli. Když importujete nebo exportujete pomocí průvodců, Access může automaticky vytvořit novou specifikaci, i když jste nepoužiliAdvanced
a výslovně jej uložit.SpecType
:Může být pouze1
k označení souboru s oddělovači nebo2
což znamená soubor s pevnou šířkou.StartRow
:Určuje řádek v textovém souboru pro zahájení skenování pro import. To může být libovolné číslo, takže je možné přeskočit několik řádků v horní části souboru. To může být užitečné pro špatně tvarované textové soubory, které mají nekonformní záhlaví.TextDelim
:Jeden znak, který odděluje textovou hodnotu. Pokud text není oddělen, lze jej vynechat. Pokud můžete ovládat formát textových souborů, je obvykle dobré mít textové oddělovače. Textový soubor s oddělovači textu zůstane ve správném formátu, i když text v textu obsahuje oddělovače polí (např. čárku).TimeDelim
:Označuje oddělovací znak použitý pro čas. Může to být libovolný jednotlivý znak nebo může být prázdné a výchozí je:
(dvojtečka).
MSysIMEXColumns
struktura
Tabulka popisuje jednotlivé sloupce v textovém souboru a případné atributy. To zhruba odpovídá třetí části schema.ini
. Existují však další možnosti, jako je indexování, které v schema.ini
neexistuje .
Attributes
:Neznámý. V mých testech jsem nikdy nedostal nic jiného než0
. Pokud víte, k čemu slouží a jak se dá použít, klidně zanechte komentář.DataType
:Datový typ sloupce. Číslo by mělo odpovídat DAO.DataTypeEnum.FieldName
:Název sloupce. Všimněte si, že Access bude ve výchozím nastaveníFieldN
kdeN
je kladné celé číslo.IndexType
:Může být0
pro označení žádných indexů1
k označení běžného indexu nebo2
k označení jedinečného indexu.SkipColumns
:Booleovská hodnota označuje, zda má být sloupec přeskočen. Pokud je přeskočen, nebude k dispozici pro dotazování ani čtení.SpecID
:OdpovídáMSysIMEXSpecs.SpecID
automatické číslování. Všimněte si, že mezi těmito dvěma tabulkami nejsou žádná omezení cizího klíče. Pokud jste smazali záznamy, mohou existovat osiřelé záznamy zeMSysIMEXSpecs
stůl.Start
:Celé číslo označující začátek sloupce v textovém souboru. To je důležité pro soubor s pevnou šířkou. U souborů s oddělovači bude Access k určení začátku stále používat pozici sloupce prvního řádku, kde se pole nachází. Kromě toho Access použije sloupec k určení pořadového řazení sloupců.Width
:Další celé číslo, kterým se řídí velikost sloupce. Na pilníku s pevnou šířkou je to také významné. Uvědomte si, že Microsoft Access použije tyto informace pro datové typy s proměnlivou délkou, jako je text nebo binární, k odpovídající velikosti sloupce i v souboru s oddělovači.
Řetězec připojení pomocí specifikací:DSN
parametr
V předchozím článku jste viděli, že pro použití souboru schema.ini nedošlo k žádné změně připojovacího řetězce. Implicitně jsme odkazovali na schema.ini
jednoduše zajištěním, že existuje ve stejné složce, kde je přítomen textový soubor, který propojujeme nebo otevíráme. Použití uložených specifikací ze systému však vyžaduje, abychom dodali informace ve spojení. Toho dosáhneme vyplněním DSN
parametr. Hodnota musí odkazovat na název uložené specifikace, jak je zaznamenáno v MSysIMEXSpecs.SpecName
sloupec.
Zde je ukázka:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
Přístup bude vyžadovat, aby byly v připojovacím řetězci zadány parametry DSN i IMEX. Pokud se pokusíte vynechat IMEX
parametr, zobrazí se chyba o tom, že Access nemůže najít specifikaci, přestože specifikace existuje v MSysIMEXSpecs
stůl. Z toho také vyplývá, že tabulka musí obsahovat záznam s SpecName
obsahující stejnou hodnotu zadanou v DSN
parametr.
Jak bylo uvedeno v předchozím článku, s jednotlivými textovými soubory se zachází jako s „tabulkou“ v „databázi“ složky. Takže i když připojovací řetězec neukazuje na konkrétní textový soubor, připojovací řetězec použije specifikované specifikace pro všechny textové soubory otevřené prostřednictvím připojení.
I když je možné použít jiné parametry, jak je popsáno ve stejném článku, měli byste si být vědomi toho, že v případě konfliktu bude mít uložená specifikace přednost před připojovacím řetězcem. Z tohoto důvodu je nejlepší použít minimální sadu parametrů potřebných k úspěšnému připojení k textovému souboru a nechat uložené specifikace, aby popsaly, jak textový soubor číst.
Závěr
Naučili jste se alternativní způsob, jak popsat strukturu textového souboru bez použití externího souboru. Podívali jsme se, jak Access používá dvě systémové tabulky k ukládání specifikací. Nakonec jste se také naučili, jak specifikovat uložené specifikace pomocí DSN
parametr. V tuto chvíli jsme probrali vše, co potřebujeme vědět o propojování nebo otevírání textových souborů v Accessu. V příštím článku shrneme informace získané ve zbytku seriálu dohromady. Podíváme se také na použití připojovacích řetězců v dotazech Access pro přístup bez kódu.