Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2013, 12:17   #1
erika13
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 44
Радость sql запрос!)

Доброго времени суток))))))

Мой запрос:
SELECT Email.Код, Email.Текст, Email.Тема
FROM Email
WHERE (((Form1!Текст!Условие_выборки_от_т екст=Тема)));


Есть 1 таблица. Меня интересуют поля Email.Код, Email.Текст, Email.Тема. При нажатии на кнопку на форме присходит выполнение запроса 1

Private Sub Кнопка4_Click()
DoCmd.OpenQuery ("Запрос1")
End Sub

Вопрос в следующем) как написать правильно запрос чтобы происходила выборка по параметру, который содержится в поле Тема. Но поле содержит название и дату. Мне нужно, чтобы выборка происходила только по дате поля Тема, т.е. условие поиска содержится в строке, но не соответствует полностью строке.
erika13 вне форума Ответить с цитированием
Старый 20.03.2013, 13:13   #2
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Добрый день.
Можно попробовать примерно так:
Код:
SELECT Email.Код, Email.Текст, Email.Тема
FROM Email
WHERE (((mid([forms]![имя формыъ![имя поля],1,10)=Тема)));
Если не совсем поняли посмотрите описание функции MID, НО возможно если у Вас формат поля ещё и дата, то необходимо ещё это значение преобразовать в дату.
Удачи
gluk_fm вне форума Ответить с цитированием
Старый 20.03.2013, 23:44   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте erika13.
Изменить SQL конструкцию запроса (или создать новый запрос) можно
обращаясь к QueryDef (объекту DAO) например так:
Код:
Private Sub Кнопка4_Click()
Const sQ = "SELECT Код, Текст, Тема FROM Email WHERE Тема = '"
Dim s$, qDef As QueryDef
s = Form1!Текст!Условие_выборки_от_текст & "'"
Set qDef = CurrentDb.QueryDefs("Запрос1")
qDef.SQL = sQ + s
Set qDef = Nothing
DoCmd.OpenQuery ("Запрос1")
End Sub
to gluk_fm: применение в предложенной Вами конструкции функции MID
может объясняться только преобразованием NULL в строку нулевой длины,
но конкатенация с помощью амперсанда делает то-же самое и без неё:
Код:
[forms]![имя формыъ![имя поля] & ""
тогда зачем она в конструкции?

Евгений.

P.S. erika13 для удобочитаемости выкладываемый код заключайте в тэги [соde] ... [/соde]
для этого на панели инструментов расположена кнопка #.
Teslenko_EA вне форума Ответить с цитированием
Старый 21.03.2013, 02:41   #4
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
конструкции функции MID
может объясняться только преобразованием NULL в строку нулевой длины, но конкатенация с помощью амперсанда делает то-же самое и без неё:
Код:
[forms]![имя формыъ![имя поля] & ""
Я - понял всё. Поддерживаю
Андрэич вне форума Ответить с цитированием
Старый 26.03.2013, 11:31   #5
erika13
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Teslenko_EA Посмотреть сообщение
Здравствуйте erika13.
Изменить SQL конструкцию запроса (или создать новый запрос) можно
обращаясь к QueryDef (объекту DAO) например так:
Код:
Private Sub Кнопка4_Click()
Const sQ = "SELECT Код, Текст, Тема FROM Email WHERE Тема = '"
Dim s$, qDef As QueryDef
s = Form1!Текст!Условие_выборки_от_текст & "'"
Set qDef = CurrentDb.QueryDefs("Запрос1")
qDef.SQL = sQ + s
Set qDef = Nothing
DoCmd.OpenQuery ("Запрос1")
End Sub
to gluk_fm: применение в предложенной Вами конструкции функции MID
может объясняться только преобразованием NULL в строку нулевой длины,
но конкатенация с помощью амперсанда делает то-же самое и без неё:
Код:
[forms]![имя формыъ![имя поля] & ""
тогда зачем она в конструкции?

Евгений.

P.S. erika13 для удобочитаемости выкладываемый код заключайте в тэги [соde] ... [/соde]
для этого на панели инструментов расположена кнопка #.
Добрый день)
Спасибо большое все получилось, в результате происходит выборка, по параметру, который вводит пользователь.
Как я понимаю, в результате процедуры
Код:
Private Sub Кнопка4_Click()
переменной qDef передаются данные, которые вводит пользователь в качестве условия выборки.

Также существует запрос 1
Код:
SELECT Email.Код, Email.Тема, Email.Текст
FROM Email
WHERE Email.Тема Like "*" & [Поле_0] & "*";
который ищет в поле тема значение, которое введет пользователь.
Вопрос: получается, что запрос и процедура делает одно и тоже?
Но без процедуры не работает запрос. Я сейчас не понимаю что от чего зависит. И почему когда я весь кода VBA убираю в комментарии, все равно работает кнопка? И еще есть один косяк. При нажатии на кнопку появляется окно "Введите параметр Поле_0" иногда 2 иногда 3 раза. Получается, что программа не знает где взять это поле. Как быть? Подскажите пожалуйста!!!!!!
erika13 вне форума Ответить с цитированием
Старый 27.03.2013, 04:34   #6
alvk
Форумчанин
 
Регистрация: 22.05.2012
Сообщений: 136
По умолчанию

Цитата:
Сообщение от erika13 Посмотреть сообщение
При нажатии на кнопку появляется окно "Введите параметр Поле_0" иногда 2 иногда 3 раза. Получается, что программа не знает где взять это поле. Как быть? Подскажите пожалуйста!!!!!!
Вы же сами написали это поле в запросе, а у нас спрашиваете где его взять?
alvk вне форума Ответить с цитированием
Старый 29.03.2013, 09:15   #7
erika13
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 44
Радость

Все получилось, всем спасибо)
Следующий вопрос))
В результате запроса SELECT, происходит обновление подчиненной формы, а также вывод в новом окне результата запроса. Необходимо сделать так, что бы результат выводился только в подчиненную форму, а в новом окне не открывался! HELP ME, PLEASE )))
erika13 вне форума Ответить с цитированием
Старый 29.03.2013, 09:59   #8
erika13
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 44
По умолчанию

