Ошибка Jet 3011 при открытии файла с 2 & # 8220; расширениями & # 8221;

StackOverflow https://stackoverflow.com/questions/1433432

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня возникла проблема с ошибкой выброса Jet 3011, когда я пытаюсь использовать ее для открытия файла с 2 " расширениями " (& Quot; filename.tst.csv & Quot;).

  

Ошибка времени выполнения '3011'

     

Механизму базы данных Microsoft Jet не удалось найти объект 'filename.tst.csv'. Убедитесь, что объект существует, и что вы правильно написали его имя и путь.

Где код выглядит следующим образом:

Dim db as Database, rs as Recordset
Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];")
Set rs = db.OpenRecordset("SELECT TOP 1 * FROM [" & fileName & "];")

Я обнаружил, что проблема заключается во втором расширении (или явном расширении) " .tst " но я не уверен, почему происходит ошибка, и я не смог найти ответ через Google или здесь - но я думаю, что кто-то может иметь некоторое представление об ограничениях.

Это использует DAO 3.6 в VB6.

Это было полезно?

Решение

Это не совсем та ситуация, о которой вы говорите, но при чтении этого в разделе CAUSE информация о некоторых драйверах, не поддерживающих длинные имена файлов, выглядит так, как будто бы это применимо, поскольку это не формат 8.3.

http://social.technet.microsoft.com ? / Поиск / EN-US запрос = 3011 & амп; ас = 8

Итак, вам нужно переименовать файл ИЛИ использовать другой метод для загрузки данных (например, с помощью StreamReader). Лично я бы переименовал файл. Это было бы намного проще.

Другие советы

Это немного глупо, но вы можете программно переименовать файл, прежде чем открывать его в более дружественном расширении. Просто держите старое расширение рядом, чтобы вы могли установить его обратно, когда закончите.

Почему бы просто не использовать короткое имя файла? Он не будет содержать более одного периода. Просто добавьте класс CFileInfo с этого предложения с превосходного сайта Карла Петерсона (в нем есть метод-обертка для вызова API GetShortPathName ).

Я полагаю, что том может не поддерживать короткие имена файлов (это необязательно ).

Вам необходимо либо создать файл schema.ini для файла импорта, либо добавить расширение в раздел реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text \ Format, чтобы ADO знал, как анализировать файл. Подробное объяснение можно найти по адресу http://msdn.microsoft.com/en- нас / библиотека / ms974559.aspx

Я не уверен в этом, потому что я мало использовал DAO, так как он устарел в VB6. Я знаю, что правила Jet могут сильно отличаться в зависимости от поставщика OLE DB, драйвера ODBC и DAO.

Вы пытались заменить ". " символы в этих именах файлов от " # " персонажи? Или, может быть, только последний? Просто в тексте вашего оператора SQL.

По моему мнению, ваша вторая строка кода ничего не может вернуть!

Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];")

Вы не можете открыть базу данных с помощью инструкции SELECT! Ваш код выглядит как

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top