sql >> Database teknologi >  >> RDS >> Access

Forbindelsesstrengparametre for gemte specifikationer

Forbindelsesstrengparametre for gemte specifikationer

Access giver en anden metode til at beskrive tekstfilers skema ved at bruge systemtabeller MSysIMEXSpecs og MSysIMEXColumns for at gemme specifikationerne. I den forrige artikel dækkede jeg hvordan schema.ini kan bruges til at beskrive en tekstfils struktur. schema.ini involverede en ekstern tekstfil, der implicit refereres til, men med systemtabellerne har vi ingen eksterne afhængigheder. Strukturen er ret anderledes, selvom der er nogle overlapninger.

MSysIMEXSpecs og MSysIMEXColumns systemtabel

I stedet for at stole på, at et eksternt schema.ini er til stede i samme mappe som tekstfilen, er det muligt at angive specifikationer for en tekstfil i en hvilken som helst sti ved at henvise til den gemte specifikation i Access-databasen. Når du bruger import- eller eksportguiden, kan du gemme eller indlæse specifikationerne gennem Advanced knap.

Ved at klikke på knappen Avanceret vises specifikationsdialogen. Ud over at indlæse eller gemme specifikationerne kan du også tilpasse specifikationerne ved hjælp af den viste dialog.

Når en specifikation gemmes, skrives den til både MSysIMEXSpecs og MSysIMEXColumns systemtabeller. Tabellerne findes ikke i en ny Access-fil og vil kun blive oprettet ved første gang. Desuden kan du redigere eller endda slette data fra disse tabeller. Alligevel er de stadig systemtabeller, så de er skjult som standard. Hvis du vil se dem i navigationsruden, skal du gå til Navigationsindstillinger og aktivere synlighed for både skjulte objekter og systemobjekter.

Hvis du sammenligner de tilgængelige muligheder i dialogen med de muligheder, du har i schema.ini , kan du se nogle bemærkelsesværdige forskelle. For et eksempel er schema.ini giver flere valgmuligheder med hensyn til, hvordan datoerne eller valutabeløbene kan formateres. Med de gemte specifikationer kan vi kun styre datoformatering fra en forudindstillet liste over muligt format. Der er ingen direkte muligheder for valutabeløb, fordi vi bruger datatypen til at angive, at en kolonne skal importeres som valuta uanset formateringen. Systemtabellernes muligheder er således enkle sammenlignet med schema.ini. Vi vil herefter gennemgå tabellernes struktur.

MSysIMEXSpecs struktur

Tabellen repræsenterer et sæt gemte specifikationer. For hver række beskriver tabellen det overordnede format af filen, svarende til den anden sektion af schema.ini . Der er dog forskellige muligheder, som skal overvejes.

  • DateDelim :Identificerer afgrænsningen for datoerne. Det er typisk / eller - . Det kan kun være et eller nul tegn.
  • DateFourDigitYear :Et Ja/Nej-felt, der angiver, om datoerne er formateret med fire cifre for årstal. Hvis indstillet til ja, værdier som 10/10/20 ville ikke blive betragtet som gyldige datoer.
  • DateLeadingZeros :Endnu et Ja/Nej-felt, der angiver, om datoerne har indledende nuller.
  • DateOrder :Bestemmer den datoformatering, vi vil bruge. Følgende koder er gyldige:
    • 0 :DMY
    • 1 :DYM
    • 2 :MDY
    • 3 :MYD
    • 4 :YDM
    • 5 :YMD
  • DecimalPoint :Angiver tegnet, der adskiller integral- og brøkdelen for et decimaltal. Det skal kun være præcis ét tegn.
  • FieldSeparator :Adskiller felter i tekstfilen. For en CSV-fil ville det være , (et kommategn). Det skal også kun være præcis ét tegn.
  • FileType :Svarer til schema.ini 's CharacterSet . Som nævnt i den forrige artikel, kan du finde alle mulige kodesider, der understøttes på din Windows-maskine, se i registreringsdatabasenøglen Computer\HKEY_CLASSES_ROOT\MIME\Database\Codepage\ . Den identificerer tekstfilens kodning. Du kan bruge den samme tegntabel-id. Der er dog et problem. FileType er defineret som et Integer . Derfor vil en kodetabel 65000 (f.eks. Unicode) blive rapporteret som -536. For at konvertere enhver tegntabel-id, der er større end 32767, kan du bruge formlen CInt("&H" & Hex(x)) og for at vende operationen, CLng("&H" & Hex(x)) . For eksempel vil konvertering af tegntabel 65000 gå gennem CInt("&H" & Hex(65000)) at give -536. For at vende, CLng("&H" & Hex(-536)) for at få 65.000 tilbage igen.
  • SpecID :Autonummer til bordet. Bemærk, at dette ikke er den primære nøgle i tabellen. Denne kolonne bruges med MSysIMEXColumns.SpecID at relatere optegnelser. Der er dog ingen fremmednøgle-begrænsning mellem de to tabeller, så forældreløse sletninger kan forekomme.
  • SpecName :Tabellens primære nøgle. Det identificerer entydigt specifikationen. Når du gemmer en specifikation, vil det navn, du angiver, blive registreret i dette felt. Når du importerer eller eksporterer ved hjælp af guider, kan Access automatisk oprette en ny specifikation, selvom du ikke brugte Advanced og gem det eksplicit.
  • SpecType :Det kan kun være enten 1 for at angive afgrænset fil eller 2 for at angive fil med fast bredde.
  • StartRow :Bestemmer rækken på tekstfilen, der skal starte scanning til import. Det kan være et hvilket som helst tal, så det er muligt at springe flere linjer over i toppen af ​​filen. Det kan være nyttigt for dårligt udformede tekstfiler, der har ikke-overensstemmende overskrifter.
  • TextDelim :Et enkelt tegn, der afgrænser en tekstværdi. Det kan udelades, hvis tekst ikke er afgrænset. Hvis du kan styre formatet på tekstfilerne, er det normalt en god idé at have tekstafgrænsninger. En tekstfil med tekstskilletegn vil forblive velformet, selvom teksten indeholder feltseparatorer (f.eks. et komma) i teksten.
  • TimeDelim :Angiver det afgrænsningstegn, der er brugt for tiden. Det kan være et hvilket som helst enkelt tegn eller være tomt og er standard til : (et kolontegn).

