Access
 sql >> база данни >  >> RDS >> Access

Параметри на низ за връзка за източници на текстови файлове

Параметри на низ за връзка за източници на текстови файлове

В предишната статия разгледах параметрите на низ за свързване за източници на данни в Excel. Сега ще се съсредоточим върху текстовите файлове. Има различни методи за описание на схемата на текстови файлове и използване на информацията по време на отваряне или свързване в Access. Докато електронните таблици на Excel имаха известна прилика по структура, това не важи за текстовите файлове. Трябва да отговорим на няколко въпроса относно структурата на текстов файл, включително:

  1. Ограничена ли е или фиксирана ширина?
  2. Как да разберем кога една колона завършва и друга започва?
  3. Текстът цитиран ли е или не?
  4. Как трябва да анализираме датите и часовете?
  5. Какво ще кажете за валутните суми? Как трябва да бъдат форматирани?

а вероятно и повече. Въпреки че CSV може да изглежда добре дефиниран на пръв поглед, но когато се задълбочите в него, всъщност е много слабо дефиниран. Няма универсално съгласие относно това дали текстът трябва да се цитира, как трябва да се форматират датите. Поради всички тези причини използването на текстови файлове обикновено изисква използване на някаква информация за схемата, за да се опише структурата на текстовия файл. Има три начина за съхраняване на информация за схемата:

  1. А schema.ini файл, съхранен в директория
  2. Достъп до MSysIMEX и MSysIMEXColumns таблици
  3. Достъп до ImportExportSpecification.XML собственост.

За да усложним нещата, има няколко различни метода, които можем да използваме за работа с текстови файлове, но не всички методи могат да използват всичките 3 различни начина за получаване на информация за схемата. Например DoCmd.TransferText работи със системните таблици, но не е запазен импорт/експорт. От друга страна, DoCmd.RunSavedImportExport работи с ImportExportSpecification обект. Въпреки това, ImportExportSpecification не се използва като част от свързването. Така че за нашата дискусия всъщност имаме само 2 налични метода в контекста на отваряне или свързване към текстов файл. Важно е да се отбележи разликата между запазването на спецификация в MSysIMEXSpecs &MSysIMEXColumns таблици спрямо запазване на импортиране/експортиране, което става ImportExportSpecification обект. Ще разгледаме тези 2 метода в следващите статии.

Низ за връзка за текстов файл

Трябва да помислим как Access ще възприеме текстов файл. В предишната статия видяхме, че всеки лист или именуван диапазон е представен като „таблица“ в „база данни“ на електронна таблица на Excel. Но текстовият файл няма такава конструкция. Какво прави тогава „база данни“? Отговорът е, че папката представлява „база данни“ и следователно всички текстови файлове в папка са „таблици“. Поради тази причина е възможно да имате информация за множество схеми за една и съща папка, ако тази папка съдържа повече от един възможен формат за всякакви текстови файлове, съхранявани в папката. По-късно ще видите, че когато конструираме низа за връзка, ние правим връзка към папката, след което осъществяваме достъп до отделния файл като таблица.

Следователно, използвайте тази настройка, както е показано:

След това можем да отворим текстов файл, използвайки този VBA код:

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

Това трябва да даде резултат:

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

Обърнете внимание на следните неща:

  1. Не сме посочили текстовия файл в нашия низ за връзка. Вместо това използвахме папка.
  2. Имената на „таблици“ бяха променени, тъй като точката в името не е валиден знак. Следователно, products.csv стана products#csv .
  3. В сравнение с Excel, няма задължителни параметри освен определянето на драйвера на текстовия файл и пътя до папката.

В следващата статия ще научите повече за описването на схемата на текстови файлове. За самия низ за връзка обаче се разпознават следните ключови думи.

FMT параметър:Посочва формата на текстовия файл.

Delimited :Файлът е разделен със знак. Използваният символ се определя от информацията за схемата.
Fixed :Файлът има фиксирана ширина за колона(и). Отново, конкретната ширина(и) на колони се определят от информацията за схемата.

HDR параметър:Заглавен ред

YES :Първият ред е заглавието и трябва да стане имената на колоните за „таблицата“/“наборът от записи“
NO :Първият ред не се третира по различен начин и е просто данни. Всички имена на колони ще бъдат наречени „FN“, където „N“ е число, започващо с 1

IMEX параметър:Import/Export Behavior

Това урежда как трябва да се дефинират типовете данни в колоните въз основа на съдържанието:
1 :Ако колоната съдържа различни типове данни, третирайте я като низ. В противен случай съпоставете колоната с най-добрия тип данни.
2 :Винаги съпоставяйте колоната с определен тип данни въз основа на извадката. Това може да причини грешка при четенето, когато четем ред, който съдържа данни, които не съответстват на очаквания тип данни.

ACCDB параметър:Показва, че Access използва файлов формат ACCDB?

