Использование документа word в базе данных

Существует два способа переноса данных из текстового файла в Access. Если вы хотите создать копию данных, доступную для изменения в Access, файл следует импортировать в новую или существующую таблицу с помощью мастера импорта текстовых файлов. Если вы просто хотите просматривать обновленные исходные данные в Access и использовать расширенные функции запросов и отчетов, создайте в базе данных связь с текстовым файлом с помощью мастера связывания с текстовыми файлами.

В этой статье подробно описываются процедуры импорта и связывания с текстовым файлом с помощью мастеров.

В этой статье

  • Текстовые файлы и поддерживаемые форматы

  • Импорт данных из текстового файла

  • Что еще важно знать об импорте

  • Решение проблем, связанных с отсутствующими и неверными значениями в импортированной таблице

  • Создание связи с текстовым файлом

  • Решение проблем со значением #ЧИСЛО! и неверными значениями в связанной таблице

Текстовые файлы и поддерживаемые форматы

Текстовый файл содержит читаемые знаки без форматирования (например, буквы и цифры) и специальные символы (такие как табуляция, перевод строки и возврат каретки). Access поддерживает следующие расширения для имени файла: TXT, CSV, ASC и TAB.

Чтобы использовать текстовый файл в качестве источника для импорта или связывания, необходимо структурировать его содержимое таким образом, чтобы мастера импорта и связывания могли разделить его на записи (строки), а каждую запись — на поля (столбцы). Текстовые файлы с правильной структурой делятся на два типа:

  • Файлы с разделителями.    В таких файлах каждая запись располагается на отдельной строке, а поля отделяются друг от друга одним символом (разделителем). Разделителем может служить любой знак, который не используется в значениях полей, например знак табуляции, точка с запятой, запятая, пробел и т. д. Ниже приведен пример текста с разделителями-запятыми.

    1,Company A,Anna,Bedecs,Owner
    2,Company C,Thomas,Axen,Purchasing Rep
    3,Company D,Christina,Lee,Purchasing Mgr.
    4,Company E,Martin,O’Donnell,Owner
    5,Company F,Francisco,Pérez-Olaeta,Purchasing Mgr.
    6,Company G,Ming-Yang,Xie,Owner
    7,Company H,Elizabeth,Andersen,Purchasing Rep
    8,Company I,Sven,Mortensen,Purchasing Mgr.
    9,Company J,Roland,Wacker,Purchasing Mgr.
    10,Company K,Peter,Krschne,Purchasing Mgr.
    11,Company L,John,Edwards,Purchasing Mgr.
    12,Company M,Andre,Ludo,Purchasing Rep
    13,Company N,Carlos,Grilo,Purchasing Rep
    

  • Файлы с полями фиксированного размера.    В таком файле каждая запись размещается на отдельной строке, а ширина каждого поля является постоянной для всех записей. Например, первое поле каждой записи всегда состоит из семи знаков, второе — всегда из 12, и т. д. Если фактические значения поля различаются от записи к записи, к значениям, длина которых меньше требуемой ширины, в конце нужно добавить пробелы. Ниже приведен пример текста с полями фиксированного размера.

    1   Company A   Anna       Bedecs         Owner            
    2   Company C   Thomas     Axen           Purchasing Rep   
    3   Company D   Christina  Lee            Purchasing Mgr.  
    4   Company E   Martin     O’Donnell      Owner            
    5   Company F   Francisco  Pérez-Olaeta   Purchasing Mgr.  
    6   Company G   Ming-Yang  Xie            Owner            
    7   Company H   Elizabeth  Andersen       Purchasing Rep   
    8   Company I   Sven       Mortensen      Purchasing Mgr.  
    9   Company J   Roland     Wacker         Purchasing Mgr.  
    10  Company K   Peter      Krschne        Purchasing Mgr.  
    11  Company L   John       Edwards        Purchasing Mgr.  
    12  Company M   Andre      Ludo         Purchasing Rep   
    13  Company N   Carlos     Grilo          Purchasing Rep   
    

К началу страницы

Импорт данных из текстового файла

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

В ходе импорта вы можете задать структуру исходного файла и выбрать вариант импорта: в новую или существующую таблицу.

В конце импорта можно сохранить сведения о нем в виде спецификации. Спецификация позволяет выполнять импорт повторно без использования мастера.

Стандартные сценарии импорта текстового файла в Access

Как правило, текстовые данные импортируются в Access по следующим причинам:

  • Часть данных хранится в формате, который не поддерживается в Access, но их требуется использовать в базе данных. Исходные данные можно сначала экспортировать в текстовый файл, а затем импортировать этот файл в таблицу Access.

  • Вы используете Access для управления данными, но при этом регулярно получаете данные в текстовом формате от пользователей другой программы. Импорт данных выполняется регулярно, и вы хотите упростить этот процесс для экономии времени и усилий.

Примечание: Если открыть в Access текстовый файл (для этого нужно выбрать в списке Тип файлов диалогового окна Открытие файла базы данных значение Все файлы и щелкнуть нужный текстовый файл), Access запустит мастер связывания с текстовыми файлами, который позволяет создать ссылку на текстовый файл, вместо того чтобы импортировать его содержимое. Связывание с файлом отличается от импорта его содержимого. Дополнительные сведения о связывании с текстовыми файлами см. в разделе Создание связи с текстовым файлом далее в этой статье.

Подготовка исходного файла

  1. Откройте исходный файл в текстовом редакторе, например в Блокноте.

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

  2. Просмотрите содержимое исходного текстового файла и выполните действия из приведенной ниже таблицы.

    Элемент

    Описание

    Разделители или поля фиксированного размера

    Убедитесь, что содержимое файла соответствует выбранному формату. Если это файл с разделителями, найдите разделитель. Если это файл с полями фиксированного размера, убедитесь, что длина значения поля одинакова во всех записях.

    Ограничители текста

    Некоторые файлы с разделителями могут содержать значения полей, заключенные в одинарные или двойные кавычки, как показано ниже:

    • «Ольга Зуева»,25,4.5.2017,»Нижний Новгород»

    • «Глеб Селезнев»,27,2018,»Вологда»

    Знак, используемый для ограничения значения поля, называется ограничителем текста. Ограничители не являются обязательными, но их рекомендуется использовать в следующих случаях:

    • Разделитель является частью значения поля. Например, если в качестве разделителя используется запятая, а значение поля равно Самара, Вологда, его придется заключить в ограничители: «Самара, Вологда».

    • Вы хотите, чтобы Access обрабатывал нетекстовые значения, например 0452934 и 0034539, как текстовые и хранил их в текстовом поле.

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

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

    Количество полей

    Число исходных полей не должно превышать 255 , так как Access поддерживает не более 255 полей в таблице.

    Пропуск записей и значений

    Если вам нужно перенести лишь часть текстового файла, его следует отредактировать перед началом импорта, так как пропуск записей в ходе операции невозможен.

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

    Пустые строки и поля

    Удалите все лишние пустые строки из файла. При наличии пустых полей добавьте в них отсутствующие данные. Если вы планируете добавить записи в существующую таблицу, убедитесь, что соответствующие поля таблицы допускают использование значений NULL. Поле может принимать значения NULL, если для его свойства Обязательное поле задано значение Нет, а свойство Условие на значение не запрещает значения NULL.

    Лишние символы

    Найдите и удалите лишние символы (табуляции, перевода строки, возврата каретки).

    Типы данных

    Чтобы избежать ошибок при импорте, убедитесь, что типы данных в полях одинаковы для всех строк. Access считывает первые 25 строк файла, чтобы определить тип данных для полей таблицы. Настоятельно рекомендуем убедиться в том, что первые 25 исходных строк не содержат данные разных типов. Кроме того, нетекстовые значения, которые требуется обрабатывать как текстовые, необходимо заключить в одинарные или двойные кавычки.

    Если исходный файл содержит смешанные значения в строках, идущих после 25-й строки, они могут быть пропущены или неправильно преобразованы при импорте. Сведения об устранении проблем см. в разделе Решение проблем, связанных с отсутствующими и неверными значениями в импортированной таблице далее в этой статье.

    Имена полей

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

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

  3. Закройте исходный файл, если он открыт. Если исходный файл остается открытым в ходе операции импорта, могут возникнуть ошибки преобразования данных.

