04.09.2014, Vladimír Klaus, navštíveno 6700x

MS Access
SQL

Import dat z CSV nebo nějakého textového souboru je docela problém. Může za to především použití oddělovačů, resp. jejich neúplná či komplikovaná podpora ze strany importního mechanizmu.

Začneme tedy nejprve oddělovači. CSV (Comma Separated Values) mají být textové soubory, kde jsou jednotlivé údaje odděleny čárkou. Jenomže díky různým národním zvyklostem, kdy jsou čárky používány třeba jako desetinný oddělovač, tomu tak není. Je tomu tak i u nás, a když se podíváte do nastavení „Oblast a jazyk“, najdete u položky „Oddělovač seznamu“ středník. A to je přesně ten znak, který se bude používat u CSV a bude pak záležet na aplikaci, jejím nastavení, zda tento údaj použije. MS Excel ano – proto CSV generuje se středníkem, MS Access bohužel očekává čárku.

Import dat z CSV 1

Asi by tedy bylo možné v Nastavení tento údaj změnit na čárku, ale to bychom samozřejmě nedoporučovali. Je to přeci jen globální hodnota.

Pokud budete provádět import ručně, problému se můžete vyhnout. To si nyní ukážeme.

Import dat z CSV 2

Na webu najdete malý soubor KontaktyKImportuStrednik.csv s několika údaji. V Accessu zvolíme import z textového souboru, nalistujeme soubor a zvolíme druhou položku. V databázi totiž už je připravena prázdná tabulka pro importované kontakty.

Import dat z CSV 3

Před stisknutím OK se ujistěte, že CSV soubor nemáte otevřený třeba v Excelu. V takovém případě by import nebyl možný!

V dalším dialogu zvolte, že data jsou s oddělovači. V dolním okně ale stále uvidíte neoddělená data, to se změní až v dalším okně průvodce.

Import dat z CSV 4

Tady je už konečně možné nastavit středník jako oddělovač, ohraničení textu uvozovkami a že první řádek souboru obsahuje záhlaví. To ohraničení textu je velmi důležité, jinak by se vám mohlo stát, že bude text rozdělen do více sloupců nebo naopak budou uvozovky zdvojené apod.

Import dat z CSV 5

Nyní už můžete import dokončit. Tabulka obsahuje opravdu to, co jsme chtěli.

Import dat z CSV 6

Možností importu tímto způsobem je daleko víc a jsou velmi zajímavé, ale tady jde o SQL.

Takže jak něco podobného udělat bez průvodce? Třeba takto. V zásadě jde o úplně obyčejné vložení záznamů do tabulky, pouze za FROM není tabulka nebo dotaz, ale specifikace cizího zdroje.

INSERT INTO Kontakty
  SELECT * FROM
    [Text;
     FMT=Delimited;
     Database=c:\Projekty\AUDREYsoftware\SQL pro blbce\Data\;
     HDR=Yes].[KontaktyKImportuStrednik.csv]

Jednotlivé parametry mají tento význam:

  • Text – jedná se o textový soubor
  • FMT – jde o text s oddělovači
  • Database – složka, ve které se nachází soubor, který chceme importovat
  • HDR – první řádka obsahuje záhlaví – názvy polí

Ale tady je také zároveň zakopaný pes. Není možné zvolit, jaký oddělovač je použitý, ale ani třeba v jakém kódování soubor je (předpokládá se ANSI). Proto po spuštění příkazu dojde k chybě. Jak už bylo řečeno, MS Access předpokládá jako oddělovač čárku.

Import dat z CSV 7

Máme v podstatě jen dvě možnosti – použít docela komplikovanou specifikaci importu pomocí souboru schema.ini nebo zajistit soubor s čárkami. O práci se schema.ini si povíme jindy, nyní použijeme předpřipravený soubor (je opět na webu), ve kterém jsou nahrazeny středníky - KontaktyKImportuCarka.csv a upravíme dotaz.

INSERT INTO Kontakty
  SELECT * FROM
    [Text;
    FMT=Delimited;
    Database=c:\Projekty\AUDREYsoftware\SQL pro blbce\Data\;
    HDR=Yes].[KontaktyKImportuCarka.csv]

Nyní už tomu Access rozumí a v pohodě provede import.

Import dat z CSV 8

Proč volím tuto komplikovanou cestu, když je k dispozici Průvodce importem? I proto, že data nemusíte chtít nikam importovat, ale jen si je prohlédnout, vyfiltrovat apod. Odstraňte z dotazu INSERT a přidejte podmínku.

SELECT * FROM
  [Text;
     FMT=Delimited;
     Database=c:\Projekty\AUDREYsoftware\SQL pro blbce\Data\;
     HDR=Yes].[KontaktyKImportuCarka.csv]
     WHERE Poznamka LIKE "*ček*"

Výsledkem je zcela korektní tabulka, se kterou můžete dále pracovat. Data pochopitelně nejsou nikam uložena a ani není možné je měnit. A pozor, v tu chvíli je textový soubor uzamčen (protože ho prohlížíte v MS Accessu), takže ho není možné přejmenovat, smazat apod.

Import dat z CSV 9

Jak získat soubor s jinými oddělovači

Předpokládejme situaci, že hlavní data máte v Excelu a že neobsahují žádné tabelátory. Při jejich ukládání proto použijte formát „Text (oddělený tabelátory)“, nikoliv CSV. Ukázkový soubor je opět na webu - KontaktyKImportuTabelatory.txt.

Tento soubor otevřete ve Wordu a nahraďte ^t za čárku.

Import dat z CSV 10

Soubor pak uložte jako prostý text (což bude přednastaveno) a zkuste import.