Parametry ciągu połączenia dla zapisanych specyfikacji
Access udostępnia drugą metodę opisywania schematu plików tekstowych za pomocą tabel systemowych MSysIMEXSpecs
i MSysIMEXColumns
aby zapisać specyfikacje. W poprzednim artykule omówiłem, jak schema.ini
może służyć do opisu struktury pliku tekstowego. schema.ini
dotyczyło zewnętrznego pliku tekstowego, do którego odwołuje się niejawnie, ale w przypadku tabel systemowych nie mamy żadnych zewnętrznych zależności. Struktura jest dość inna, mimo że niektóre nakładają się.
MSysIMEXSpecs
i MSysIMEXColumns
tabela systemowa
Zamiast polegać na tym, że zewnętrzny plik schema.ini znajduje się w tym samym folderze co plik tekstowy, można podać specyfikacje pliku tekstowego w dowolnej ścieżce, odwołując się do zapisanej specyfikacji w bazie danych programu Access. Korzystając z kreatora importu lub eksportu, możesz zapisać lub załadować specyfikacje za pomocą Advanced
przycisk.
Kliknięcie przycisku Zaawansowane spowoduje wyświetlenie okna dialogowego specyfikacji. Oprócz wczytywania lub zapisywania specyfikacji możesz również dostosować specyfikacje za pomocą pokazanego okna dialogowego.
Za każdym razem, gdy specyfikacja jest zapisywana, jest ona zapisywana w obu MSysIMEXSpecs
i MSysIMEXColumns
tabele systemowe. Tabele nie istnieją w nowych plikach programu Access i zostaną utworzone tylko za pierwszym razem. Co więcej, możesz edytować, a nawet usuwać dane z tych tabel. Mimo to nadal są tabelami systemowymi, więc są domyślnie ukryte. Jeśli chcesz je zobaczyć w panelu nawigacji, musisz przejść do Opcji nawigacji i włączyć widoczność zarówno dla obiektów ukrytych, jak i systemowych.
Jeśli porównasz dostępne opcje w oknie dialogowym z opcjami, które masz w schema.ini
, widać kilka znaczących różnic. Na przykład schema.ini
daje więcej możliwości wyboru sposobu formatowania dat lub kwot walutowych. Dzięki zapisanym specyfikacjom możemy kontrolować tylko formatowanie daty z wstępnie ustawionej listy możliwych formatów. Nie ma bezpośrednich opcji dla kwot walutowych, ponieważ używamy Typu danych do wskazania, że kolumna powinna być importowana jako waluta niezależnie od formatowania. W ten sposób opcje tabel systemowych są proste w porównaniu do schema.ini. Następnie przyjrzymy się strukturze tabel.
MSysIMEXSpecs
struktura
Tabela reprezentuje zestaw zapisanych specyfikacji. Dla każdego wiersza tabela opisuje ogólny format pliku, podobnie jak w drugiej sekcji schema.ini
. Istnieją jednak różne opcje, które należy rozważyć.
DateDelim
:Identyfikuje ogranicznik dat. Zazwyczaj jest to/
lub-
. Może to być tylko jeden lub zero znaków.DateFourDigitYear
:pole Tak/Nie wskazujące, czy daty są sformatowane za pomocą czterech cyfr oznaczających lata. Jeśli ustawione na tak, wartości takie jak10/10/20
nie będą uważane za prawidłowe daty.DateLeadingZeros
:Kolejne pole Tak/Nie wskazujące, czy daty mają wiodące zera.DateOrder
:Określa formatowanie daty, którego chcemy użyć. Poprawne są następujące kody:0
:DMY1
:DYM
2
:MDY3
:MYD
4
:JDM5
:YMD
DecimalPoint
:Wskazuje znak do oddzielenia części całkowitej i ułamkowej dla liczby dziesiętnej. Musi to być tylko jeden znak.FieldSeparator
:Oddziela pola w pliku tekstowym. W przypadku pliku CSV byłby to,
(znak przecinka). Ponadto musi to być tylko jeden znak.FileType
:Podobne doschema.ini
'sCharacterSet
. Jak wspomniano w poprzednim artykule, możesz zlokalizować wszystkie możliwe strony kodowe obsługiwane na komputerze z systemem Windows, zajrzyj do klucza rejestruComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. Określa kodowanie pliku tekstowego. Możesz użyć tego samego identyfikatora strony kodowej. Jest jednak jeden problem.FileType
jest zdefiniowany jakoInteger
. Dlatego strona kodowa 65000 (np. Unicode) zostanie zgłoszona jako -536. Aby przekonwertować dowolny identyfikator strony kodowej większy niż 32767, możesz użyć formułyCInt("&H" & Hex(x))
i odwrócić operację,CLng("&H" & Hex(x))
. Na przykład, konwersja strony kodowej 65000 przejdzie przezCInt("&H" & Hex(65000))
dać -536. Aby odwrócić,CLng("&H" & Hex(-536))
aby odzyskać 65000 z powrotem.SpecID
:Autonumerowanie tabeli. Zauważ, że nie jest to klucz podstawowy tabeli. Ta kolumna jest używana zMSysIMEXColumns.SpecID
odnosić zapisy. Jednak nie ma ograniczenia klucza obcego między dwiema tabelami, więc mogą wystąpić osierocone usunięcia.SpecName
:klucz podstawowy tabeli. To jednoznacznie identyfikuje specyfikację. Za każdym razem, gdy zapiszesz specyfikację, podana przez Ciebie nazwa zostanie odnotowana w tym polu. Podczas importowania lub eksportowania za pomocą kreatorów program Access może automatycznie utworzyć nową specyfikację, nawet jeśli nie użyto opcjiAdvanced
i wyraźnie go zapisz.SpecType
:Może to być tylko1
oznaczający rozdzielany plik lub2
aby oznaczyć plik o stałej szerokości.StartRow
:Określa wiersz w pliku tekstowym, aby rozpocząć skanowanie w celu importowania. Może to być dowolna liczba, dzięki czemu można pominąć kilka wierszy na górze pliku. Może być przydatny w przypadku źle sformułowanych plików tekstowych, które mają niezgodne nagłówki.TextDelim
:Pojedynczy znak, który ogranicza wartość tekstową. Można go pominąć, jeśli tekst nie jest rozdzielany. Jeśli możesz kontrolować format plików tekstowych, zwykle dobrym pomysłem jest posiadanie ograniczników tekstu. Plik tekstowy z ogranicznikami tekstu pozostanie dobrze sformułowany, nawet jeśli tekst zawiera separatory pól (np. przecinek) w tekście.TimeDelim
:Wskazuje znak ogranicznika używany dla czasu. Może to być dowolny pojedynczy znak lub być pusty i domyślnie:
(znak dwukropka).
MSysIMEXColumns
struktura
Tabela opisuje poszczególne kolumny w pliku tekstowym oraz wszelkie atrybuty. To mniej więcej odpowiada trzeciej sekcji schema.ini
. Istnieją jednak dodatkowe opcje, takie jak indeksowanie, które nie istnieją w schema.ini
.
Attributes
:Nieznany. W moich testach nigdy nie udało mi się uzyskać czegoś innego niż0
. Jeśli wiesz, do czego służy i jak można go używać, zostaw komentarz.DataType
:typ danych kolumny. Numer powinien odpowiadać DAO.DataTypeEnum.FieldName
:nazwa kolumny. Pamiętaj, że program Access będzie domyślnie ustawiony naFieldN
gdzieN
jest dodatnią liczbą całkowitą.IndexType
:może być0
aby wskazać brak indeksów,1
aby wskazać zwykły indeks lub2
aby wskazać unikalny indeks.SkipColumns
:Wartość logiczna wskazuje, czy kolumnę należy pominąć. Jeśli zostanie pominięty, nie będzie dostępny do wysyłania zapytań ani czytania.SpecID
:OdpowiadaMSysIMEXSpecs.SpecID
numer samochodu. Zauważ, że między dwiema tabelami nie ma ograniczeń kluczy obcych. Jeśli usunąłeś rekordy, mogą być osierocone rekordy zMSysIMEXSpecs
stół.Start
:Liczba całkowita wskazująca, kiedy kolumna zaczyna się w pliku tekstowym. Jest to istotne dla pliku o stałej szerokości. W przypadku plików rozdzielanych program Access będzie nadal używał pozycji kolumny pierwszego wiersza, w którym znajduje się pole, w celu określenia początku. Ponadto Access użyje kolumny, aby zasugerować porządek porządkowy kolumn.Width
:Kolejna liczba całkowita określająca rozmiar kolumny. W przypadku pliku o stałej szerokości jest to również istotne. Należy pamiętać, że program Microsoft Access użyje tych informacji dla typów danych o zmiennej długości, takich jak tekst lub binarny, do odpowiedniego rozmiaru kolumny, nawet w pliku rozdzielanym.
Ciąg połączenia przy użyciu specyfikacji:DSN
parametr
W poprzednim artykule zauważyłeś, że nie wprowadzono żadnych zmian w parametrach połączenia w celu użycia pliku schema.ini. Niejawnie odwołaliśmy się do schema.ini
po prostu upewniając się, że istnieje w tym samym folderze, w którym znajduje się plik tekstowy, który łączymy lub otwieramy. Jednak korzystanie z zapisanych specyfikacji z systemu wymaga podania przez nas informacji w połączeniu. Robimy to, wypełniając DSN
parametr. Wartość musi odnosić się do nazwy zapisanej specyfikacji, zapisanej w MSysIMEXSpecs.SpecName
kolumna.
Oto przykład:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
Program Access będzie wymagał podania w ciągu połączenia zarówno parametru DSN, jak i parametrów IMEX. Jeśli spróbujesz pominąć IMEX
zostanie wyświetlony błąd informujący, że program Access nie może znaleźć specyfikacji, mimo że specyfikacja istnieje w MSysIMEXSpecs
stół. Wynika z tego również, że tabela musi zawierać rekord z SpecName
zawierające tę samą wartość podaną w DSN
parametr.
Jak wspomniano we wcześniejszym artykule, poszczególne pliki tekstowe są traktowane jako „tabela” w „bazie danych” folderu. Tak więc, chociaż ciąg połączenia nie wskazuje określonego pliku tekstowego, ciąg połączenia użyje określonych specyfikacji we wszystkich plikach tekstowych otwieranych za pośrednictwem połączenia.
Chociaż możliwe jest użycie innych parametrów, jak omówiono w tym samym artykule, należy pamiętać, że w przypadku konfliktu zapisana specyfikacja będzie miała pierwszeństwo przed ciągiem połączenia. Z tego powodu najlepiej jest użyć minimalnego zestawu parametrów wymaganych do pomyślnego połączenia z plikiem tekstowym i pozwolić, aby zapisane specyfikacje wykonały zadanie opisania sposobu odczytywania pliku tekstowego.
Wniosek
Poznałeś alternatywny sposób opisywania struktury pliku tekstowego bez korzystania z pliku zewnętrznego. Przyjrzeliśmy się, jak program Access używa dwóch tabel systemowych do przechowywania specyfikacji. Wreszcie, nauczyłeś się również określać zapisane specyfikacje za pomocą DSN
parametr. W tym momencie omówiliśmy wszystko, co musimy wiedzieć o łączeniu lub otwieraniu plików tekstowych w programie Access. W następnym artykule zebramy razem informacje zdobyte w pozostałej części serii. Przyjrzymy się również używaniu parametrów połączenia w zapytaniach programu Access, aby uzyskać podejście bez kodu.