Запуск импорта в Access

  1. Откройте базу данных Access, в которой будут храниться импортируемые данные. Если ни одна из существующих баз данных не подходит для этого, создайте пустую базу данных.

  2. Перед началом импорта следует определить, в какой таблице будут храниться данные: в новой или существующей.

    • Создание новой таблицы.    Если необходимо сохранить данные в новой таблице, в Access создается таблица, в которую добавляются импортируемые данные. Если таблица с указанным именем уже существует, ее содержимое перезаписывается импортируемыми данными.

    • Добавление в существующую таблицу.    Если используется существующая таблица, при импорте данные добавляются в нее.

      Следует помнить, что ошибки в ходе добавления зачастую объясняются тем, что исходные данные не соответствуют структуре и параметрам полей в конечной таблице. Чтобы избежать таких ошибок, откройте таблицу в режиме конструктора и проверьте следующее:

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

      • Отсутствующие или лишние поля.    Если в конечной таблице отсутствует одно или несколько полей, добавьте их до начала импорта. Если же таблица содержит поля, отсутствующие в исходном файле, их не требуется удалять из таблицы, если для них разрешены значения NULL.

        Совет: Поле может принимать значения NULL, если для его свойства Обязательное поле задано значение Нет, а свойство Условие на значение не запрещает значения NULL.

      • Первичный ключ.    Если таблица содержит поле первичного ключа, исходный файл должен содержать столбец со значениями, совместимыми с полем первичного ключа. Кроме того, импортируемые значения ключа должны быть уникальными. Если импортируемая запись содержит значение первичного ключа, которое уже существует в таблице, отображается сообщение об ошибке. Нужно отредактировать исходные данные таким образом, чтобы они содержали уникальные значения ключа, а затем повторить импорт.

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

  3. Расположение мастера импорта или связывания текста зависит от используемой версии Access. Выполните действия, которые соответствуют вашей версии Access.

    • Если вы используете Access 2019 или последнюю версию Access, которая предоставляется по подписке на Microsoft 365, на вкладке Внешние данные в группе Импорт и связи нажмите кнопку Создать источник данных и выберите Из файла > Текстовый файл.

    • Если вы используете Access 2016, Access 2013 или Access 2010, на вкладке Внешние данные в группе Импорт и связи нажмите кнопку Текстовый файл.

  4. Откроется диалоговое окно Внешние данные — Текстовый файл.

    Выберите вариант для импорта данных из текстового файла, их добавления или создания связи с ними.

  5. В диалоговом окне Внешние данные — Текстовый файл введите путь к исходному файлу в поле Имя файла.

  6. Укажите способ сохранения импортируемых данных.

    • Чтобы сохранить данные в новой таблице, выберите вариант Импортировать данные источника в новую таблицу в текущей базе данных. Позднее будет предложено указать имя этой таблицы.

    • Чтобы добавить данные в существующую таблицу, выберите параметр Добавить копию записей в конец таблицы и выберите таблицу в раскрывающемся списке.

      Примечание: Сведения о связывании с источником данных путем создания связанной таблицы см. ниже в разделе Создание связи с текстовым файлом.

  7. Нажмите кнопку ОК.

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

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

  8. Нажмите кнопку Далее.

    В зависимости от выбранного варианта (файл с разделителями или с полями фиксированного размера) мастер отображает нужные сведения.

    С разделителями

    Выберите или укажите знак, разделяющий значения полей (табуляция, точка с запятой, запятая, пробел или другой). Если в файле используется ограничитель строк, выберите в поле Ограничитель текста двойные («) или одинарные () кавычки. Если первая строка исходного файла содержит имена полей, установите флажок Первая строка содержит имена полей. Затем нажмите кнопку Далее.

    Фиксированная ширина полей

    Мастер отображает содержимое файла. Если Access обнаруживает столбцы данных, для разделения полей вставляются вертикальные черты. Просмотрите предлагаемую мастером структуру и следуйте его инструкциям, если нужно добавить, удалить или исправить строки. Затем нажмите кнопку Далее.

  9. Если вы добавляете данные в существующую таблицу, перейдите к шагу 12. Если же данные импортируются в новую таблицу, нажмите кнопку Далее, чтобы просмотреть свойства полей, отображаемые в мастере.

    Примечание: Страница мастера, на которой можно указать сведения об импортируемых полях, не отображается при добавлении записей в существующую таблицу.

  10. Щелкните столбец в нижней части страницы, чтобы отобразить свойства нужного поля. Просмотрите и измените имя и тип данных конечного поля.

    Access проверяет первые 25 строк каждого столбца, чтобы определить тип данных для соответствующего поля. Если первые 25 строк столбца содержат значения разных типов, например текст и числа, мастер предлагает тип данных, совместимый со всеми значениями столбца или их большинством (как правило, это текстовый тип данных). Хотя можно выбрать и другой тип данных, следует помнить, что значения, несовместимые с этим типом, будут в ходе импорта пропущены или преобразованы неправильно. Дополнительные сведения о том, как исправить неверные или отсутствующие значения, см. ниже в разделе Решение проблем, связанных с отсутствующими и неверными значениями в импортированной таблице.

  11. Чтобы создать индекс для поля, присвойте свойству Индексировано значение Да. Чтобы пропустить весь исходный столбец, установите флажок Не импортировать (пропустить) поле. Затем нажмите кнопку Далее.

  12. Если записи добавляются в новую таблицу, мастер предлагает указать для нее первичный ключ. При выборе варианта автоматически создать ключ Access добавляет поле счетчика в качестве первого поля конечной таблицы и автоматически заполняет его уникальными значениями кодов, начиная с 1. Нажмите кнопку Далее.

    Примечание: Страница мастера, на которой можно указать сведения об импортируемых полях, не отображается при добавлении записей в существующую таблицу.

  13. Откроется последняя страница мастера. Если записи импортируются в новую таблицу, укажите ее имя в поле Импорт в таблицу. Если такая таблица уже существует, появится запрос о перезаписи ее содержимого. Нажмите кнопку Да, чтобы продолжить, или кнопку Нет, чтобы указать другое имя конечной таблицы.

    Для чего предназначена кнопка Дополнительно?

    Кнопка Дополнительно в мастере импорта текстовых файлов служит для создания или открытия спецификаций импорта в формате, который использовался в предыдущих версиях Access. Кнопку Дополнительно рекомендуется использовать только в том случае, если спецификации импорта, созданные в предыдущих версиях Access, требуется использовать в Access 2007. Если же вы хотите сохранить сведения об этой операции импорта, прочтите следующий раздел.

  14. Чтобы импортировать данные, нажмите кнопку Готово.

    Access попытается импортировать данные. Если хотя бы часть данных импортирована, в мастере появится диалоговое окно, в котором указывается состояние импорта. Если же операция закончилась сбоем, в Access отображается сообщение Ошибка при попытке импорта файла.

  15. Откройте конечную таблицу в режиме таблицы. Сравните данные в таблице с исходным файлом, чтобы убедиться в их правильности.

Что еще важно знать об импорте

  • Сведения о том, как сохранить сведения об импорте в виде спецификации, которую можно использовать повторно, см. в статье Сохранение параметров операции импорта или экспорта в виде спецификации.

  • Дополнительные сведения о запуске спецификаций см. в статье Выполнение сохраненной операции импорта или экспорта.

  • Дополнительные сведения о запуске спецификаций в определенное время см. в статье Планирование импорта или экспорта.

  • Сведения о том, как изменить имя спецификации, удалить ее или обновить имена исходных файлов, см. в статье Задачи управления данными.

Решение проблем, связанных с отсутствующими и неверными значениями в импортированной таблице

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

Важно отметить, что даже если в сообщении о состоянии указано, что операция завершилась успешно, перед использованием таблицы следует просмотреть ее содержимое и структуру, чтобы убедиться в правильности всех данных.

Откройте конечную таблицу в режиме таблицы, чтобы убедиться в том, что в таблицу были успешно добавлены все данные. После этого откройте таблицу в режиме конструктора, чтобы проверить типы данных и параметры свойств для полей.

В приведенной ниже таблице описаны действия по разрешению проблем, связанных с отсутствующими или неверными значениями.

Совет: Если вы обнаружили лишь несколько отсутствующих значений, можно добавить их в таблицу вручную в режиме таблицы. Если же отсутствует или неправильно импортирован целый столбец либо большой объем данных, следует исправить исходный файл. После устранения всех возможных проблем повторите импорт.

Проблема

Решение

Значения –1 или 0

Если в исходном файле есть поле, которое содержит только значения «Истина» или «Ложь» либо только значения «Да» или «Нет», и для этого поля выбран тип данных «Логический», в таблице появятся значения –1 и 0. Откройте таблицу в режиме конструктора и задайте для свойства Формат значение Истина/Ложь или Да/Нет.

Многозначные поля

В Access импорт нескольких значений в одно поле не поддерживается. Список значений обрабатывается как одно значение и помещается в тестовое поле. Значения в поле разделяются точкой с запятой.

Усеченные данные

В случае усечения данных в столбце попытайтесь увеличить его ширину в режиме таблицы. Если устранить проблему таким образом не удается, возможно, причина в том, что числовое поле имеет тип Длинное целое вместо Двойное с плавающей точкой.

Отсутствуют данные в поле первичного ключа или индексированном поле

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

Пустые значения

Открыв таблицу в режиме таблицы, вы можете заметить, что некоторые поля пустые. Чтобы сократить количество пустых значений в таблице или полностью удалить их, выполните перечисленные ниже действия.

  • Если в первых 25 строках исходного файла встречаются значения с разным типом данных, откройте файл и поменяйте порядок строк таким образом, чтобы в каждом поле в первых 25 строках тип данных совпадал. Затем попробуйте повторить импорт.

  • Заключите в одинарные или двойные кавычки все нетекстовые значения, которые вы хотите сохранить как текстовые.

  • В ходе импорта выберите для каждого поля подходящий тип данных. Если он указан неправильно, во всем столбце могут появиться пустые или неверные значения.

Кроме того, может потребоваться просмотреть таблицу ошибок, о которой говорится на последней странице мастера, в режиме таблицы. Эта таблица содержит три поля: «Ошибка», «Поле» и «Строка». В каждой ее строке содержатся сведения об определенной ошибке, а данные в поле «Ошибка» можно использовать при устранении проблем.

Полный список ошибок и советы по устранению неполадок

Ошибка

Описание

Обрезка полей

Значение в поле превышает размер, заданный свойством FieldSize этого поля.

Ошибка преобразования типа

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

Нарушение уникальности ключа

Значение первичного ключа записи совпадает со значением, уже имеющимся в таблице.

Нарушение условия на значение

Значение не соответствует правилу, заданному для этого поля или таблицы с помощью свойства ValidationRule.

Пустое значение в обязательном поле

Данное поле не может иметь пустое значение, поскольку его свойство Обязательное поле (Required) имеет значение Да.

Пустое значение в поле счетчика

Импортируемые данные содержат пустое значение (NULL), и была выполнена попытка добавить его в поле счетчика.

Неинтерпретируемая запись

Текстовое значение содержит знак разделителя (как правило, это прямые кавычки). Если значение содержит знак разделителя, он должен содержаться в текстовом файле дважды, например:

по 10 дискет 3 1/2″» в коробке

К началу страницы

Создание связи с текстовым файлом

Связывание позволяет использовать данные из другого файла, не импортируя их. В этом случае можно просматривать обновленные данные как в исходной программе, так и в файле Access. При этом не требуется создавать и обновлять копию данных в Access. Если вместо копирования текстового файла в базу данных Access требуется использовать его для выполнения запросов и создания отчетов, следует использовать не операцию импорта, а функцию связывания с текстовым файлом.

