2008-08-22 3 views
0

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

Есть электронные таблицы. Они загружаются в базу данных. Мне нужно отфильтровывать дубликаты от загрузки. Единственный способ сделать это - убедиться, что для каждой записи две поля не совпадают с записью, уже находящейся в базе данных. Как раз потому, что одно поле - то же самое, не означает его дубликат. Есть два конкретных поля, которые позволяют им вызывать FLDA и FLDB, которые должны совпадать с записью в базе данных уже. Я могу фильтровать по одному полю уже. Я думаю, что это должен быть подзапрос, но я не уверен, как его применять. Это трудно описать. Просто спросите, не уверены ли вы, что я имею в виду.

ответ

1

У меня была аналогичная проблема. Мой раствор был:

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

Это немного BFI, но он просто работает.

0

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

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

1

Был ли запрос подходящим? Например:

INSERT INTO ToUpdate (Field1, Field2) 
SELECT e.H1, e.H2 
FROM (SELECT * FROM [Sheet1$] IN '' [Excel 8.0;HDR=YES;IMEX=1;database=C:\Docs\LTD.xls]) As e 
LEFT JOIN ToUpdate ON (e.H2 = ToUpdate.Field2) AND (e.H1 = ToUpdate.Field1) 
WHERE ToUpdate.Field1 Is Null AND ToUpdate.Field2 Is Null 
0

Есть ли поле FLDC, которое будет отличаться для идентификации дубликатов? Я предполагаю, что должно быть, поскольку в противном случае (FLDA, FLDB) в качестве уникального или первичного ключа немедленно решит вашу проблему.

Предполагая, что есть такое поле, вы могли бы попробовать что-то вроде этого:

SELECT T1.FLDA, T1.FLDB, T1.FLDC 
FROM Table1 T1, Table1 T2 
WHERE T1.FLDA = T2.FLDA 
    AND T1.FLDB = T2.FLDB 
    AND T1.FLDC <> T2.FLDC 

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

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

0

Чтобы избежать дубликатов на импорт:

1 - Если есть уже не первичный ключ на столе, положить один на FLDA и FLDB (вместе). Если уже есть первичный ключ, который не является FLDA и FLDB (вместе), поместите индекс в таблицу по этим двум полям, уникальное значение yes, ignore nulls no.

2 - Вы можете импортировать из таблицы в таблицу с помощью мастера или с помощью запроса. Если вы делаете это с помощью мастера импорта электронной таблицы, вы увидите это сообщение перед началом импорта:

«имя DB не удалось добавить все данные в таблице

.» Содержимое полей в 0 записи были удалены, и (xx) записи были потеряны из-за ключевых нарушений. (Эти потерянные записи были дубликаты, поэтому никакой реальной потери есть.) ... Хотят продолжить так или иначе?»

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

Или , использовать запрос для импорта, вставьте в новый запрос в связи SQL (меню: Вставка> запрос> Design View, кнопку Закрыть, меню:. View> SQL View)

INSERT INTO tblInput 
    SELECT XLS.* 
    FROM tblInput AS T RIGHT JOIN 
    [Excel 8.0;IMEX=1;HDR=Yes;DATABASE=c:\data.xls;].[Sheet1$] AS XLS 
    ON T.FLDA = XLS.FLDA AND T.FLDB = XLS.FLDB 
    WHERE ISNULL(T.FLDA) AND ISNULL(T.FLDB); 

изменить путь, c: \ data.xls, к вашему пути, Sheet1 $ в ваше имя листа, tblВведите имя вашей таблицы и FLDA и FLDB в имена столбцов. Если в таблице нет заголовков (имена столбцов), измените значение HDR = Y es to HDR = No

0

Я сделал это, используя запрос удаления, а затем используя Select from Table 1 Group by X Having Y, Z, A. И затем я поставил кнопку запроса на запуск для конечных пользователей.

Приветствия за вашу помощь.