Anslutningssträngparametrar för sparade specifikationer
Access tillhandahåller en andra metod för att beskriva textfilers schema genom att använda systemtabellerna MSysIMEXSpecs
och MSysIMEXColumns
för att spara specifikationerna. I den föregående artikeln täckte jag hur schema.ini
kan användas för att beskriva en textfils struktur. schema.ini
involverade en extern textfil som implicit refereras till men med systemtabellerna har vi inga externa beroenden. Strukturen är ganska annorlunda även om det finns vissa överlappningar.
MSysIMEXSpecs
och MSysIMEXColumns
systemtabell
Istället för att förlita sig på att ett externt schema.ini finns i samma mapp som textfilen, är det möjligt att tillhandahålla specifikationer för en textfil i valfri sökväg genom att referera till den sparade specifikationen i Access-databasen. När du använder import- eller exportguiden kan du spara eller ladda specifikationerna genom Advanced
knapp.
Genom att klicka på den avancerade knappen visas dialogrutan för specifikation. Förutom att ladda eller spara specifikationerna kan du också anpassa specifikationerna med hjälp av dialogrutan som visas.
Närhelst en specifikation sparas skrivs den till både MSysIMEXSpecs
och MSysIMEXColumns
systemtabeller. Tabellerna finns inte i en ny Access-fil och kommer endast att skapas vid första gången. Dessutom kan du redigera eller till och med ta bort data från dessa tabeller. Trots det är de fortfarande systemtabeller så de är dolda som standard. Om du vill se dem i navigeringsfönstret måste du gå till Navigationsalternativ och aktivera synlighet för både dolda objekt och systemobjekt.
Om du jämför de tillgängliga alternativen i dialogrutan med alternativen du har i schema.ini
, kan du se några anmärkningsvärda skillnader. Till exempel, schema.ini
tillåter fler val när det gäller hur datum eller valutabelopp kan formateras. Med de sparade specifikationerna kan vi endast styra datumformatering från en förinställd lista med möjliga format. Det finns inga direkta alternativ för valutabelopp eftersom vi använder Datatypen för att indikera att en kolumn ska importeras som valuta oavsett formatering. Således är systemtabellernas alternativ enkla jämfört med schema.ini. Vi kommer att se över tabellernas struktur härnäst.
MSysIMEXSpecs
struktur
Tabellen representerar en uppsättning sparade specifikationer. För varje rad beskriver tabellen det övergripande formatet för filen, liknande den andra delen av schema.ini
. Det finns dock olika alternativ som måste övervägas.
DateDelim
:Identifierar avgränsaren för datumen. Det är vanligtvis/
eller-
. Det kan bara vara ett eller noll tecken.DateFourDigitYear
:Ett Ja/Nej-fält som anger om datumen är formaterade med fyra siffror för år. Om inställt på Ja, värden som10/10/20
skulle inte anses vara giltiga datum.DateLeadingZeros
:Ytterligare ett Ja/Nej-fält som anger om datumen har inledande nollor.DateOrder
:Bestämmer vilken datumformatering vi vill använda. Följande koder är giltiga:0
:DMY1
:DYM
2
:MDY3
:MYD
4
:YDM5
:YMD
DecimalPoint
:Indikerar tecknet för att separera integral- och bråkdelen för ett decimaltal. Det måste bara vara exakt ett tecken.FieldSeparator
:Separerar fält i textfilen. För en CSV-fil skulle det vara,
(ett kommatecken). Dessutom måste det bara vara exakt ett tecken.FileType
:Liknarschema.ini
sCharacterSet
. Som nämnts i föregående artikel kan du hitta alla möjliga teckentabeller som stöds på din Windows-maskin, titta i registernyckelnComputer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\
. Den identifierar textfilens kodning. Du kan använda samma teckentabellsidentifierare. Det finns dock ett problem.FileType
definieras som ettInteger
. Därför skulle en teckentabell 65000 (t.ex. Unicode) rapporteras som -536. För att konvertera en teckentabellsidentifierare som är större än 32767 kan du använda formelnCInt("&H" & Hex(x))
och för att vända operationen,CLng("&H" & Hex(x))
. Till exempel, omvandling av teckentabell 65000 skulle gå genomCInt("&H" & Hex(65000))
att ge -536. För att vända,CLng("&H" & Hex(-536))
för att få 65 000 tillbaka igen.SpecID
:Autonumrering för bordet. Observera att detta inte är den primära nyckeln i tabellen. Den här kolumnen används medMSysIMEXColumns.SpecID
att relatera register. Det finns dock ingen begränsning av främmande nyckel mellan de två tabellerna, så övergivna raderingar kan inträffa.SpecName
:Tabellens primärnyckel. Det identifierar unikt specifikationen. När du sparar en specifikation kommer namnet du anger att registreras i det här fältet. När du importerar eller exporterar med hjälp av guider kan Access automatiskt skapa en ny specifikation även om du inte användeAdvanced
och explicit spara den.SpecType
:Det kan bara vara antingen1
för att beteckna avgränsad fil eller2
för att beteckna en fil med fast bredd.StartRow
:Bestämmer raden på textfilen för att börja skanna för import. Det kan vara vilket nummer som helst så det är möjligt att hoppa över flera rader överst i filen. Det kan vara användbart för dåligt utformade textfiler som har icke-överensstämmande rubriker.TextDelim
:Ett enda tecken som avgränsar ett textvärde. Den kan utelämnas om text inte är avgränsad. Om du kan styra formatet på textfilerna är det vanligtvis bra att ha textavgränsare. En textfil med textavgränsare förblir välformad även om texten innehåller fältavgränsare (t.ex. ett kommatecken) i texten.TimeDelim
:Indikerar avgränsningstecknet som används för tiden. Det kan vara vilket enstaka tecken som helst eller vara tomt och standardinställningen är:
(ett kolon tecken).
MSysIMEXColumns
struktur
Tabellen beskriver de enskilda kolumnerna i textfilen och eventuella attribut. Detta motsvarar ungefär den tredje delen av schema.ini
. Det finns dock ytterligare alternativ som indexering som inte finns i schema.ini
.
Attributes
:Okänd. I mina tester fick jag det aldrig att vara något annat än0
. Om du vet vad den är till för och hur den kan användas, lämna gärna en kommentar.DataType
:Kolumnens datatyp. Numret ska motsvara DAO.DataTypeEnum.FieldName
:Kolumnens namn. Observera att Access som standard ärFieldN
därN
är ett positivt heltal.IndexType
:Kan vara0
för att ange inga index,1
för att indikera vanligt index eller2
för att indikera unikt index.SkipColumns
:Ett booleskt värde indikerar om kolumnen ska hoppas över. Om den hoppas över kommer den inte att vara tillgänglig för sökning eller läsning.SpecID
:MotsvararMSysIMEXSpecs.SpecID
autonummer. Observera att det inte finns några begränsningar för främmande nyckel mellan de två tabellerna. Om du har tagit bort poster kan det finnas föräldralösa poster frånMSysIMEXSpecs
tabell.Start
:Ett heltal som anger när kolumnen startar i textfilen. Det är viktigt för en fil med fast bredd. För avgränsade filer kommer Access fortfarande att använda kolumnpositionen för den första raden där fältet hittas för att bestämma starten. Dessutom kommer Access att använda kolumnen för att antyda kolumnernas ordningsföljd.Width
:Ett annat heltal för att styra storleken på kolumnen. På en fil med fast bredd är detta också betydande. Tänk på att Microsoft Access kommer att använda den informationen för datatyper med variabel längd som text eller binär för att anpassa kolumnen i enlighet därmed även på en avgränsad fil.
Anslutningssträng med specifikationer:DSN
parameter
I föregående artikel såg du att det inte gjordes någon ändring av anslutningssträngen för att kunna använda en schema.ini-fil. Vi hänvisade implicit till schema.ini
helt enkelt genom att se till att den finns i samma mapp där textfilen vi länkar eller öppnar finns. För att använda de sparade specifikationerna från systemet krävs dock att vi tillhandahåller informationen i anslutningen. Vi gör detta genom att fylla i DSN
parameter. Värdet måste referera till den sparade specifikationens namn, som registrerats i MSysIMEXSpecs.SpecName
kolumn.
Här är ett exempel:
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")
Åtkomst kräver att både DSN-parametrar och IMEX-parametrar tillhandahålls i anslutningssträngen. Om du försöker utelämna IMEX
parameter, får du ett felmeddelande om att Access inte kan hitta specifikationen, trots att specifikationen finns i MSysIMEXSpecs
tabell. Det följer också att tabellen måste innehålla en post med SpecName
som innehåller samma värde som anges i DSN
parameter.
Som noterats i den tidigare artikeln behandlas de enskilda textfilerna som en "tabell" i mappens "databas". Så även om anslutningssträngen inte pekar på en specifik textfil, kommer anslutningssträngen att använda de angivna specifikationerna på alla textfiler som öppnas via anslutningen.
Även om det är möjligt att använda andra parametrar som diskuteras i samma artikel, bör du vara medveten om att vid konflikt kommer den sparade specifikationen att ha företräde framför anslutningssträngen. Av den anledningen är det bäst att använda minimal uppsättning parametrar som krävs för att framgångsrikt ansluta till en textfil och låta de sparade specifikationerna göra jobbet med att beskriva hur man läser textfilen.
Slutsats
Du lärde dig ett alternativt sätt att beskriva textfilens struktur utan att använda en extern fil. Vi tittade på hur Access använder två systemtabeller för att lagra specifikationerna. Slutligen har du också lärt dig hur du anger de sparade specifikationerna med DSN
parameter. Vid det här laget har vi täckt allt vi behöver veta om att länka eller öppna textfiler i Access. I nästa artikel kommer vi att samla informationen som vi lärt oss i resten av serien. Vi kommer också att titta på att använda anslutningssträngarna i Access-frågor för en kod utan kod.