Когда вы создаете связь с текстовым файлом, Access создает таблицу, которая связана с исходным файлом. Все изменения, вносимые в исходный файл, применяются к связанной таблице. При этом изменение данных таблицы в Access не разрешается. Если вы хотите внести изменения в содержимое или структуру, откройте исходный файл и отредактируйте его.

Стандартные сценарии связывания с текстовым файлом из Access

  • Вы используете программу, которая сохраняет выходные данные в текстовом формате, однако эти данные нужны для анализа и создания отчетов в других приложениях, в том числе в Access.

  • Данные, необходимые для работы, обновляются сотрудниками другого отдела или рабочей группы. Вы хотите просматривать обновленные данные, но не изменять их или хранить собственную копию.

Первое связывание с текстовым файлом

  • При связывании с текстовым файлом в Access создается новая таблица, которая называется также связанной таблицей. В ней отображаются данные исходного файла; при этом они не сохраняются в базе данных.

  • Текстовый файл невозможно связать с существующей таблицей базы данных. Другими словами, операция связывания не позволяет добавлять данные в существующую таблицу.

  • База данных может содержать несколько связанных таблиц.

  • Все изменения данных в исходном файле автоматически отражаются в связанной таблице. Однако содержимое и структура связанной таблицы Access доступны только для чтения.

  • При открытии текстового файла в Access создается пустая база данных и автоматически запускается мастер связывания с текстовыми файлами.

Шаги по созданию связи с текстовым файлом

  1. Найдите текстовый файл и откройте его в текстовом редакторе, например, в Word или Блокноте.

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

  2. Просмотрите данные исходного файла и выполните необходимые действия в соответствии с приведенной ниже таблицей.

    Элемент

    Описание

    Разделители или поля фиксированного размера

    Убедитесь, что содержимое файла соответствует выбранному формату. Если это файл с разделителями, найдите разделитель. Если это файл с полями фиксированного размера, убедитесь, что длина значения поля одинакова во всех записях.

    Ограничители текста

    Некоторые файлы с разделителями могут содержать значения полей, заключенные в одинарные или двойные кавычки, как показано ниже:

    «Ольга Зуева»,25,4.5.2017,»Нижний Новгород»

    «Глеб Селезнев»,27,2018,»Вологда»

    Знак, используемый для ограничения значения поля, называется ограничителем текста. Ограничители не являются обязательными, но их рекомендуется использовать в следующих случаях:

    • Разделитель является частью значения поля. Например, если в качестве разделителя используется запятая, а значение поля равно Самара, Вологда, его придется заключить в ограничители: «Самара, Вологда».

    • Вы хотите, чтобы Access обрабатывал нетекстовые значения, например 0452934 и 0034539, как текстовые и хранил их в текстовом поле.

    Во время связывания можно указать, используется ли в файле ограничитель, и, если он используется, задать соответствующий знак.

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

    Количество полей

    Число исходных полей не должно превышать 255 , так как Access поддерживает не более 255 полей в таблице.

    Пропуск записей и полей

    Вы можете пропустить некоторые поля, но не записи.

    Пустые строки и поля

    Удалите все лишние пустые строки в файле. При наличии пустых полей постарайтесь добавить в них отсутствующие данные в исходном файле.

    Лишние символы

    Найдите и удалите лишние знаки (символы табуляции, перевода строки, возврата каретки).

    Типы данных

    Чтобы избежать ошибок при связывании, убедитесь, что типы данных в полях одинаковы для всех строк. Access считывает первые 25 строк файла, чтобы определить тип данных для полей таблицы. Настоятельно рекомендуем убедиться в том, что первые 25 исходных строк не содержат данные разных типов. Кроме того, нетекстовые значения, которые требуется обрабатывать как текстовые, необходимо заключить в одинарные или двойные кавычки.

    Если исходный файл содержит смешанные значения в строках, идущих после 25-й строки, они могут быть неправильно преобразованы или привести к ошибкам. Сведения об устранении проблем см. в разделе Решение проблем со значением #ЧИСЛО! и неверными значениями в связанной таблицедалее в этой статье.

    Имена полей

    Если файл с разделителями не содержит имена полей, их рекомендуется указать в первой строке. В ходе связывания можно настроить мастер так, чтобы значения в первой строке считались именами полей. Однако при импорте файлов с полями фиксированного размера такая возможность недоступна.

  3. Закройте исходный файл, если он открыт.

  4. Откройте базу данных, в которой требуется создать связь. Убедитесь, что база данных доступна не только для чтения и что у вас есть права на внесение в нее изменений.

    Если ни одна из существующих баз данных не подходит для хранения связи, создайте пустую базу данных.

  5. Расположение мастера импорта или связывания текста зависит от используемой версии Access. Выполните действия, которые соответствуют вашей версии Access.

    • Если вы используете Access 2019 или последнюю версию Access, которая предоставляется по подписке на Microsoft 365, на вкладке Внешние данные в группе Импорт и связи нажмите кнопку Создать источник данных и выберите Из файла > Текстовый файл.

    • Если вы используете Access 2016, Access 2013 или Access 2010, на вкладке Внешние данные в группе Импорт и связи нажмите кнопку Текстовый файл.

  6. Откроется диалоговое окно Внешние данные — Текстовый файл.

    Выберите вариант для импорта данных из текстового файла, их добавления или создания связи с ними.

  7. В диалоговом окне Внешние данные — Текстовый файл укажите имя текстового файла, который содержит данные для связывания, в поле Имя файла.

  8. Выберите вариант Создать связанную таблицу для связи с источником данных и нажмите кнопку ОК.

    Откроется мастер связывания с текстовыми файлами, помогающий выполнить нужные действия по связыванию.

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

  10. Нажмите кнопку Далее.

  11. Следующая страница зависит от выбранного варианта (файл с разделителями или полями фиксированного размера).

    Файлы с разделителями.    Выберите или укажите знак разделителя для значений полей. Если в файле используется ограничитель строк, выберите в поле Ограничитель текста значение « (двойные кавычки) или (одинарные кавычки). Если первая строка исходного файла содержит имена полей, установите флажок Первая строка содержит имена полей. Затем нажмите кнопку Далее.

    Файлы с полями фиксированного размера.    Мастер отображает содержимое файла. Если Access обнаруживает столбцы данных, для разделения полей вставляются вертикальные черты. Просмотрите предлагаемую мастером структуру и следуйте его инструкциям, если нужно добавить, удалить или исправить строки. Затем нажмите кнопку Далее.

  12. На следующей странице мастера выводятся свойства поля. Щелкните столбец в нижней части страницы, чтобы отобразить свойства нужного полей. Просмотрите и измените имена и типы данных конечных полей.

    Access проверяет первые 25 строк каждого столбца, чтобы определить тип данных для соответствующего поля. Если первые 25 строк столбца содержат значения разных типов, например текст и числа, мастер предлагает тип данных, совместимый со всеми значениями столбца или их большинством (как правило, это текстовый тип данных). Хотя можно выбрать и другой тип данных, следует помнить, что значения, несовместимые с этим типом, будут преобразованы неправильно или приведут к ошибкам. Дополнительные сведения см. ниже в разделе Решение проблем со значением #ЧИСЛО! и неверными значениями в связанной таблице.

    Для чего предназначена кнопка Дополнительно?

    Кнопка Дополнительно в мастере служит для создания или открытия спецификаций связывания в формате, который использовался в предыдущих версиях Access. В Access не поддерживается сохранение спецификации для связывания (в отличие от импорта и экспорта). Поэтому для сохранения спецификации связывания следует нажать кнопку Дополнительно, выбрать нужные параметры и нажать кнопку Сохранить как.

  13. Нажмите кнопку Далее.

  14. На последней странице мастера укажите имя связанной таблицы и нажмите кнопку Готово. Если таблица с указанным именем существует, появится запрос на ее перезапись. Нажмите кнопку Да, чтобы перезаписать файл, или кнопку Нет, чтобы задать другое имя таблицы.

    Access попытается создать связанную таблицу. В случае успешного создания таблицы появится сообщение Завершено связывание таблицы. Откройте связанную таблицу и просмотрите поля и данные, чтобы убедиться в их правильности.

К началу страницы

Решение проблем со значением #ЧИСЛО! и неверными значениями в связанной таблице

Даже если появится сообщение Завершено связывание таблицы, откройте таблицу в режиме таблицы и убедитесь, что все строки и столбцы содержат правильные данные.

При наличии в таблице ошибок или неверных данных необходимо выполнить действия, описанные в приведенной ниже таблице, и повторить попытку связывания. Следует помнить, что добавить значения непосредственно в связанную таблицу невозможно, так как она доступна только для чтения.

Проблема

Решение

Значения –1 или 0

Если в исходном файле есть поле, которое содержит только значения «Истина» или «Ложь» либо только значения «Да» или «Нет», и для этого поля выбран тип данных Логический, в таблице появятся значения –1 и 0. Откройте таблицу в режиме конструктора и задайте для свойства Формат значение Истина/Ложь или Да/Нет.

Многозначные поля

При связывании в одном поле не может быть несколько значений. Список значений обрабатывается как одно значение и помещается в тестовое поле. Значения в поле разделяются точкой с запятой.

Усеченные данные

В случае усечения данных в столбце попытайтесь увеличить его ширину в режиме таблицы. Если устранить проблему таким образом не удается, возможно, причина в том, что числовое поле имеет тип «Длинное целое» вместо «Двойное с плавающей точкой».

#ЧИСЛО!

Открыв таблицу в режиме таблицы, вы можете заметить, что некоторые поля содержат значение #ЧИСЛО! вместо фактического значения. Чтобы свести к минимуму количество значений NULL в таблице или избавиться от них совсем, выполните следующие действия:

  • Заключите в одинарные или двойные кавычки все нетекстовые значения, которые вы хотите сохранить как текстовые.

  • В ходе связывания выберите подходящий тип данных для каждого поля. Если выбран неверный тип данных, конечный столбец может содержать только значения #ЧИСЛО! во всех строках.

