обновление нескольких таблиц MS ACCESS с помощью одной электронной таблицы - PullRequest
0 голосов
/ 27 июня 2018

У меня есть база данных MS Access с около 1000 таблиц. Таблицы не зависят друг от друга, то есть они не связаны друг с другом. В основном каждая таблица содержит записи о запасах конкретного товара. Название каждой таблицы является названием предмета, например, 125 г мыла, 200 мл масла и т. Д., И содержит следующие столбцы: -

  1. Дата
  2. Ежедневные начальные акции
  3. Ежедневные продажи
  4. Ежедневные покупки
  5. Ежедневная цена закрытия

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

  1. Дата
  2. Наименование товара
  3. Ежедневные начальные акции
  4. Ежедневные продажи
  5. Ежедневные покупки
  6. Ежедневная цена закрытия

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

Итак, я хочу обновить несколько таблиц в файле базы данных Ms Access, исходя из данных, содержащихся в 1 электронной таблице Excel.

Это возможно? Ваша помощь будет высоко ценится.

Спасибо, Тиру В. Клак

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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

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

Это значительно замедлит процесс автоматической передачи - этот длинный цикл, который перезаписывает и обрабатывает SQL снова и снова. Вы можете смотреть на данные таким образом без этой настройки. Давайте назовем это tblProductDetails

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

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

Я смоделировал 4 образца схемы продукта для вас с запросом, чтобы показать все данные, и другим, чтобы показать только историю одного продукта. Вы можете использовать второй запрос точно так же, как в Access 'построитель запросов (представление SQL), где '125g Soap' (во второй последней строке) упоминается в имени запроса, чтобы вы знали, какой запрос какой.

Если вы хотите использовать только один запрос, сделайте то же самое с одним исключением: во второй последней строке, где написано '125g Soap', замените все это на Product_Name (без кавычек) и при открытии В ответ на запрос Access появится окно с просьбой ввести название продукта.

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

0 голосов
/ 28 июня 2018

Мой первый вопрос к вам: почему база данных Access не может соответствовать структуре данных электронной таблицы Excel? Обновление 1 таблицы доступа из 1 электронной таблицы намного проще, чем то, что вы пытаетесь сделать. Мне кажется, что наличие 1000 таблиц с одинаковой структурой данных, в которой каждая таблица названа в честь какого-либо продукта, выглядит довольно подозрительно.

При этом, если вам нужно сохранить свои 1000 таблиц (я искренне удивлен, что вы не достигли максимального порога БД для Access), есть способы, как вы можете заставить его работать. Я бы предложил создать таблицу соответствия, которая соответствует продукту (как он отображается в электронной таблице) и таблице в Access, к которой он относится. Затем вы импортируете данные Excel в промежуточную таблицу и запускаете некоторый код VBA для циклического просмотра таблицы поиска, выполняя запрос для добавления всех данных из Excel в соответствующую таблицу Access. Примерно так:

private const STAGING_TABLE_NAME as string = "tDataFromExcel"
private Const LOOKUP_TABLE_NAME as String = "tGoodsToTableNames"

public sub AddData()

    Dim db as DAO.Database
    Dim rsItemLookup as DAO.Database
    Dim strSQL as string
    Dim GoodName as string, TableName as string

    set db = CurrentDB
    set rsItemLookup = db.OpenRecordset("select good_name, table_name from " & LOOKUP_TABLE_NAME)

    do while not rsItemLookup.EOF
        GoodName = rsItemLookup.fields("good_name").Value
        TableName = rsItemLookup.fields("table_name").value

        strSQL = _
            "insert into " & TableName & " (" & _
                "[date], " & _
                "[Daily Opening Stock], " & _
                "[Daily Sales], " & _
                "[Daily Purchases], " & _
                "[Daily Closing Stock]) "
            "select " & _
                "[date], " & _
                "[Daily Opening Stock], " & _
                "[Daily Sales], " & _
                "[Daily Purchases], " & _
                "[Daily Closing Stock]) " & _
            "from " & STAGING_TABLE_NAME & " " & _
            "where [Item Name] = """ & GoodName & """"

        db.Execute strSQL

        rsItemLookup.MoveNext
    loop

end sub

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

...