Параметри на низ за свързване за запазени спецификации
Access предоставя втори метод за описание на схемата на текстови файлове чрез използване на системни таблици MSysIMEXSpecs
и MSysIMEXColumns
за да запазите спецификациите. В предишната статия разгледах как schema.ini
може да се използва за описание на структурата на текстов файл. schema.ini
включва външен текстов файл, имплицитно посочен, но със системните таблици нямаме никакви външни зависимости. Структурата е доста различна, въпреки че има някои припокривания.
MSysIMEXSpecs
и MSysIMEXColumns
системна таблица
Вместо да разчитате на външна schema.ini, която да присъства в същата папка като текстовия файл, е възможно да се предоставят спецификации за текстов файл във всеки път, като се позовава на запазената спецификация в базата данни на Access. Когато използвате съветника за импортиране или експортиране, можете да запазите или заредите спецификациите чрез Advanced
бутон.
Щракването върху бутона за разширени ще покаже диалоговия прозорец за спецификация. В допълнение към зареждането или запазването на спецификациите, можете също да персонализирате спецификациите, като използвате показания диалогов прозорец.
Всеки път, когато се записва спецификация, тя се записва и в MSysIMEXSpecs
и MSysIMEXColumns
системни таблици. Таблиците не съществуват в нови файлове на Access и ще бъдат създадени само за първи път. Освен това можете да редактирате или дори да изтривате данни от тези таблици. Въпреки това те все още са системни таблици, така че са скрити по подразбиране. Ако искате да ги видите в навигационния екран, ще трябва да отидете в опциите за навигация и да активирате видимостта както за скрити, така и за системни обекти.
Ако сравните наличните опции в диалоговия прозорец с опциите, които имате в schema.ini
, можете да видите някои забележителни разлики. Например, schema.ini
позволява повече избор по отношение на това как датите или валутните суми могат да бъдат форматирани. Със запазените спецификации можем да контролираме форматирането на датата само от предварително зададен списък с възможни формати. Няма директни опции за валутни суми, защото използваме типа данни, за да посочим, че колона трябва да бъде импортирана като валута, независимо от форматирането. По този начин опциите на системните таблици са прости в сравнение със schema.ini. След това ще прегледаме структурата на таблиците.
MSysIMEXSpecs
структура
Таблицата представлява набор от запазени спецификации. За всеки ред таблицата описва цялостния формат на файла, подобно на втория раздел на schema.ini
. Има обаче различни опции, които трябва да се обмислят.
DateDelim
:Идентифицира разделителя за датите. Обикновено е/
или-
. Може да е само един или нула знак.DateFourDigitYear
:Поле Да/Не, което показва дали датите са форматирани с четири цифри за години. Ако е зададено да, стойности като10/10/20
не се считат за валидни дати.DateLeadingZeros
:Друго поле Да/Не, което показва дали датите имат водещи нули.DateOrder
:Определя форматирането на датата, което искаме да използваме. Следните кодове са валидни:0
:DMY1
:DYM
2
:MDY3
:MYD
4
:YDM5
:YMD
DecimalPoint
:Указва знака за разделяне на неразделната и дробната част за десетично число. Трябва да е само един знак.FieldSeparator
:Разделя полетата в текстовия файл. За CSV файл това би било,
(знак запетая). Освен това трябва да е само един знак.FileType
:Подобно наschema.ini
sCharacterSet
. Както бе споменато в предишната статия, можете да намерите всички възможни кодови страници, поддържани на вашата машина с Windows, погледнете в ключа на системния регистърComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. Той идентифицира кодирането на текстовия файл. Можете да използвате същия идентификатор на кодовата страница. Има обаче един проблем.FileType
се дефинира катоInteger
. Следователно кодова страница 65000 (например Unicode) ще бъде отчетена като -536. За да конвертирате идентификатор на кодова страница, по-голям от 32767, можете да използвате формулаCInt("&H" & Hex(x))
и за да обърнете операцията,CLng("&H" & Hex(x))
. Например, преобразуването на кодова страница 65000 ще премине презCInt("&H" & Hex(65000))
да се получи -536. За да обърнете,CLng("&H" & Hex(-536))
за да получите отново 65 000.SpecID
:Автономер за таблицата. Имайте предвид, че това не е първичният ключ на таблицата. Тази колона се използва сMSysIMEXColumns.SpecID
за свързване на записи. Между двете таблици обаче няма ограничение на външния ключ, така че могат да възникнат осиротели изтривания.SpecName
:Първичният ключ на таблицата. Той уникално идентифицира спецификацията. Всеки път, когато записвате спецификация, името, което предоставяте, ще бъде записано в това поле. Когато импортирате или експортирате с помощта на съветници, Access може автоматично да създаде нова спецификация, дори ако не сте използвалиAdvanced
и изрично го запазете.SpecType
:Може да бъде само1
за означаване на файл с разделители или2
за означаване на файл с фиксирана ширина.StartRow
:Определя реда в текстовия файл, за да започне сканирането за импортиране. Това може да бъде произволно число, така че е възможно да пропуснете няколко реда в горната част на файла. Може да бъде полезно за неправилно оформени текстови файлове, които имат несъответстващи заглавки.TextDelim
:Единичен знак, който ограничава текстова стойност. Може да се пропусне, ако текстът не е разделен. Ако можете да контролирате формата на текстовите файлове, обикновено е добра идея да имате текстови разделители. Текстов файл с текстови разделители ще остане добре оформен, дори ако текстът съдържа разделители на полета (напр. запетая) в текста.TimeDelim
:Показва символа-разделител, използван за времето. Може да бъде произволен единичен знак или да е празен и по подразбиране е:
(знак за двоеточие).
MSysIMEXColumns
структура
Таблицата описва отделните колони в текстовия файл и всички атрибути. Това приблизително съответства на третия раздел на schema.ini
. Има обаче допълнителни опции, като индексиране, което не съществува в schema.ini
.
Attributes
:Неизвестен. В моите тестове никога не съм го разбрал да е нещо освен0
. Ако знаете за какво е и как може да се използва, не се колебайте да оставите коментар.DataType
:Типът данни на колоната. Номерът трябва да съответства на DAO.DataTypeEnum.FieldName
:Име на колоната. Имайте предвид, че Access по подразбиране ще еFieldN
къдетоN
е цяло положително число.IndexType
:Може да е0
за да посочите без индекси,1
за да посочите обикновен индекс или2
за да посочите уникален индекс.SkipColumns
:Булева стойност показва дали колоната трябва да бъде пропусната. Ако бъде пропусната, няма да бъде достъпна за запитване или четене.SpecID
:Съответства наMSysIMEXSpecs.SpecID
автономер. Имайте предвид, че няма ограничения за външни ключове между двете таблици. Ако сте изтрили записи, може да има осиротели записи отMSysIMEXSpecs
маса.Start
:Цяло число, показващо кога колоната започва в текстовия файл. Това е важно за файл с фиксирана ширина. За файлове с разделители Access все още ще използва позицията на колоната на първия ред, където се намира полето, за да определи началото. Освен това Access ще използва колоната, за да загатне реда на колоните.Width
:Друго цяло число, което управлява размера на колоната. При файл с фиксирана ширина това също е важно. Имайте предвид, че Microsoft Access ще използва тази информация за типове данни с променлива дължина, като например текст или двоичен файл, за да оразмери колоната по съответния начин дори във файл с разделители.
Низ за връзка, използващ спецификации:DSN
параметър
В предишната статия видяхте, че няма промяна в низа за връзка, за да се използва файл schema.ini. Ние имплицитно се позовахме на schema.ini
просто като се уверите, че той съществува в същата папка, където присъства текстовият файл, който свързваме или отваряме. Въпреки това, за да използвате запазените спецификации от системата, е необходимо да предоставим информацията във връзката. Правим това, като попълваме DSN
параметър. Стойността трябва да се отнася до името на запазената спецификация, както е записано в MSysIMEXSpecs.SpecName
колона.
Ето един пример:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
Достъпът ще изисква както DSN параметър, така и IMEX параметри да бъдат предоставени в низа за връзка. Ако се опитате да пропуснете IMEX
параметър, ще получите грешка, че Access не може да намери спецификацията, въпреки че спецификацията съществува в MSysIMEXSpecs
маса. От това следва също, че таблицата трябва да съдържа запис с SpecName
съдържащ същата стойност, предоставена в DSN
параметър.
Както беше отбелязано в по-ранната статия, отделните текстови файлове се третират като „таблица“ в „база данни“ на папката. Така че въпреки че низът за връзка не сочи към конкретен текстов файл, низът за връзка ще използва посочените спецификации за всички текстови файлове, отворени чрез връзката.
Въпреки че е възможно да се използват други параметри, както е обсъдено в същата статия, трябва да сте наясно, че когато е в конфликт, запазената спецификация ще има предимство пред низа за връзка. Поради тази причина е най-добре да използвате минимален набор от параметри, необходими за успешно свързване с текстов файл, и да оставите запазените спецификации да свършат работата по описване как да четете текстовия файл.
Заключение
Научихте алтернативен начин да опишете структурата на текстовия файл, без да използвате външен файл. Разгледахме как Access използва две системни таблици за съхраняване на спецификациите. И накрая, вие също научихте как да посочите запазените спецификации с помощта на DSN
параметър. На този етап покрихме всичко, което трябва да знаем за свързването или отварянето на текстови файлове в Access. В следващата статия ще обединим информацията, научена в останалата част от поредицата. Ще разгледаме и използването на низовете за свързване в заявките на Access за подход без код.