В приведенной ниже таблице содержится список случаев, в которых будут появляться ошибки #ЧИСЛО!.

Тип отсутствующих значений

Тип конечного поля

Действие

Текст

Числовое поле или поле даты

Замените все текстовые данные значениями, соответствующими типу данных конечного поля, и повторите попытку связывания.

Дата

Число

Замените все значения даты числовыми значениями и повторите попытку связывания.

Число

Дата

Замените все числовые значения значениями даты и повторите попытку связывания.

К началу страницы

Хотя Access — это приложение базы данных, которое имеет надежные объекты интерфейса, пользователи не знакомы с этим приложением. Во многих случаях Access не установлен ни в одной пользовательской системе, или вы можете запретить пользователям получать доступ к вашей базе данных.

В этой статье TipsMake.com расскажет, как использовать приложение Word для сбора пользовательских данных и последующего переноса всех этих данных в таблицу в Access. Для этого метода требуются коды Access, приложения базы данных Word и Visual Basic для приложений (VBA). (Приведенные ниже инструкции реализованы в Word 2003 и 2007, но этот метод также будет совместим с версиями Win 2000, XP и 2002).

Примечание к базе данных

Для простоты представьте, что Word куда-то передаст данные, а аналогичная база данных будет передана в Access. При применении этого метода на работе перед созданием файла Word необходимо знать следующие детали:

  1. Путь и имя базы данных.
  2. Имя таблицы в Access.
  3. Назовите поля в таблице и тип данных.

Пример выполняется в форме (форме) Word (рисунок A), вы обновляете два поля в таблице Shippers: Название компании а также Телефон . Оба эти поля представлены в текстовой форме. Пример пути:

C: Программные файлы Microsoft Office11Office11SamplesNorthwind.mdb

Возможно, вам потребуется обновить путь для настройки системы.

Изображение 1: Преобразование данных из Word в базу данных Access

Рисунок A: Приложение Word упрощает ввод данных для сбора данных для Access.

Сбор данных из формы Word

Форма Word — это документ, содержащий пустые ячейки, называемые полями, чтобы вы могли вводить данные. Поле — это предопределенная ячейка, в которой хранятся и принимаются входные данные. В примере формы Word, показанном на рисунке A, у нас есть два поля ввода. Используя это приложение, пользователи могут обновлять таблицу Shippers, а затем аналогичные базы данных будут перенесены в Access без необходимости запускать Access или даже вам не нужно разбираться в базе данных.

В таблице «Грузоотправители» 3 поля, но одно из них — автоматическая нумерация ( AutoNumber ). Когда приложение передает новую запись, Access отсортирует значения. Поэтому отображаются только два поля: txtCompanyName а также txtPhone .

Чтобы создать пример в форме Word, вставьте два текстовых поля (символа) в документ Word следующим образом:

1. В меню «Просмотр» выберите «Панели инструментов», а затем — «Формы».

2. Вставьте два элемента управления «Поле текстовой формы» и укажите, как провести линию между ними.

3. Дважды щелкните поле, чтобы открыть диалоговое окно «Параметры поля».

4. Использование свойства Bookmark для определения первого поля: txtCompanyName , Рисунок Б.

5. Повторите шаг 4 и определите второй элемент управления как txtPhone .

6. Сохраните файл.

Изображение 2: Преобразование данных из Word в базу данных Access

Рисунок B. Определите два текстовых элемента управления

В Word 2007 вам нужно добавить тег разработчика следующим образом:

1. Нажмите кнопку «Офис», а затем выберите «Параметры Word» (в правом нижнем углу).

2. Щелкните «Популярные».

3. Выберите вкладку «Показать разработчика» в разделе «Лента» и нажмите «ОК».

Обратите внимание, что имена полей в Word должны совпадать с именами полей в Access, которые будут Название компании а также Телефон . Единственная разница в том, что текст приставка. Нет необходимости называть поля в Word таким образом, но такое именование упростит сопоставление полей в Word и Access. ( текст чтобы определить, что это поле для ввода текста).

После завершения документа вам понадобится функция VBA для преобразования импортированных значений в базу данных Access. Выполните следующие действия, чтобы добавить функцию:

1. Откройте редактор Visual Basic (VBE), нажав Alt + F11.

2. Выберите «Модуль» в меню «Вставка».

3. Введите функцию в Код А. Обязательно обновите путь правильно, если ваш путь отличается от примера.

4. В меню «Инструменты» выберите «Ссылки» и установите флажок «Библиотека объектов данных Microsoft ActiveX 2.x (ADO)», как показано на рисунке C. (Он не будет выбирать этот элемент библиотеки самостоятельно, вы должны выбрать его). Будет сделана ссылка на объект Word и библиотеку VBA.

5. Щелкните OK, чтобы вернуться в модуль.

Код

Sub TransferShipper ()

‘Передача новой звукозаписывающей компании

‘Таблица грузоотправителей в базе данных Northwind.

Dim cnn As ADODB.Connection

Dim strConnection как строка

Dim strSQL как строка

Dim strPath как строка

Dim doc As Word.Document

Dim strCompanyName As String

Dim strPhone As String

Dim byt Продолжить как Byte

Dim lngSuccess As Long

Установить doc = ThisDocument

При ошибке GoTo ErrHandler

strCompanyName = Chr (39) & doc.FormFields («txtCompanyName»). Результат и Chr (39)

strPhone = Chr (39) & doc.FormFields («txtPhone»). Результат и Chr (39)

‘Подтвердите новую запись.

bytContinue = MsgBox («Вы хотите вставить эту запись?», vbYesNo, «Добавить запись»)

Debug.Print bytContinue

‘Обработка значений значений.

Если bytContinue = vbYes Тогда

strSQL = «ВСТАВИТЬ В грузоотправителей» _

& «(Название компании, Телефон)» _

& «ЗНАЧЕНИЯ (» _

& strCompanyName & «,» _

& strPhone & «)»

Отладка.Печать strSQL

‘Если возможно, замените путь и строку подключения на DSN.

strPath = «C: Program FilesMicrosoft Office11Office11SamplesNorthwind.mdb»

strConnection = «Provider = Microsoft.Jet.OLEDB.4.0;» _

& «Источник данных =» & strPath

Debug.Print strConnection

Установите cnn = New ADODB.Connection

cnn.Open strConnection

cnn.Execute strSQL, lngSuccess

cnn.Close

MsgBox «Вы вставили» & lngSuccess & «record», _

vbOKOnly, «Ошибка добавлена»

doc.FormFields («txtCompanyName»). TextInput.Clear

doc.FormFields («txtPhone»). TextInput.Clear

Конец, если

Установить doc = Nothing

Установите cnn = Nothing

Дополнительный выход

ErrHandler:

MsgBox Err.Number & «:» & Err.Description, _

vbOKOnly, «Ошибка»

При ошибке GoTo 0

При ошибке Возобновить Далее

cnn.Close

Установить doc = Nothing

Установите cnn = Nothing

Конец подписки

Изображение 3: Преобразование данных из Word в базу данных Access

Рисунок C: Ссылка на библиотеку ADO

Вернитесь в приложение Word и дважды щелкните на txtPhone . В диалоговом окне Параметры выберите TransferShipper из Выход раскрывающийся список, рисунок D. Делайте это до тех пор, пока последнему полю не будет присвоен код для передачи входных данных в Access.

Это самый простой способ выполнить код. Вы можете использовать другие методы, такие как добавление случайных элементов управления на панель инструментов. После того, как вы укажете TransferShipper в свойстве Exit. Наконец, закройте диалоговое окно.

Изображение 4: Преобразование данных из Word в базу данных Access

Рисунок D: Выполнение функции из элемента управления Выход последнего элемента управления

Теперь вы защитите форму, созданную в Word. Нажмите «Защитить форму» на панели инструментов «Формы». Сохраните всю карту образцов и закройте ее.

Используйте форму

Откройте файл формы Word и введите значение в оба поля, рис. E. Поле «Телефон» в таблице «Грузоотправители» принимает значение «телефон» почти для всех форматов. При применении этого метода убедитесь, что вы указали специальные атрибуты форматирования.

Изображение 5 Преобразования данных из Word в базу данных Access

Рисунок E: Введите новую запись

