sql >> Databasteknik >  >> RDS >> Access

Anslutningssträngparametrar för textfilkällor

Anslutningssträngsparametrar för textfilkällor

I den tidigare artikeln täckte jag anslutningssträngparametrarna för Excel-datakällor. Vi kommer nu att fokusera på textfilerna. Det finns olika metoder för att beskriva textfilers schema och använda informationen under öppning eller länkning i Access. Även om Excel-kalkylblad hade en viss likhet i strukturen, är detta inte sant för textfilerna. Vi måste svara på flera frågor om strukturen för en textfil inklusive:

  1. Är den avgränsad eller fast bredd?
  2. Hur vet vi när en kolumn slutar och en annan börjar?
  3. Är text citerad eller inte?
  4. Hur ska vi analysera datum och tider?
  5. Vad sägs om valutabeloppen? Hur ska de formateras?

och möjligen mer. Även om CSV kan tyckas vara väldefinierat vid en anblick, men när du gräver i det är det faktiskt väldigt löst definierat. Det finns ingen allmän överenskommelse om huruvida text ska citeras, hur datumen ska formateras. Av alla dessa skäl kräver användning av textfiler vanligtvis användning av någon form av schemainformation för att beskriva textfilens struktur. Det finns tre sätt att lagra schemainformation:

  1. Ett schema.ini fil lagrad i en katalog
  2. Åtkomst till MSysIMEX och MSysIMEXColumns tabeller
  3. Åtkomst till ImportExportSpecification.XML egendom.

För att komplicera saken finns det flera olika metoder vi kan använda för att arbeta med textfiler, men alla metoder kan inte använda alla de tre olika sätten att få schemainformationen. Till exempel DoCmd.TransferText fungerar med systemtabellerna men inte sparade importer/exporter. Å andra sidan, DoCmd.RunSavedImportExport fungerar med ImportExportSpecification objekt. Men ImportExportSpecification används inte som en del av länkningen. Så för vår diskussion har vi faktiskt bara 2 metoder tillgängliga i samband med att öppna eller länka till en textfil. Det är viktigt att notera skillnaden mellan att spara en specifikation i MSysIMEXSpecs &MSysIMEXColumns tabeller kontra att spara en import/export som blir en ImportExportSpecification objekt. Vi kommer att utforska dessa två metoder i nästa artiklar.

Anslutningssträng för textfil

Vi bör överväga hur Access kommer att uppfatta en textfil. I den föregående artikeln såg vi att varje ark eller ett namngivet intervall representerades som en "tabell" i ett Excel-kalkylblad "databas". Men en textfil har ingen sådan konstruktion. Vad gör en "databas" då? Svaret är att mappen representerar en "databas" och därför är alla textfiler i en mapp "tabeller". Av den anledningen är det möjligt att ha flera schemainformation för samma mapp om den mappen innehåller mer än ett möjligt format för alla textfiler som lagras i mappen. Du kommer att se senare att när vi konstruerar anslutningssträngen, länkar vi till mappen och kommer sedan åt den individuella filen som en tabell.

Använd därför denna inställning enligt bilden:

Vi kan sedan öppna en textfil med denna VBA-kod:

Dim db As DAO.Database
Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DATABASE=C:\Links")

Dim tdf As DAO.TableDef
For Each tdf In db.TableDefs
    Debug.Print tdf.Name
    
    Dim fld As DAO.Field
    For Each fld In tdf.Fields
        Debug.Print fld.Name,
    Next
    Debug.Print
    
    Dim rs As DAO.Recordset
    Set rs = tdf.OpenRecordset
    Do Until rs.EOF
        For Each fld In rs.Fields
            Debug.Print fld.Value,
        Next
        Debug.Print
        rs.MoveNext
    Loop
    
    Debug.Print
Next

Detta bör ge resultatet:

Products#csv
Products      Count         PackDate      Amount        ShipDate      
Apples         3            12/4/2020     $ 1.02        4/12/2020     
Bananas        5            4/12/2020     $ 1,234.56    12/4/2020     
Figs           8            5/7/2020      $ 0.01        7/5/2020      
Grapes         11           10/10/2020    $12.30        10/10/2020

Lägg märke till följande saker:

  1. Vi har inte angett textfilen i vår anslutningssträng. Vi använde mappen istället.
  2. Namnen på "tabeller" har ändrats eftersom en punkt i namnet inte är ett giltigt tecken. Alltså products.csv blev products#csv .
  3. Jämfört med Excel finns det inga obligatoriska parametrar utöver att specificera textfilens drivrutin och sökvägen till mappen.

I nästa artikel kommer du att lära dig mer om att beskriva schemat för en textfil. Men för själva anslutningssträngen känns följande nyckelord igen.

FMT parameter:Ange formatet på textfilen.

Delimited :Filen är avgränsad med ett tecken. Det tecken som används anges av schemainformationen.
Fixed :Filen har fast bredd för kolumner. Återigen specificeras den eller de specifika kolumnbredderna av schemainformationen.

HDR parameter:Rubrikrad

YES :Den första raden är rubriken och ska bli kolumnnamnen för "tabellen"/"recordset"
NO :Den första raden behandlas inte annorlunda och är bara en data. Alla kolumnnamn kommer att heta "FN" där "N" är ett tal som börjar med 1

IMEX parameter:Import/Export Beteende

