файл csv не полностью сохраняется в таблице vba

#vba #ms-access #csv

#vba #ms-access #csv

Вопрос:

Я попытался сохранить такой файл csv в таблице:

 XValue, YValue, Wert, Name, FzgID
, ,  "CARB (Evap Denom)",  DIUMPR_CldStrtDenCldStrtTyp_C, 238
, , 800.0000000000000000,  DIUMPR_ctGen.l500MD_C, 238
, , 10000.0000000000000000,  DIUMPR_ctGen.l500MDInc_C, 238
, , 600.0000000000000000,  DIUMPR_ctGen.nIgnMin_C, 238
, , 740.0000000000000000,  DIUMPR_ctGen.pEnvMin_C, 238
, , 5.0048828125000000,  DIUMPR_ctGen.rAPPMax_C, 238
  

Я использую этот код:

 DoCmd.TransferText acImportDelim, , "tb_DCM_Daten", Filename, True
  

Моя проблема в том, что для первой строки в файле csv. Он не сохраняется CARB (Evap Denom)" в Wert поле в таблице. другие строки сохраняются без каких-либо проблем.

Если у меня есть файл cvs, содержащий только одну строку, подобную этой:

      XValue, YValue, Wert, Name, FzgID
    , ,  "CARB (Evap Denom)",  DIUMPR_CldStrtDenCldStrtTyp_C, 238
  

эта строка будет правильно сохранена в таблице в базе данных также с "CARB (Evap Denom)"

может кто-нибудь сказать мне причину этого события?

Ответ №1:

Вы опустили второй аргумент метода TransferText. Этот аргумент является SpecificationName , который является именем спецификации импорта, которая сообщает Access, какими должны быть имена и типы полей для этого конкретного импорта.

Без спецификации импорта Access просмотрит первые несколько строк файла CSV и «угадает», какими должны быть типы полей. В вашем случае — за исключением первой строки данных — [Wert] выглядит как числовое поле, так что это то, что создает Access. Значение из первой строки данных не импортируется, поскольку оно не подходит для Number (Double) поля.

У вас есть как минимум два варианта:

(1) Вы можете создать спецификацию импорта, выполнив ручной импорт в Access, нажав кнопку «Дополнительно …», изменив тип (ы) поля и нажав кнопку «Сохранить как …» …

ImportSpec.png

… затем включите имя спецификации импорта в качестве второго аргумента вашего вызова TransferText:

 DoCmd.TransferText acImportDelim, "DCM Import Specification", "tb_DCM_Daten", Filename, True
  

… или …

(2) Сначала вы можете создать таблицу (с соответствующими именами и типами полей), а затем импортировать файл CSV в существующую таблицу.

Комментарии:

1. Большое вам спасибо, вы очень хорошо все объяснили