По подразбиране това винаги е зададено ACCDB=YES във файлов формат accdb. Въпреки това, пропускането или задаването му на НЕ изглежда не прави нищо. Това е малко мистерия. Ако някой може да сподели какъв ефект има този параметър, публикувайте в коментар и аз ще актуализирам блога.

DATABASE параметър:Път до папката, която съдържа текстовите файлове

Параметърът трябва да съдържа напълно квалифициран път. Не трябва да включва имената на текстовите файлове.

CharacterSet Параметър:Идентифицира кодирането на знаци, което да се използва за четене на текстовите файлове.

Това ще бъде обсъдено по-подробно в следващата статия. Това също може да бъде описано в информацията за схемата.

DSN Параметър:Идентифицира информацията за схемата, която да се използва с текстовия файл.

Името трябва да съответства на MSysIMEXSpec , който ще бъде анализиран в следващата статия. Това работи само с MSysIMEX*** маси. Ако искате да използвате schema.ini , просто не включвате никакъв DSN във вашите низове за връзка.

Важно е да се отбележи, че драйверът за текстов файл ще вземе предвид само параметрите, изброени по-горе. Не е възможно да се поставят други ключови думи и те да бъдат анализирани от драйвера на текстовия файл. Поради тази причина няма да можете да посочите всички подробности за текстов файл само от низа за връзка.

Схема по подразбиране за текстови файлове

На теория можете да отворите или свържете текстов файл без никаква информация за схемата, но това рядко ще работи. В тази ситуация Access просто ще приеме настройките по подразбиране за различни опции. Ако текстовият файл отговаря на всички текущи настройки по подразбиране, Access ще успее да прочете файла. По-важното е, че липсата на грешки при отваряне или свързване към текстовия файл не означава, че данните са представени смислено. Например, специално форматирани суми във валута могат да бъдат интерпретирани като текст, а не като валута, а текстът без граници със запетаи в текста може да бъде неправилно анализиран, добавяйки нежелани колони. Настройките по подразбиране се определят на две възможни места:

  1. Достъпът ще прегледа настройките на системния регистър. За инсталиране на Office 365, регистърът може да се намира на адрес:
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Text . Ще наричаме това местоположение „Текстови ключове в системния регистър“ в следващите статии.
  2. Настройките, които ще видите в Region аплет в контролния панел на Windows. Ще наричаме това местоположение „Настройки на Windows“.

Забележка относно кодирането на текстовите файлове

Задължително е да имате правилното кодиране, независимо кои методи можете да използвате за достъп до вашите текстови файлове. Когато съдържанието на вашия текстов файл е ограничено само до знаци в долната половина на ASCII точките (например 0-127), едва ли има значение какво кодиране ще изберете за вашите текстови файлове. По подразбиране обикновено е достатъчно добро. Въпреки това, ако вашите текстови файлове могат да съдържат Unicode или всякакви знаци, по-големи от 127, тогава вие, разработчикът, трябва да знаете кодирането. Ако е посочено грешно кодиране, текстът може да не се импортира според очакванията и няма да изведе грешки. За разхвърляни подробности ще ви насоча към Джоел Сполски по този въпрос.

Избиране между schema.ini и MSysIMEX*** таблици

Както ще видите в следващите статии, и двата метода имат доста голямо припокриване във възможностите. Следователно може да откриете, че имате избор да използвате едно от двете. Основната разлика се свежда до това дали искате схемата да се съхранява във вашето приложение или в папка, където се очаква да бъдат текстови файлове. Когато използвате schema.ini файл, вие предполагате, че текстовите файлове ще присъстват в определена папка и ще имат определено име.

С MSysIMEX*** , можете да обработвате всякакви текстови файлове отвсякъде, просто като се позовавате на дефинираната спецификация. Въпреки това, не е лесно да редактирате спецификацията извън Access. Дори в рамките на Access не е лесно да настроите спецификациите с помощта на потребителски интерфейс. schema.ini има някои допълнителни функции, които не са директно достъпни с MSysIMEX*** таблици.

Независимо от това, въпросът къде да съхранявате спецификацията най-вероятно ще бъде най-важният ви фактор при вземането на решение кое да използвате.

Заключение

Силно препоръчваме да дефинирате информация за схемата за всички текстови файлове, които съдържат дати или валутни суми. Датите и валутните суми са чувствителни към регионалните настройки, което може да попречи на правилния анализ на данните. Тъй като имаме две различни системи с различен наличен набор от опции, трябва да разгледаме всяка в следващите статии. Имате избор да използвате едното (или дори и двете между различни текстови файлове). Сега ще се обърнем към schema.ini в следващата статия. По-късно ще разгледаме MSysIMEX*** таблици в следващата статия.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имам проблеми при използване на Microsoft Access Runtime

  2. Как да създадете заявка за параметри в Access

  3. ListView Control Drag Drop Обработка на събития

  4. Как да конвертирате нормална заявка в кръстосана заявка в Access

  5. Как Access общува с ODBC източници на данни? част 5