Помогите с SQL запросом...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Помогите с SQL запросом...

Сообщение Rojohn » 02.11.2005 (Ср) 14:10

Приветы!
Не пойму в чём ошибся... Может в форматах? Пишу:
Код: Выделить всё
"SELECT UPERSON.ID,UPERSON.TITLE, LICENCE.SERIES, LICENCE.NUMB, LICENCE.END_DATE FROM LICENCE INNER JOIN UPERSON ON LICENCE.UPERSON_ID = UPERSON.ID WHERE (Format(CDate(#LICENCE.END_DATE#);'dd/mm/yyyy') BETWEEN Format((# " & tbx1.text & " #);'dd/mm/yyyy') AND Format((# " & tbx2.text & " #);'dd/mm/yyyy')))"


Выдаёт синтаксическую ошибку... Поле LICENCE.END_DATE текстовое.

В чём ошибка? Спасибо за ответы!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:15

Как ты себе представляшь BETWEEN применительно к строкам?

Код: Выделить всё

SELECT
  UPERSON.ID,
  UPERSON.TITLE,
  LICENCE.SERIES,
  LICENCE.NUMB,
  LICENCE.END_DATE
FROM
  LICENCE INNER JOIN UPERSON ON LICENCE.UPERSON_ID = UPERSON.ID
WHERE
  CDate(LICENCE.END_DATE) BETWEEN CDate('" & tbx1.text & "') AND CDate('" & tbx2.text & "')"
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Не...

Сообщение Rojohn » 02.11.2005 (Ср) 14:18

Я там вроде решетки поставил (# " & tbx1.text & " #) может не так? А как иначе сравнить даты из текстовых полей?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:24

Вообще, их надо хранить как даты.

А решётки вокруг имени поля ставить нельзя. Только вокруг констант.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 02.11.2005 (Ср) 14:36

Но в другом запросе это работает! Только Format не работает с CDate. Просто в базе написано в виде текста: '01.01.2001' , а для запроса нужно получить в виде даты 01/01/2001. Как это записать (синтаксис)?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:42

CDate('01.01.2001')
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 02.11.2005 (Ср) 14:50

Да не... это-то понятно. Надо преобразовать в запросе "." на "/". Я так понимаю это только Format-ом можно, но не ищет зараза!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 14:58

Зачем преобразовывать?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 02.11.2005 (Ср) 15:02

А иначе даты сравнить нельзя... надо выдать все записи, значение текстовой даты в которых находится в промежутке от tbx1.text до tbx2.text включительно. Вот я и пытаюсь... А Access точки не признаёт :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:06

Дата - это 8 байт, и слэшей в ней нет вообще.
Строковое представление даты - это совсем не дата.

Может, всё-таки работать с датами, а не со строковыми представлениями дат?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 02.11.2005 (Ср) 15:11

Нельзя... у меня во всём проекте уже даты записываются текстом. Это сделано для того, чтобы не зависеть от региональных настроек винды. А слэши есть в Access - уже проверено.... Например если в конструкторе написать это условие с точковой датой, то он сам преобразовывает точки в слэши.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:16

Чтобы не зависеть от национальных настроек винды, используются не слеши, а http://bbs.vbstreets.ru/viewtopic.php?p=112547#112547.

Но если охота строкой (что приводит только к пожиранию места в базе и увеличению времени работы), то пожалуйста, http://bbs.vbstreets.ru/viewtopic.php?p=149179#149179.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 02.11.2005 (Ср) 15:42

Да... написано конечно дофига, но моего случая там нет увы :( Мне надо текстовое поле в базе переводить В ЗАПРОСЕ (а не отдельно) в формат даты и, одновременно, менять точки на слэши. Я наверное опечатался - не региональные настройки, а настройки длинного формата даты, он может быть dd/mm/yy и dd/mm/yyyy. Так что нужно просто правильный синтаксис этого:
Код: Выделить всё
Format(CDate(LICENCE.END_DATE);'dd/MM/yyyy')


чтобы результатом была дата и это работало бы в Where...
Как?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 15:47

Ещё раз.

Дата и строковое представление даты - разные вещи.
Если у тебя в столбце LICENCE.END_DATE уже записано что-то, то функция CDate это переведёт в дату, после чего передаст в format, а формат переведёт снова в строку. А тебе не нужна строка, тебе нужна дата.
Тебе надо не LICENCE.END_DATE переводить из текста в текст, а содержимое своих текстбоксов из текста в дату.

И обрати внимание на http://bbs.vbstreets.ru/viewtopic.php?p=112547#112547 всё-таки.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

:))

Сообщение Rojohn » 02.11.2005 (Ср) 15:56

Спасибо Шаман! Навёл на правильную мысль:) Но дело не в текстовых полях, а в том, что я действительно зачем-то перевожу текст в текст:)) хотя для сравнения дат неважно в каком формате они будут записаны... Спасибо - всё работает!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 120

    TopList