MSysIMEXColumns struktur

Tabellen beskriver de enkelte kolonner i tekstfilen og eventuelle attributter. Dette svarer nogenlunde til den tredje sektion af schema.ini . Der er dog yderligere muligheder, såsom indeksering, der ikke findes i schema.ini .

  • Attributes :Ukendt. I mine test fik jeg det aldrig til at være andet end 0 . Hvis du ved, hvad det er til, og hvordan det kan bruges, er du velkommen til at lægge en kommentar.
  • DataType :Kolonnens datatype. Nummeret skal svare til DAO.DataTypeEnum.
  • FieldName :Kolonnens navn. Bemærk, at Access som standard er FieldN hvor N er et positivt heltal.
  • IndexType :Kan være 0 for at angive ingen indekser, 1 for at angive almindeligt indeks eller 2 for at angive unikt indeks.
  • SkipColumns :En boolsk værdi angiver, om kolonnen skal springes over. Hvis den springes over, vil den ikke være tilgængelig for forespørgsler eller læsning.
  • SpecID :Svarer til MSysIMEXSpecs.SpecID autonummer. Bemærk, at der ikke er nogen fremmednøgle-begrænsninger mellem de to tabeller. Hvis du har slettet poster, kan der være forældreløse poster fra MSysIMEXSpecs tabel.
  • Start :Et heltal, der angiver, hvornår kolonnen starter på tekstfilen. Det er vigtigt for en fil med fast bredde. For afgrænsede filer vil Access stadig bruge kolonnepositionen i den første række, hvor feltet findes, til at bestemme starten. Desuden vil Access bruge kolonnen til at antyde den ordinære rækkefølge af kolonnerne.
  • Width :Endnu et heltal til at styre størrelsen af ​​kolonnen. På en fil med fast bredde er dette også væsentligt. Vær opmærksom på, at Microsoft Access vil bruge disse oplysninger til datatyper med variabel længde, såsom tekst eller binær, for at tilpasse kolonnen i overensstemmelse hermed, selv på en afgrænset fil.

Forbindelsesstreng ved hjælp af specifikationer:DSN parameter

I den forrige artikel så du, at der ikke var nogen ændring af forbindelsesstrengen for at bruge en schema.ini-fil. Vi henviste implicit til schema.ini simpelthen ved at sikre, at den findes i den samme mappe, hvor den tekstfil, vi linker eller åbner, er til stede. For at bruge de gemte specifikationer fra systemet kræver det dog, at vi leverer oplysningerne i forbindelsen. Vi gør dette ved at udfylde DSN parameter. Værdien skal referere til den gemte specifikations navn, som er registreret i MSysIMEXSpecs.SpecName kolonne.

Her er et eksempel:

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Text;DSN=Products Link Specification;IMEX=1;DATABASE=C:\Links")

Adgang vil kræve, at både DSN-parameter og IMEX-parametre leveres i forbindelsesstrengen. Hvis du forsøger at udelade IMEX parameter, vil du få en fejl om, at Access ikke kan finde specifikationen, selvom specifikationen findes i MSysIMEXSpecs bord. Det følger også, at tabellen skal indeholde en post med SpecName indeholdende den samme værdi som angivet i DSN parameter.

Som nævnt i den tidligere artikel behandles de individuelle tekstfiler som en "tabel" i mappens "database". Så selvom forbindelsesstrengen ikke peger på en specifik tekstfil, vil forbindelsesstrengen bruge de angivne specifikationer på alle tekstfiler, der åbnes gennem forbindelsen.

Selvom det er muligt at bruge andre parametre som beskrevet i samme artikel, skal du være opmærksom på, at når der er konflikt, vil den gemte specifikation have forrang over forbindelsesstrengen. Af den grund er det bedst at bruge et minimalt sæt parametre, der kræves for at oprette forbindelse til en tekstfil og lade de gemte specifikationer gøre arbejdet med at beskrive, hvordan tekstfilen læses.

Konklusion

Du lærte en alternativ måde at beskrive tekstfilens struktur på uden at bruge en ekstern fil. Vi så på, hvordan Access bruger to systemtabeller til at gemme specifikationerne. Til sidst lærte du også, hvordan du angiver de gemte specifikationer ved hjælp af DSN parameter. På dette tidspunkt har vi dækket alt, hvad vi behøver at vide om at linke eller åbne tekstfiler i Access. I den næste artikel vil vi samle de oplysninger, vi har lært i resten af ​​serien. Vi vil også se på at bruge forbindelsesstrengene i Access-forespørgsler til en kodefri tilgang.


  1. MariaDB LENGTHB() Forklaret

  2. Sløjfe over resultatsæt i MySQL

  3. Bestemmelse af, om feltdataene i Oracle er af nummertypen

  4. Hvordan angiver du et andet portnummer i SQL Management Studio?