После ввода номера телефона нажмите Tab, чтобы закрыть это поле, TransferShipper () дочерняя функция будет работать (известная как макрос). После операторов объявления числа код объединит некоторые Chr () функции для ввода значения для добавления специальных символов. В этом случае Chr (39) функция возвращает значение (‘). Дата требует символов (#). Для числовых значений не требуются специальные символы.

Простое сообщение, которое вы видите на рисунке F, позволяет вам повторно подтвердить процесс передачи данных (рисунок E). Это также знак для проверки правильности входных значений пользователя. Например, вы можете проверить пустое поле или несоответствующий тип данных.

Изображение 6: Преобразование данных из Word в базу данных Access

Рисунок F: Подтвердите новую запись

Когда вы нажмете Да, код создаст инструкцию SQL INSERT INTO, которая включает поля доступа и значения, введенные в примерную таблицу:

ВСТАВИТЬ В accesstable (acessfld1, acessfld2,.)

ЗНАЧЕНИЯ (wordinputfld1, wordinputfld2,.)

Вам не нужно вводить значения для каждого поля в таблице Access, но вам нужно ввести обязательные поля. Обратите внимание на порядок совпадения полей ввода данных в Access и Word. Если вы опускаете ссылку на поле Access, вы также должны опустить входное значение в Word, поле AutoNumber вводить не нужно.

Далее код определит путь и откроет соединение. Обратите внимание, что вы можете включить пароль, если вы установили пароль для файла Access, используя следующий синтаксис:

cnn. Открыть строку подключения, идентификатор пользователя, пароль, параметры

Если для базы данных существует имя источника данных (DSN), обратитесь к нему следующим образом:

cnn.Open = «DSN = имя источника данных»

С DSN легче работать, чем со сложной цепочкой соединений. Наконец, метод Execute поместит данные в таблицу Shippers. База данных может быть открыта, но вы захотите подсчитать много пользователей и заблокировать возможности.

На рисунке G показано сообщение, подтверждающее завершение процесса передачи данных. Если вы пропустите этот шаг, произойдет ошибка. Если оператор INSERT INTO не работает, вам нужно будет решить эту проблему несколькими способами.

Например, вы можете удалять поля и добавлять новые значения. Лучшее решение — выявить ошибки, чтобы вовремя их избежать. Помните, что входные данные должны соответствовать всем свойствам поля в Access. Два наиболее распространенных инцидента:

  1. Несовместимые типы данных — Это означает, что вы не можете вводить текст в числовое поле и наоборот.
  2. Игнорируйте обязательные значения в таблице доступа — Если для запрошенного свойства поля доступа установлено значение «Да», вы не можете ввести нулевое значение. Если ты уйдешь txtCompanyName пусто, код будет ошибочным, потому что Access должно иметь значение в этом поле.

<

p style=»text-align: justify;»>

Изображение 7: Преобразование данных из Word в базу данных Access

<br>Рисунок G: Пример таблицы, показывающий код, который вставил новую запись

После успешного преобразования код очистит поля в Word. Очень простое управление ошибками. Тщательно проверьте эту технику и учтите все возможные ошибки. Если вы не уверены, что он работает должным образом, вы можете открыть панель «Отправители» в Access. На рисунке H показана только что добавленная запись. (Не беспокойтесь о AutoNumber значения; они не важны.)

Изображение 8: Преобразование данных из Word в базу данных Access

Рисунок H: Значения добавлены в таблицу

Успешное преобразование

Знание данных является ключом к преобразованию каждой новой записи без серьезных проблем. Пример кода содержит необходимые навыки для начала работы. Вам необходимо улучшить технологию для корректировки данных и некоторых других требований.

Эта программа не только позволяет пользователям экспортировать данные из баз данных в другие программы, такие как Microsoft Word, но это также позволяет им импортировать и связывать данные из текстового документа в базу данных в О компании . Таким образом, они могут добавлять дополнительную информацию в свои электронные таблицы в расчетном программном обеспечении.

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

Таким образом, у пользователей есть возможность выполнить эту процедуру два разных пути , каждый из которых применяется в соответствии с потребности последнего . Вот почему мы собираемся показать вам, как начать импортировать или связывать данные из текстового документа в Access , для этого подробно следуйте всему, чему мы вас научим ниже.

На случай, если текстовые файлы, они содержать символы Simples удобочитаемый , такие Только числа, специальные символы, такие как Только табуляции, разрывы строк и буквы . В случае Microsoft Доступ к нему позволяет использовать определенные совместимые форматы с вашей системой, например:. csv, .tab, .txt, .asc. Если вы хотите использовать текстовый файл в качестве исходного файла для ссылки или импорта, он Важно учитывать следующее:

Весь контент, который есть в исходный файл должен быть полностью организованный так что мастера импорта и привязки данных может разделить контент на наборы записей и для каждого из них записи разбивают их на набор полей , это означает, что он делит информацию на строки и столбцы . когда текстовый файл является правильно организованный, это может принадлежать к типу «Файлы с разделителями» ou «Файл фиксированной ширины».

Чтобы вы могли понять это немного больше, мы объясним каждый из них:

Файлы с разделителями

Файлы с разделителями — это место, где каждый из записи появляется в другой строке и поля разделены одним символом , это называется разделитель. Обратите внимание, что это может быть любой символ, которого нет в значения поля , в виде: точказапятая (;), пробел, табуляция, запятая (,), точка (.), Среди прочего.

Файлы фиксированной ширины

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

Первое поле Регистрация всегда будет семь персонажей Для вторая запись, длина всегда будет 12 символов и так далее для других записей. Если фактические значения длины варьироваться от одной записи к другой, эти значения не достигнут не нужная ширина дополнить конечными пробелами.

Какие самые важные вещи следует учитывать перед связыванием данных из текстового файла с Access?

Когда эти типы завозные de данные , О компании Предназначен для создать копию данных в базе данных место назначения без необходимости изменить источник. Когда процедура будет завершена, у вас есть возможность выбрать нужные вам объекты. ссылка или импорт , таким образом вы можете контролировать, как таблицы и запросы будет переведен и таким же образом указать, есть ли отношения между таблицами.

Однако эти процедуры выполняются с целью магазин все или часть данных, содержащихся в текстовый файл Dans Une База данных Microsoft Access . Этот процесс можно выполнить, вставив всю эту информацию в один существующая или новая база данных . Таким образом, пользователь не может увидеть эту информацию или даже иметь возможность манипулировать ею, редактируя ее содержимое.

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

Также важно, чтобы при выполнении этого процесса учитывались следующие аспекты:

  • Когда данные связаны, многие из них обычно находятся в формат, который не распознается Access, и эти данные очень важны для использования в база данных программы . Если это произойдет, вы можете экспортировать исходные данные в виде текстового файла , затем импортируйте контент текстового файла в таблице Access.
  • Обычно пользователи используют О компании для управлять данными, но данные в текстовом формате обычно поступают из разных программ, для этого данные должен быть импортирован через регулярные промежутки времени и другие ускорить процесс импорта , это позволит работа и время возможно сохранен .

Пошаговые инструкции по импорту и связыванию данных из текстового документа в Microsoft Access

Важно отметить, что процесс импорта и связывания выполняются по-разному, оба очень просты в исполнении, хотя можно считать как довольно обширная процедура . Вот почему мы собираемся научить вас шаг за шагом, как импортировать или связывать данные из текстового документа в Microsoft Excel.

Для этого следуйте каждому из этих методов:

импортер

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

Для этого вам необходимо выполнить каждый из следующих шагов:

Подготовьте исходный файл

Первый этап включает в себя подготовить исходный файл для этого вы должны откройте исходный текстовый файл в текстовом редакторе, например что Блокнот.

Затем вам нужно изучить содержимое исходного текстового файла и выполнить одно из следующих действий, которым мы вас научим:

  • Ограниченная или фиксированная ширина: Здесь вы должны убедиться, что файл всегда соответствует каждому из форматов. В случае, если он разграничен, вы должны определить разделитель . Теперь, если у него есть поле фиксированная ширина , вы должны убедиться, что каждое из полей имеет одинаковую ширину в каждой записи.
  • Квалификаторы текста: в случае файлов с разделителями они могут содержать значения полей, заключенные в одинарные или двойные кавычки.
  • Количество полей: номера исходных полей не могут быть больше 255, потому что Microsoft Access не поддерживает более 255 полей в таблице.
  • Игнорировать записи и значения: он используется, когда вас интересует только часть текстовый файл, для этого вы редактируете исходный файл перед начать процедуру импорта . Имейте в виду, что после его запуска пропустить записи больше нельзя.
  • Странные персонажи: Здесь вам нужно просмотреть все данные и удалить лишние символы, такие как перевод строки, возврат каретки и табуляция.
  • Пустые строки и поля: применяется в случае, если вы хотите удалить все ненужные пустые строки в файле , во многих случаях из Елисейские Vides вставляются ненужные. Чтобы добавить записи в существующую таблицу, вы должны убедиться, что соответствующее поле таблица принять новые ценности , иначе они не могут быть добавлены.
  • Типы данных: если вы хотите избежать ошибок во время импорта, вы должны быть абсолютно уверены, что каждое поле источника содержит данные одного и того же типа в каждой строке. В этих случаях программа проверяет, что ле Первые 25 строк файла для определения типа данных, содержащихся в таблице. Поэтому в первые 25 строк рекомендуется не смешивать в полях значения с разными типами данных.
  • Имена полей: для текстовые файлы с разделителями , если он не включает названия полей , то это очень хорошая альтернатива разместить их в первая линия . Когда процесс импорта, у пользователя есть возможность указать что Access обрабатывает значения в первой строке полей как имена полей.

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

Начать процесс импорта

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

Для этого имейте в виду следующие моменты:

  • Создайте новую таблицу: когда данные сохраняются в новая таблица, Access создает таблицу и добавляет в нее импортированные данные , в случае, если таблица уже существует с имя, которое было выбрано , программа перезаписывает содержимое импортированной таблицы данных.
  • Добавить существующую таблицу: Сейчас , если данные добавлены в существующая таблица, затем процесс импорта данных добавляет к указанной таблице.

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

Чтобы избежать этих возможных ошибок во время импорта, необходимо просмотреть следующие аспекты таблицы в режиме разработки:

  • Первая строка: Первым делом посмотрим на первую строчку исходный текстовый файл, здесь вы должны убедиться, что если он не содержит названия полей , вы также должны увидеть, что типы данных и положение каждого столбца соответствуют типам данных соответствующего поля таблицы . В случае файлов с разделителями если первая строка содержит заголовки столбцов , порядок столбцов и полей не нужно матч.

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

Посмотрим:

  • Дополнительные или отсутствующие поля: Возможно, что одно или несколько полей не появятся в целевой таблице, для этого вы должны добавить их перед le начиная процесса импорта . Теперь, если целевая таблица содержит поля, которых нет в исходный файл , вам не нужно удалять их из таблицы, если там допустимы нулевые значения.
  • Первичный ключ: если таблица содержит поле первичного ключа, исходный файл должен иметь столбец с ценности, совместимые с le поле первичного ключа. Кроме того, эти значения должны быть совершенно уникальный . Для импортированных записей, содержащих значение первичного ключа, которое уже существует в целевой таблице, процедура импорта завершится ошибкой.
  • Перечисленные поля: Если индексированная собственность поля в таблице установлено на Да, затем столбец в исходном текстовом файле должны быть уникальные ценности.

Расположение помощника по привязка или импорт текста немного отличается в зависимости от Версия доступа что вы используете.

Здесь вам нужно выбрать шаги, соответствующие используемой вами версии:

  • Для версии ле последний из Access , будь то версия Подписка de Microsoft 365 Access или Access 2019, ты должен перейти на вкладку «Внешние данные» и там переходим в раздел «Импорт и ссылка» затем выберите «Новый источник данных», затем «Из файла» et «Текстовый файл» в последний.
  • Теперь, если вы используете версии Access 2010, Access 2013 или Access 2016, вы также должны перейти на вкладку «Данные внешний « и в разделе «Импорт и ссылка» вы должны выбрать «Текстовый файл».

После всего этого Access откроет диалог «Получить внешние данные — текстовый файл» .

Затем в диалоговом окне «Получить внешние данные — Fichier тексты » , ты должен войти в Поле «Имя файла» и укажите имя исходного файла.

«ОБНОВЛЕНИЕ ✅ Хотите связать данные из текстового файла с базой данных Access? ⭐ ВОЙДИТЕ ЗДЕСЬ ⭐ и узнайте все о SCRATCH! »

Далее вам нужно указать, как вы хотите сохранить импортированные данные:

  • Если вы хотите, чтобы данные сохранялись в новой таблице, вам следует выбрать опцию «Импортировать источник данных в новую таблицу в текущей базе данных».
  • Чтобы сохранить данные в существующая таблица , вы должны затем выбрать «Добавить копию записей в таблицу» , затем выберите таблицу из раскрывающегося списка, который появится на экране.

Следующее, что нужно сделать, это нажать на «OK», О компании начинать автоматически à проверить содержимое файла и посоветуйте, как это можно правильно организовать. Если в файле используется разделитель для отдельные поля, тогда необходимо, чтобы опция с разделителями быть включенным, теперь, если он использует поля фиксированной ширины , то вариант «Фиксированная ширина» должен быть выбран .

После этого нажмите на опцию «Далее», опция, которая появится здесь, будет зависеть от того, какой вариант вы выбрали, будь то «С разделителями» или «Фиксированная ширина»:

  • С разделителями: если была выбрана эта опция, вы должны указать символ, который разделяет значения полей . Если первая строка исходного файла содержит имена полей, вы должны проверить box «Первая строка содержит названия полей» , puis cliquer sur «Следующий».
  • Фиксированная ширина: Если программа обнаружит в данных структуру столбцов, она поместит вертикальные линии в данных, чтобы отделить их от полей. Здесь вы должны увидеть структуру, рекомендованную мастером, и при необходимости вы должны следовать инструкциям на странице мастера, чтобы иметь возможность «Добавлять, удалять или корректировать строки» для этого нажмите на «Следующий».

Если данные необходимо импортировать в новую таблицу, вам нужно нажать «Следующий» и там вы должны просмотреть свойства поля которые отображаются в мастер импорта. Теперь вы должны щелкнуть по одному из

Here is the code I used to extract specific text from word document.

I ended up using regex which is much faster but I don’t have the code anymore. Anyway here is how to extract text from word and put it in csv.

Please not you will need PIA installed on your development PC for Office automation.

To add reference to Microsoft.Office.Interop.Word go to Visual Studio —> Right Click References—>COM—>Micrososft.Word 14.0 (sorry I do not have access to my work PC so cannot attach screenshots)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Excel;
using System.IO;

namespace ConsoleApplication2
{
class Program
{
    static void Main(string[] args)
    {
        string month = "July2014";
        string delimiter = ",";
        string[] files = Directory.GetFiles("C:\temp\"+ month);
        string[][] csvoutput = new string[][] { };
        csvoutput = new string[][] { new string[]{"School Name","Student Name","Id","ReportDate"}};
        StringBuilder sb = new StringBuilder();
        sb.AppendLine(string.Join(delimiter, csvoutput[0]));
        File.AppendAllText("C:\Temp\"+month+".csv", sb.ToString());

        foreach (var file in files)
        {
            var id = string.Empty;
            var studentName = string.Empty;
            var school = string.Empty;
            var reportDate = string.Empty;

            if (file.ToLower().EndsWith(".doc"))
            {
                var word = new Microsoft.Office.Interop.Word.Application();
                var sourceFile = new FileInfo(file);
                var doc = word.Documents.Open(sourceFile.FullName);
                Console.WriteLine("Processing :-{ " + file.ToLower());

                for (int i = 0; i < doc.Paragraphs.Count; i++)
                {

                    try
                    {
                        if (doc.Paragraphs[i + 1].Range.Text.StartsWith("School:"))
                        {
                            school = doc.Paragraphs[i + 1].Range.Text.ToString().Replace("ra","").Replace("School: ","").Trim();

                        }
                        if (doc.Paragraphs[i + 1].Range.Text.StartsWith("Student Names:"))
                        {
                            studentName = doc.Paragraphs[i + 1].Range.Text.ToString().Replace("ra", "").Replace("Student Names:","").Trim();

                        }
                        if (doc.Paragraphs[i + 1].Range.Text.StartsWith("xx Id:"))
                        {
                            id = doc.Paragraphs[i + 1].Range.Text.ToString().Replace("ra", "").Replace("xx Id:", "").Trim();

                        }

                        if (doc.Paragraphs[i + 1].Range.Text.StartsWith("Date of Report:"))
                        {
                            reportDate = doc.Paragraphs[i + 1].Range.Text.ToString().Replace("ra", "").Replace("Date of Report:","").Trim();

                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Error occurred" + file.ToLower());
                    }
                }
                csvoutput = new string[][]
                        {
                            new string[]{school,studentName,id,reportDate} 
                        };

                int csvlength = csvoutput.GetLength(0);
                for (int index = 0; index < csvlength; index++)
                    sb.AppendLine(string.Join(delimiter, csvoutput[index]));
                File.AppendAllText("C:\Temp\" + month + ".csv", sb.ToString());
                word.ActiveDocument.Close();
                word.Quit();
            }
        }
        Console.WriteLine("Finished");
        Console.ReadLine();
    }
}

}

Сейчас мы с Вами рассмотрим пример реализации того, как можно выполнить слияние данных Word с данными Microsoft SQL Server, при этом данный процесс будет автоматизирован средствами VBA Access 2003.

Слияние Word с SQL Server

Многие, наверное, уже умеют осуществлять слияние документов Word, например, с источником данных Excel или с тем же SQL сервером, но не все знают, как можно автоматизировать данный процесс или внедрить его в какую-нибудь программу.

Однажды у меня встала задача автоматизировать слияние некого шаблона Word с данными расположенными на SQL сервере, при этом все это необходимо было внедрить в программу, разработанную в Access 2003 (ADP проект). И сегодня я покажу пример решения данной задачи.

Содержание

  1. Исходные данные
  2. Создаем файл подключения к источнику данных MS SQL Server
  3. Создаем шаблон Word для слияния
  4. Код VBA Access 2003 для слияния документа Word с источником данных MS SQL Server

Исходные данные

И для начала давайте разберем исходные данные, т.е. что мы имеем.

Итак, в качестве клиента, как я уже сказал, у нас будет выступать ADP проект Access 2003. В качестве источника данных для примера будет выступать SQL Server 2012 Express. На компьютере установлен Microsoft Office 2013 (и Access 2003).

Создадим на сервере тестовую таблицу и заполним ее данными (допустим в базе данных Test). Для этого Вы можете запустить следующую SQL инструкцию.

Заметка! Начинающим программистам рекомендую почитать книгу «SQL код», с помощью которой Вы научитесь работать с языком SQL во всех популярных системах управления базами данных.

   
   CREATE TABLE dbo.TestTable(
        ID INT IDENTITY(1,1) NOT NULL,
        ProductName VARCHAR(50) NOT NULL,
        Price MONEY NULL,
   CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED (ID ASC)
   )
   GO
   INSERT INTO dbo.TestTable(ProductName, Price)
     VALUES ('Компьютер', 500)
   GO
   INSERT INTO dbo.TestTable(ProductName, Price)
     VALUES ('Монитор', 400)
   GO
   INSERT INTO dbo.TestTable(ProductName, Price)
     VALUES ('Телефон', 200)
   GO
   INSERT INTO dbo.TestTable(ProductName, Price)
     VALUES ('Планшет', 300)
   GO      
   INSERT INTO dbo.TestTable(ProductName, Price)
     VALUES ('Принтер', 250)
   GO
   SELECT * FROM TestTable

Скриншот 1

Заметка! Если Вы не знаете, что делает вышеуказанная инструкция, рекомендую посмотреть мой видеокурс «T-SQL. Путь программиста от новичка к профессионалу. Уровень 1 – Новичок», который предназначен для начинающих. В нем подробно рассмотрены все базовые конструкции языка SQL, включая все вышеперечисленные.

Теперь давайте создадим файл подключения (ODC) к нашему источнику данных. Данный файл будет выступать своего рода «шаблоном файла подключения», так как впоследствии мы можем, и будем переопределять и базу данных и сам SQL запрос.

Для создания файла подключения к SQL серверу давайте откроем Word и стандартным способом создадим данный файл, т.е. с помощью функционала «Рассылки». (Кстати пример создания подключения к SQL серверу из Excel мы с Вами уже рассматривали в материале – Excel — Подключение и получение данных с SQL сервера).

Переходим на вкладку рассылки и в меню «Выбрать получателей» выбираем «Использовать существующий список».

Скриншот 2

Затем в окне выбора источника данных нажимаем кнопку «Создать».

Скриншот 3

Далее выбираем тип источника данных, т.е. Microsoft SQL Server. Жмем «Далее».

Скриншот 4

Курс по SQL для начинающих

Потом вводим адрес сервера и нажимаем «Далее».

Скриншот 5

Затем выбираем базу данных и таблицу для подключения, еще раз напомню, это всего лишь шаблон, все эти параметры мы будем переопределять, жмем «Далее».

Скриншот 6

И в заключение вводим понятное название файла подключения, а также мы можем сразу его сохранить в нужный нам каталог путем кнопки «Обзор», по умолчанию он сохраняется в «C:UsersИмя_ПользователяDocumentsМои источники данных». Нажимаем «Готово».

Скриншот 7

Все, файл создан, Word можем закрыть без сохранения.

Создаем шаблон Word для слияния

Теперь давайте подготовим шаблон Word, т.е. это тот документ, в который мы будем подставлять данные из базы данных SQL сервера.

Вся подготовка сводится к тому, что нам необходимо вставить поля слияния там, где это нам нужно. Это делается следующим образом. Вкладка «Вставка -> Экспресс-блоки -> Поле».

Скриншот 8

Ищем поле MERGEFIELD и вводим название поля, которое будет соответствовать полю в источнике данных (в моем случае это ProductName и Price). Жмем «ОК».

Скриншот 9

Так как у меня это тестовый шаблон в нем текста практически не будет, и выводить я буду всего два поля, у Вас скорей всего будет много текста и много полей слияния.

Скриншот 10

Код VBA Access 2003 для слияния документа Word с источником данных MS SQL Server

Осталось написать код VBA, который будет осуществлять слияние. Для примера давайте добавим на форму кнопку StartMerge и поле Price для фильтрации данных. Затем в редакторе Visual Basic напишем процедуру для слияния, допустим с названием MergeWord, и в обработчик события кнопки StartMerge (нажатие кнопки) вставляем код вызова этой процедуры. Весь код будет выглядеть следующим образом (я его прокомментировал). Сразу поясню, что шаблон Word и файл ODC у меня лежат в каталоге D:Test.

   
   'Процедура для запуска слияния
   Private Sub MergeWord(TemplateWord As String, QuerySQL As String)
   'Первый параметр - Путь к шаблону Word
   'Второй параметр - Строка запроса к БД
   On Error GoTo Err1
   Dim ConnectString As String, PathOdc As String
   Dim WordApp As Object
   Dim WordDoc As Object
   'Шаблон файла ODC для подключения к данным
   PathOdc = "D:TestTestSourceData.odc"
   If TemplateWord <> "" Then
    'Создаем документ Word
    Set WordDoc = CreateObject("Word.document")
    Set WordDoc = GetObject(TemplateWord)
    Set WordApp = WordDoc.Parent
    'Создаём подключение к источнику данных (MS SQL Server)
    'Некоторые данные берём из текущего подключения ADP проекта
    ConnectString="Provider=SQLOLEDB.1;  " & _
                  "Integrated Security=SSPI;" & _
                  "Persist Security Info=True; " & _
                  "Initial Catalog=" & CurrentProject.Connection.Properties("Initial Catalog") & "; " & _
                  "Data Source=" & CurrentProject.Connection.Properties("Data Source") & "; " & _
                  "Use Procedure for Prepare=1;" & _
                  "Auto Translate=True;" & _
                  "Packet Size=4096;" & _
                  "Use Encryption for Data=False;"
    'Задаем источник данных
    WordDoc.MailMerge.OpenDataSource NAME:=PathOdc, _
                                     Connection:=ConnectString, _
                                     SQLStatement:=QuerySQL
    'Делаем видимым Word
    WordApp.Visible = True
    WordApp.Activate
    'Начинаем слияние
    With WordDoc.MailMerge
                .Destination = wdSendToNewDocument
                .SuppressBlankLines = True
                .Execute Pause:=False
    End With
    'Закрываем шаблон без сохранения
    WordDoc.close (wddonotsavechanges)
    Set WordDoc = Nothing
    Set WordApp = Nothing
   Else
    MsgBox "Не указан шаблон для слияния", vbCritical, "Ошибка"
   End If
   Ex1:
    Exit Sub
   Err1:
    MsgBox Err.Description
    WordDoc.close (wddonotsavechanges)
    WordApp.Quit
    Set WordDoc = Nothing
    Set WordApp = Nothing
    Resume Ex1
   End Sub

   Private Sub StartMerge_Click()
   Dim Filter As String
   Filter = ""
   'Условие
   If Nz(Me.Price, "") <> "" Then
    Filter = "WHERE Price >= " & Me.Price
   End If
   'Вызов процедуры слияния
   Call MergeWord("D:TestШаблон.docx", "SELECT * FROM ""TestTable"" " & Filter & " ")
   End Sub

Сохраняем и проверяем работу.

После нажатия на кнопку (StartMerge) запустится Word, в котором уже все данные заполнены и документов будет столько, сколько строк в источнике.

Скриншот 11

Как видим, все работает. На этом у меня все, надеюсь, материал был полезен. Пока!

wymaxep

5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

1

04.05.2020, 13:29. Показов 5358. Ответов 24

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, не нашел нормальный пример. везде только работа с картинками. с документами по другому надо. вот у меня не получается. выводит ошибку: System.OutOfMemoryException: «Недостаточно памяти.»
я знаю что тут надо что то изменить, но что и как не знаю) помогите пожалуйста.

C#
1
2
3
4
5
6
7
8
9
10
             NpgsqlCommand command = new NpgsqlCommand("update "zayavka" set tz_doc = @doc where id_zayavka = 52", conn);
             NpgsqlParameter ParDoc = new NpgsqlParameter("@doc", NpgsqlDbType.Bytea);
             string fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"1.docx";                  
             Image image = Image.FromFile(fileName);//ЗДЕСЬ ОШИБКА
             MemoryStream memoryStream = new MemoryStream();                                                                       
             image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
             ParDoc.Value = memoryStream.ToArray();
             command.Parameters.Add(ParDoc);
             command.ExecuteNonQuery();
             memoryStream.Dispose();



0



Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

04.05.2020, 13:48

2

Цитата
Сообщение от wymaxep
Посмотреть сообщение

везде только работа с картинками. с документами по другому надо.

Как по другому? Что картинка, что документ — набор байт.



0



carrotik

798 / 581 / 207

Регистрация: 21.02.2019

Сообщений: 2,095

04.05.2020, 13:50

3

Лучший ответ Сообщение было отмечено wymaxep как решение

Решение

SqlClient Streaming Support

.. пример из ссылки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Application transferring a large BLOB to SQL Server in .NET 4.5
      private static async Task StreamBLOBToServer() {
         using (SqlConnection conn = new SqlConnection(connectionString)) {
            await conn.OpenAsync();
            using (SqlCommand cmd = new SqlCommand("INSERT INTO [BinaryStreams] (bindata) VALUES (@bindata)", conn)) {
               using (FileStream file = File.Open("binarydata.bin", FileMode.Open)) {
 
                  // Add a parameter which uses the FileStream we just opened
                  // Size is set to -1 to indicate "MAX"
                  cmd.Parameters.Add("@bindata", SqlDbType.Binary, -1).Value = file;
 
                  // Send the data to the server asynchronously
                  await cmd.ExecuteNonQueryAsync();
               }
            }
         }
      }



1



5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

04.05.2020, 14:53

 [ТС]

4

Usaga,понял, ну а если не по другому, почему такая ошибка?



0



Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

04.05.2020, 14:55

5

wymaxep, вы подсунули загрузчику картинок (Image.LoadFrom) документ DOCX, который вообще ниразу не картинка. Какого корректного поведения вы от него хотели в этом случае?)



0



wymaxep

5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

04.05.2020, 15:25

 [ТС]

6

carrotik, сделал так, и ничего не действует. ошибок нет, но не добавляет в базу.

C#
1
2
3
4
5
6
7
8
using (NpgsqlCommand cmd = new NpgsqlCommand("update "zayavka" set tz_doc = @doc where id_zayavka = 51", conn))
            {
                using (FileStream file = File.Open("1.docx", FileMode.Open))
                {
                    cmd.Parameters.Add("@doc", NpgsqlDbType.Bytea - 1).Value = file;
                    cmd.ExecuteNonQueryAsync();
                }
            }

Добавлено через 1 минуту
Usaga,

Цитата
Сообщение от Usaga
Посмотреть сообщение

вы подсунули загрузчику картинок (Image.LoadFrom) документ DOCX, который вообще ниразу не картинка.

это я понял и я не знаю как изменить. не знаю что написать.



0



Usaga

Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

04.05.2020, 15:41

7

Лучший ответ Сообщение было отмечено wymaxep как решение

Решение

Цитата
Сообщение от wymaxep
Посмотреть сообщение

сделал так, и ничего не действует. ошибок нет, но не добавляет в базу.

Так надо передавать массив байт, а не стрим.

C#
1
2
3
4
5
using (NpgsqlCommand cmd = new NpgsqlCommand("update "zayavka" set tz_doc = @doc where id_zayavka = 51", conn))
            {
                    cmd.Parameters.Add("@doc", NpgsqlDbType.Bytea - 1).Value = File.ReadAllBytes("путь к файлу");
                    cmd.ExecuteNonQueryAsync();
            }



1



wymaxep

5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

04.05.2020, 21:18

 [ТС]

8

так, сделал так.
в базу добавляется. теперь надо извлечь из базы и указывая сохранить. есть примерный код?
carrotik, Usaga, спасибо что помогаете)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.InitialDirectory = "c:\";
                if (openFileDialog.ShowDialog() != DialogResult.OK) { return; }
                string filePath = openFileDialog.FileName;
                //FileStream file = File.Open("1.docx", FileMode.Open);
                using (NpgsqlCommand cmd = new NpgsqlCommand("update "zayavka" set tz_doc = @doc where id_zayavka = 53", conn))
                {
                    cmd.Parameters.Add("@doc", NpgsqlDbType.Bytea).Value = File.ReadAllBytes(filePath);
                    cmd.ExecuteNonQueryAsync();
                }
            }
            catch (Exception en)
            {
                MessageBox.Show(en.ToString());
            }

Добавлено через 4 минуты
нашел примерный код. теперь тут надо изменить вместо картинки, документ

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            NpgsqlCommand sqlCommand = new NpgsqlCommand("SELECT tz_doc FROM "zayavka" WHERE id_zayavka = 53", conn);
            NpgsqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
            if (sqlDataReader.HasRows)
            {
                MemoryStream memoryStream = new MemoryStream();
                foreach (IDataRecord record in sqlDataReader)
                    memoryStream.Write((byte[])record["tz_doc"], 0, ((byte[])record["tz_doc"]).Length);
                Image image = Image.FromStream(memoryStream);
                image.Save(@"C:UsersПользовательPictures1new.docx");
                memoryStream.Dispose();
                image.Dispose();
            }
            else
                MessageBox.Show("Пустая выборка");

с картинками этот код рабочий.

Добавлено через 2 часа 25 минут
Не получается( помогите пожалуйста

Добавлено через 2 часа 40 минут
Ошибка: System.ArgumentNullException: «Путь не может быть неопределенным.
Имя параметра: path»
почему так?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   NpgsqlCommand sqlCommand = new NpgsqlCommand("SELECT tz_doc FROM "zayavka" WHERE id_zayavka = 53", conn);
            NpgsqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
            if (sqlDataReader.HasRows)
            {
                MemoryStream memoryStream = new MemoryStream();
                using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
                {
                    saveFileDialog1.Filter = "docx files (*.docx)|*.docx|All files (*.*)|*.*";
                    saveFileDialog1.FileName = filename;
                    if (DialogResult.OK != saveFileDialog1.ShowDialog())
                        return;
 
                    foreach (IDataRecord record in sqlDataReader)
                    {
                        byte[] array = new byte[memoryStream.Length];
                        memoryStream.Write((byte[])record["tz_doc"], 0, ((byte[])record["tz_doc"]).Length);
                    }
                    File.WriteAllBytes(filename, array);
                }
            }
            else
                MessageBox.Show("Пустая выборка");



0



Usaga

Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

05.05.2020, 06:38

9

Лучший ответ Сообщение было отмечено wymaxep как решение

Решение

wymaxep,

C#
1
File.WriteAllBytes(saveFileDialog1.FileName, (byte[])record["tz_doc"]);



1



5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

05.05.2020, 13:40

 [ТС]

10

Usaga, да, все работает. спасибо большое! а можно ли где нибудь почитать такой темы на русском? я бы хотел изучить.



0



Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

05.05.2020, 13:43

11

wymaxep, какой темы?



0



wymaxep

5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

05.05.2020, 13:50

 [ТС]

12

Usaga,например я вот это не понял, что он делает

C#
1
memoryStream.Write((byte[])record["tz_doc"], 0, ((byte[])record["tz_doc"]).Length);



0



Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

05.05.2020, 14:09

13

wymaxep, это некрасиво оформленная попытка прочитать массив байт из ридера в MemoryStream. Фиг знает зачем.

Вообще, у Microsoft есть очень большая документация на все классы из .NET.. Там можно посмотреть какие есть члены у класса, а так же примеры их использования. Ну и есть машинный перевод на русский язык.

Вы, как разработчик будущий, должны быть там частым гостем.



0



5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

05.05.2020, 16:26

 [ТС]

14

Usaga, понял, спасибо)

Добавлено через 2 часа 6 минут
блин, я о расширениях не подумал, как можно сделать, подскажите плз.
Если сохранил в БД документ с каким то расширением, значит из БД сохраняем документ с таким же расширением.

Добавлено через 2 минуты
я вот подумал можно сделать так, создать новый столбец в таблице, и туда записывать только расширение. и потом с этим расширением можно сохранить новый файл. как думаете?



0



Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

05.05.2020, 16:27

15

Цитата
Сообщение от wymaxep
Посмотреть сообщение

я вот подумал можно сделать так, создать новый столбец в таблице, и туда записывать только расширение. и потом с этим расширением можно сохранить новый файл. как думаете?

Лучше имя файла целиком.



0



wymaxep

5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

05.05.2020, 19:15

 [ТС]

16

Usaga,

Цитата
Сообщение от Usaga
Посмотреть сообщение

Лучше имя файла целиком.

хорошо, попытаюсь.

Добавлено через 26 минут
есть запрос

SQL
1
SELECT tz_doc FROM zayavka

и если нужно добавить куда то, то можно сделать так

C#
1
textbox1.text = sqlCommand.ExecuteScalar().ToString();

но это только с одним. а как сделать с 2 выводами но указать только ту которую надо. напр.

SQL
1
SELECT tz_doc, name_file FROM zayavka
C#
1
textbox1.text = sqlCommand.ExecuteScalar().ToString(); // что здесь исправить чтобы выбрать только "name_file"

Добавлено через 25 минут
Разобрался.

C#
1
2
3
4
5
6
 
while (sqlDataReader.Read())
{
   var myString = sqlDataReader.GetString(1);
   nameFile = myString;
}

Добавлено через 1 час 19 минут
вот полный код кнопки, теперь не сохраняется файл из за того что в запросе вызвал 2 столбца. как исправить? пытался по всякому, не получается.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using (NpgsqlCommand sqlCommand = new NpgsqlCommand("SELECT tz_doc, name_file FROM "zayavka" WHERE id_zayavka = (select id_zayavka from zayavka where id_zakazchik = " +
                                "(select id_zakazchik from zakazchik where naim_organiz = @org) and data = @date and sroki_ot = @srok_ot and sroki_do = @srok_do)", conn))
                {
                    sqlCommand.Parameters.AddWithValue("@org", dataGridView1["Название организации", dataGridView1.CurrentRow.Index].Value.ToString());
                    sqlCommand.Parameters.AddWithValue("@date", Convert.ToDateTime(dataGridView1["Дата приема заявки", dataGridView1.CurrentRow.Index].Value.ToString()));
                    sqlCommand.Parameters.AddWithValue("@srok_ot", Convert.ToDateTime(dataGridView1["Срок от", dataGridView1.CurrentRow.Index].Value.ToString()));
                    sqlCommand.Parameters.AddWithValue("@srok_do", Convert.ToDateTime(dataGridView1["Срок до", dataGridView1.CurrentRow.Index].Value.ToString()));
 
                    using (NpgsqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                    {
                        while (sqlDataReader.Read())
                        {
                            var myString = sqlDataReader.GetString(1);
                            nameFile = myString;
                        }
                        if (sqlDataReader.HasRows)
                        {
                            MemoryStream memoryStream = new MemoryStream();
                            using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())
                            {
                                //saveFileDialog1.Filter = "docx files (*.docx)|*.docx|doc files (*.doc)|*.doc";
                                saveFileDialog1.FileName = nameFile;
                                if (DialogResult.OK != saveFileDialog1.ShowDialog())
                                    return;
 
                                foreach (IDataRecord record in sqlDataReader)
                                {
                                    byte[] array = new byte[memoryStream.Length];
                                    memoryStream.Write((byte[])record["tz_doc"], 0, ((byte[])record["tz_doc"]).Length);
                                    File.WriteAllBytes(saveFileDialog1.FileName, (byte[])record["tz_doc"]);
                                }
                            }
                        }
                        else
                            MessageBox.Show("Пустая выборка");
                    }



0



Usaga

Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

06.05.2020, 08:47

17

wymaxep, NpgsqlDataReader — это forward iterator, который прокручивается в одну сторону. После этой прокрутки данных в нём нет. И это прокрутку вы сделали в самом начале кода:

C#
1
2
3
4
5
                        while (sqlDataReader.Read())
                        {
                            var myString = sqlDataReader.GetString(1);
                            nameFile = myString;
                        }

После этого искать данные в sqlDataReader уже бесполезно.

Добавлено через 10 минут

C#
1
2
using (NpgsqlCommand sqlCommand = new NpgsqlCommand("SELECT tz_doc, name_file FROM "zayavka" WHERE id_zayavka = (select id_zayavka from zayavka where id_zakazchik = " +
                                "(select id_zakazchik from zakazchik where naim_organiz = @org) and data = @date and sroki_ot = @srok_ot and sroki_do = @srok_do)", conn))

Какой-то дико безобразный запрос.



0



5 / 3 / 2

Регистрация: 14.03.2018

Сообщений: 226

06.05.2020, 13:27

 [ТС]

18

Цитата
Сообщение от Usaga
Посмотреть сообщение

Какой-то дико безобразный запрос.

такая уж большая база) подзапросы подзапросами)

