sql >> Databasteknik >  >> RDS >> Access

Anslutningssträngparametrar för sparade specifikationer

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 som 10/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 :DMY
    • 1 :DYM
    • 2 :MDY
    • 3 :MYD
    • 4 :YDM
    • 5 :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 :Liknar schema.ini s CharacterSet . Som nämnts i föregående artikel kan du hitta alla möjliga teckentabeller som stöds på din Windows-maskin, titta i registernyckeln Computer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\ . Den identifierar textfilens kodning. Du kan använda samma teckentabellsidentifierare. Det finns dock ett problem. FileType definieras som ett Integer . 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 formeln CInt("&H" & Hex(x)) och för att vända operationen, CLng("&H" & Hex(x)) . Till exempel, omvandling av teckentabell 65000 skulle gå genom CInt("&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 med MSysIMEXColumns.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ände Advanced och explicit spara den.
  • SpecType :Det kan bara vara antingen 1 för att beteckna avgränsad fil eller 2 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 än 0 . 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 är FieldN där N är ett positivt heltal.
  • IndexType :Kan vara 0 för att ange inga index, 1 för att indikera vanligt index eller 2 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 :Motsvarar MSysIMEXSpecs.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ån MSysIMEXSpecs 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.


  1. Felsök att få slut på arbetstrådar

  2. Hur skriver man med BCP till en fjärransluten SQL-server?

  3. Returnera resultat av en sql-fråga som JSON i oracle 12c

  4. Vad är skillnaden mellan ROWNUM och ROW_NUMBER i en Oracle-databas?