2013-07-03 3 views
-1

У меня есть таблица date_days, которые содержат от 1 поля attdate как датаЗаполните таблицу со всеми месяц дней

Я хочу, чтобы создать запрос, принимать 1 или 2 параметра. то есть:

QueryGetDays(#01/06/2013#,#30/06/2013#) 
QueryGetDays(#01/06/2013#) and the query can tell the end of month by itself. 

Этот запрос удалит все существующие записи в date_days и вставьте даты от 01/06/2013 до 30/06/2013 в таблице date_days

ofcource я могу генерировать даты и сделать Вставка из vb.net

Но мне интересно, можно ли это сделать с помощью запроса в ACCESS?

ответ

0

Ну, гораздо более эффективный способ сделать это, чтобы создать таблицу с именем tblNos с одного поля с именем Nos, содержащие только цифры от 0 до 30. Затем запустить этот запрос:

PARAMETERS [Enter date] DateTime; 
INSERT INTO date_days (attdate) 
SELECT [Enter date]+Nos FROM tblNos 
WHERE Month([Enter date]+Nos) = Month([Enter date]); 
+0

Благодарим вас за отзыв. –

+0

@SamirIbrahim Добро пожаловать. Я был бы счастлив использовать любой метод. Я бы не потерял сон по запросу UNION, который создает 31 строку-макс. –

1

Мне нравится вызов. Если мы создадим фиктивную таблицу (с именем dummytable) с одним полем (dummydate) и добавим одну запись из 0 (или любого другого номера), мы можем запустить следующий запрос. Введите первую дату месяца (1/6/2012) в появившемся окне параметров и заполните все даты между 1/6/2012 и 30/6/2012. Ввод 1/2/2012 войдет в даты до 29/2/2012.

PARAMETERS [Enter date] DateTime; 
INSERT INTO date_days (attdate) 
SELECT [Enter date]+dummydate 
FROM (
     SELECT 0 AS dummydate FROM dummytable 
     UNION SELECT 1 FROM dummytable 
     UNION SELECT 2 FROM dummytable 
     UNION SELECT 3 FROM dummytable 
     UNION SELECT 4 FROM dummytable 
     UNION SELECT 5 FROM dummytable 
     UNION SELECT 6 FROM dummytable 
     UNION SELECT 7 FROM dummytable 
     UNION SELECT 8 FROM dummytable 
     UNION SELECT 9 FROM dummytable 
     -- fill in the rest here.. 
     UNION SELECT 24 FROM dummytable 
     UNION SELECT 25 FROM dummytable 
     UNION SELECT 26 FROM dummytable 
     UNION SELECT 27 FROM dummytable 
     UNION SELECT 28 FROM dummytable 
     UNION SELECT 29 FROM dummytable 
     UNION SELECT 30 FROM dummytable 
) WHERE Month([Enter date]+dummydate) = Month([Enter date]); 

Запрос DELETE должен запускаться отдельно.

+0

Это было потрясающе и превосходно. Я не знаю, как вы это делаете, но это cooool !!! –

+0

@SamirIbrahim Спасибо за хороший комментарий;). Это потребовало немного усилий, но теперь, когда это работает, оно может быть расширено, чтобы делать другие подобные вещи. –

+0

@JohnnyBones. Да, это неэффективно;). Вместо этого я мог бы создать таблицу, содержащую числа 1-31. Мне просто понравился вызов. Тем не менее, только когда-либо создадим максимум 31 новую строку, поэтому я бы не стал лично беспокоиться о ее эффективности, если бы я не использовал ее повторно. –

Смежные вопросы