Также существует задача, которую не знаю как решить. В результате запроса выводятся строки, в которых встречается значение, которое ввел пользователь. Таблица представляет собой информацию, о статусах отправленных писем, а именно: прочтено, не прочтено, доставлено, не доставлено, доставка отложена, ретранслирована, уведомление о прочтении письма. Необходимо реализовать анализ данной таблицы. То есть посчитать количество прочтеных, не прочтеных, доставленых ит.д. писем. Подскажите пожалуйста, как можно реализовать такой анализ.
erika13 вне форума Ответить с цитированием
Старый 29.03.2013, 11:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, если Вы позволяете вводить текст статуса ручками - то вы однозначно прокололись как разработчик БД (по хорошему, в поле статуса должен быть внешний ключ - ID, ссылка на таблицу справочник с различными статусами, или, хотя бы, числовое поле-код (1- не отправлено, 2-отправлено, но не доставлено, 3-отправлено, доставлено, но не прочтено, 4-прочтено и т.д. )

во-вторых, ответ на конкретно ваш вопрос (если я его правильно понял) такой:
Код:
select Статус, count(*) as CountStatus 
  from Вашатаблица
  where <тут, если надо, можете прописать условия отбора данных, период, например>
  group by Статус
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.03.2013, 11:16   #10
erika13
Пользователь
 
Регистрация: 15.03.2013
Сообщений: 44
Хорошо

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, если Вы позволяете вводить текст статуса ручками - то вы однозначно прокололись как разработчик БД (по хорошему, в поле статуса должен быть внешний ключ - ID, ссылка на таблицу справочник с различными статусами, или, хотя бы, числовое поле-код (1- не отправлено, 2-отправлено, но не доставлено, 3-отправлено, доставлено, но не прочтено, 4-прочтено и т.д. )

[/CODE]
Благодарю за комментарии. Но не совсем согласна с определением моего прокола. Задумка базы данных: Есть таблица, которая каждый день обновляется на количество записей порядка 600 +-. Это импортированная таблица из outlook, содержащая информацию о входящих письмах. Пользователю нужно увидеть, что конкретно было доставлено, не доставлено и.т.д. по каждому отдельно взятому письму.
Идея с 1,2,3,4 - 5 БАЛЛОВ)

"Во-вторых,......" попробую)
erika13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос SQL stas45rus БД в Delphi 3 29.11.2012 18:04
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
SQL-запрос Elena БД в Delphi 3 21.05.2007 11:34
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15