Detta styr hur kolumndatatyperna ska definieras, baserat på innehållet:
1 :Om kolumnen innehåller olika datatyper, behandla den som en sträng. Annars matchar du kolumnen med den bästa datatypen.
2 :Matcha alltid kolumnen med en viss datatyp baserat på provet. Det kan orsaka ett läsfel när vi läser en rad som innehåller data som inte matchar den förväntade datatypen.

ACCDB parameter:Indikerar att Access använder filformatet ACCDB?

Som standard är detta alltid inställt ACCDB=YES i ett accdb-filformat. Men att utelämna den eller ställa den till NO verkar inte göra någonting. Det är lite av ett mysterium. Om någon kan dela vilken effekt denna parameter har, skriv en kommentar så uppdaterar jag bloggen.

DATABASE parameter:Sökväg till mappen som innehåller textfilerna

Parametern bör innehålla en fullständigt kvalificerad sökväg. Det bör inte innehålla textfilernas namn.

CharacterSet Parameter:Identifierar teckenkodningen som ska användas för att läsa textfilerna.

Detta kommer att diskuteras mer detaljerat i nästa artikel. Detta kan också beskrivas i schemainformationen.

DSN Parameter:Identifierar schemainformationen som ska användas med textfilen.

Namnet måste motsvara MSysIMEXSpec , som kommer att analyseras i senare artikel. Detta fungerar bara med MSysIMEX*** tabeller. Om du vill använda schema.ini , du inkluderar helt enkelt inte någon DSN i dina anslutningssträngar.

Det är viktigt att notera att textfilsdrivrutinen endast tar hänsyn till parametrarna som anges ovan. Det är inte möjligt att lägga in andra nyckelord och få det att tolkas av textfilens drivrutin. Av den anledningen kommer du inte att kunna ange alla detaljer om en textfil från enbart anslutningssträngen.

Standardschema för textfiler

I teorin kan du öppna eller länka en textfil utan någon schemainformation men det kommer sällan att fungera. I den här situationen kommer Access helt enkelt att anta standardinställningarna för olika alternativ. Om textfilen överensstämmer med alla nuvarande standardinställningar kommer Access att lyckas läsa filen. Ännu viktigare, frånvaron av fel i att öppna eller länka till textfilen betyder inte att data representeras meningsfullt. Till exempel kan specialformaterade valutabelopp tolkas som text snarare än valuta, och icke-avgränsad text med kommatecken i texten kan misstolkas och lägga till oönskade kolumner. Standardinställningarna bestäms på två möjliga ställen:

  1. Åtkomst kommer att titta på registerinställningarna. För installation av Office 365 kan registret finnas på:
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Vi kommer att hänvisa till den här platsen som "Textregisternycklar" i nästa artiklar.
  2. Inställningarna du skulle se i Region applet i Windows kontrollpanel. Vi kommer att referera till den här platsen som "Windows-inställningar".

Anmärkning om kodning för textfilerna

Det är obligatoriskt att ha rätt kodning oavsett vilka metoder du kan använda för att komma åt dina textfiler. När din textfils innehåll är begränsat till endast tecken inom den nedre hälften av ASCII-punkterna (t.ex. 0-127), spelar det knappast någon roll vilken kodning du väljer för dina textfiler. Standarden är vanligtvis tillräckligt bra. Men om dina textfiler kan innehålla vilken Unicode som helst eller tecken som är större än 127, är det upp till dig, utvecklaren, att känna till kodningen. Om fel kodning anges kan det hända att texten inte importeras som förväntat och kommer inte att ge några fel. För röriga detaljer hänvisar jag dig till Joel Spolsky i denna fråga.

Välja mellan schema.ini och MSysIMEX*** tabeller

Som du kommer att se i nästa artiklar har båda metoderna en ganska stor överlappning i kapaciteten. Därför kan du hitta dig själv att välja mellan att använda antingen. Den största skillnaden handlar om om du vill att schemat ska lagras i din applikation eller i en mapp där textfiler förväntas finnas. När du använder schema.ini fil, antar du att textfilerna kommer att finnas i en viss mapp och kommer att ha ett visst namn.

Med MSysIMEX*** , kan du bearbeta alla textfiler var som helst helt enkelt genom att referera till den definierade specifikationen. Det är dock inte lätt att redigera specifikationen utanför Access. Även inom Access är det inte lätt att justera specifikationer med UI. schema.ini har några ytterligare funktioner som inte är direkt tillgängliga med MSysIMEX*** tabeller.

Frågan om var specifikationen ska lagras kommer dock med största sannolikhet att vara din viktigaste faktor för att bestämma vilken du ska använda.

Slutsats

Du uppmuntras starkt att ha schemainformation definierad för alla textfiler som innehåller datum eller valutabelopp. Datum och valutabelopp är känsliga för regionala inställningar, vilket kan störa korrekt analys av data. Eftersom vi har två olika system med olika tillgängliga alternativ måste vi överväga vart och ett i nästa artiklar. Du kan välja att använda antingen (eller till och med båda bland olika textfiler). Vi kommer nu att gå till schema.ini i nästa artikel. Vi kommer senare att titta på MSysIMEX*** tabeller i följande artikel.


  1. Hur man listar index skapade för tabeller i postgres

  2. Hur man uppdaterar data i en anpassad dialogruta

  3. hur kör man lagrad procedur i SQL Developer?

  4. Hur man buntar cx_oracle med Pyinstaller