Topic: SQL запросы

DriveSoft помоги пожалуйста! Как сформировать SQL запрос следующего вида:

есть список дат, нужно вывести только те даты, до которых осталось 2 дня от текущей даты.

Re: SQL запросы

Пожалуйста )

SELECT * FROM tablename WHERE date(datefield) = date('now', '-2 day');

Dmitry.

Re: SQL запросы

DriveSoft, а можно как то посмотреть мой проект? в чем моя ошибка я одно не пойму.

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

Хотелось более подробно рассмотреть. Но как? Можно загрузить скрины проекта? Или все как то проект глянуть?

Заранее спасибо!

Re: SQL запросы

скиньте мне проект на support@drive-software.com
посмотрю )

Dmitry.

Re: SQL запросы

Скинул

Re: SQL запросы

Поправил, отправил на мыло.

Dmitry.

7 (edited by pilot91269 2014-04-05 12:21:51)

Re: SQL запросы

Добрый день!

Благодарю Вас за очень полезный и нужный проект!

пытаюсь выбрать записи  с ограничением типа LIKE в SQL запросе и натолкнулся на следующее:

select object.name from object where object.name like '%а%' - это выражение выбирает все строки как положено, где в поле name  входит буква "а"

select object.name from object where object.name like '%{Edit1}%' - а это выражение выбирает только те строки, поле name НАЧИНАЕТСЯ с буквы "а", если ввести в Edit1 "а"

select object.name from object where object.name like "{Edit1}" - а так вообще не работает smile

В чем моя ошибка?

Re: SQL запросы

pilot91269
только что протестировал, все работает, скиньте пожалуйста свой проект на support@drive-software.com
посмотрю в чем делом.

Спасибо.

Dmitry.

Re: SQL запросы

Такой вопрос - есть на форме поле текстовое поле ввода, куда на само деле вводятся числа. В sql запросе  пишу
where table.count={edCount} Если в поле есть число, то все работает, если поле пустое - ошибка. Пытался сделать так;
where {edCount} is null OR table.count={edCount} но тоже приводит к ошибке. Как в этом случае нужно написать условие в where?

Re: SQL запросы

atempbox
можно задать значение по умолчанию, если в текстовом поле не будет данных, в данном примере значение по умолчанию 0.


WHERE case when '{edCount}'='' then 0 else 0{edCount} end = table.count

Dmitry.

Re: SQL запросы

Спасибо -это работает, у Вас небольшая помарка, нужно очевидно так:
WHERE case when '{edCount}'='' then 0 else '{edCount}' end = table.count
но мне нужно немного другая логика - если поле не заполнено, то должны показываться все записи, то есть условие должно вернуть true Как быть в этом случае?

Re: SQL запросы

Наверное так:
WHERE case when '{edCount}'='' then 1=1 else '{edCount}'=table.count end

Re: SQL запросы

atempbox
Помарки в этом нет: 0{edCount} так и задумано,
но ваш способ лучше, как то я сам не догадался просто поставить 1=1 smile

Dmitry.

Re: SQL запросы

А как проверить comboBox таким способом на пустое значение? Что там должно быть - 0 или ''? Что-то ни то ни то не работает.

Re: SQL запросы

То есть как быть в случае:
1 ComboBox
case when '{cbStatus}'='' then 1=1 else table.status= '{cbStatus}' end - не работает

2.Строка
case when '{edClientName}'='' then 1=1 else table.clientname LIKE "%{edClientName}%" end - не работает

Re: SQL запросы

atempbox
ComboBox возвращает не текст, а идентификатор выбранной записи, и возвращает -1 если ничего не выбрано, т.е.:

WHERE case when {cbGroup}=-1 then 1=1 else {cbGroup}=id_group end

Dmitry.

Re: SQL запросы

Спасибо! Я так и понял, что возвращается Id - пытался на 0 проверить, было смутное подозрение про -1 , но не попробовал. А как по поводу проверки строки?

Re: SQL запросы

atempbox
вроде все правильно, я у себя проверил такой вариант:
WHERE case when '{edFirstName}'='' then 1=1 else person.firstname LIKE "%{edFirstName}%" end;

Dmitry.

Re: SQL запросы

А зависит результат этой проверки для строки от значения в свойстве Filter строки-параметра?

Re: SQL запросы

atempbox
нет, скиньте проект на support@drive-software.com
посмотрю в чем дело, наверно как то связано с регистром букв.

Dmitry.

Re: SQL запросы

Собственно я задавал вопросы по условиям sql запроса в связи с тем, что у меня такая задача:
Есть грид на форме, который заполняется из таблицы базы данных при показе формы. Есть кнопка Поиск, которая выполняет акшин Поиск с использованием нескольких полей для поиска и результаты помещает в этот грид. Все работает нормально. Но мне понадобилось в гриде добавить условие в поле Фильтр - (table.id_register=1) После этого при нажатии на кнопку Поиск происходит ошибка near "WHERE": syntax error. если в каком-либо из полей которые участвуют в условиях поиска есть данные (очевидно формируются условия поиска и они как-то соединяются с условием в поле Фильтр грида) Можно как-то решить эту проблему? Я решил по кнопке Поиск делать не экшин Поиск а sql запрос с условиями, про которые я тут задавал вопросы. В принципе это решает проблему выбора и показа нужных записей, но в этом случае я не могу открыть запись на редактирование, так как нет в запросе id записи. Если id добавить, то открыть на редактирование можно, но поле id показывается в гриде, что не очень хорошо.

Re: SQL запросы

atempbox
При добавлении условия в фильтр, ошибки не должно быть, проверил у себя, пришлите проект пожалуйста на support@drive-software.com
проверю в чем дело.


Если вы не хотите видеть значение id в компоненте таблицы, введите название для этой колонки delete_col
http://myvisualdatabase.com/help_ru/com … n_sql.html

Dmitry.

Re: SQL запросы

Про скрытое id понял, спасибо! Кусок проекта отправил на support.

Re: SQL запросы

atempbox
Нашел у себя ошибку, исправил.
Скачайте файл builder.dll и скопируйте в папку с программой My Visual Database с заменой, затем запустите проект, ошибка должна исчезнуть.

https://www.dropbox.com/s/prhcfpwagmjgu9m/builder.zip

Dmitry.

Re: SQL запросы

Спасибо, заработало! НО - если теперь убрать из Settings грида фильтр, то возникает ошибка! :-(