Добавлено через 1 минуту

Цитата
Сообщение от Usaga
Посмотреть сообщение

NpgsqlDataReader — это forward iterator, который прокручивается в одну сторону. После этой прокрутки данных в нём нет. И это прокрутку вы сделали в самом начале кода:

Цитата
Сообщение от Usaga
Посмотреть сообщение

После этого искать данные в sqlDataReader уже бесполезно.

понял, буду думать.

Добавлено через 27 минут
Usaga, извините, у меня тут сохранение файла идет, а можно ли сделать так, когда выбираешь заявку и сразу открывается и читаешь? есть ли примерный код? но открывается по расширениям. например docx или doc значит word, если pdf значит скан. pptx значит презентация.



0



783 / 615 / 272

Регистрация: 04.08.2015

Сообщений: 1,707

06.05.2020, 14:09

19

wymaxep, Process.Start



1



Usaga

Эксперт .NET

11443 / 7770 / 1190

Регистрация: 21.01.2016

Сообщений: 29,155

06.05.2020, 14:37

20

Цитата
Сообщение от wymaxep
Посмотреть сообщение

такая уж большая база) подзапросы подзапросами)

Размер базы не причём. Запрос плохой. Ещё и с ошибками. Вот это вообще бессмысленный кусок:

SQL
1
SELECT tz_doc, name_file FROM "zayavka" WHERE id_zayavka = (select id_zayavka from zayavka where id_zakazchik =



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.05.2020, 14:37

20

Понравилась статья? Поделить с друзьями:
  • Использование диспетчера имен в excel
  • Использование диапазонов в функциях excel
  • Использование диапазона в формулах excel
  • Использование диаграмм для анализа данных в excel
  • Использование диаграмм microsoft excel