Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать запрос даты без года, Access, ADO 
V
    Опции темы
Данкинг
Дата 21.12.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Kbl4AH @  21.12.2008,  14:42 Найти цитируемый пост)
Можно пример в таком случае? 

Я теперь и сам уже сомневаюсь.  smile Вероятно, всё же, ты прав. Был случай у меня: в таблице поле с датой - текстовое. На одних компах, с которых программа (подсчёт рабочего времени сотрудников) вносила инфу, год был указан двухзначный, а на других - четырёхзначный. Вот и получилось, что поскольку один человек мог отмечаться с разных компов, то с подсчётом времени получался какой-то там косяк (не помню точно, какой). smile 

Цитата(kovalenko123 @  21.12.2008,  16:26 Найти цитируемый пост)
Ну это же глупость

Почему это глупость?! А хранить ФИО разбитым по полям - тоже глупость?!

В общем, на Access (проверял именно в самом .MDB) вот такой запрос у меня работает:
Код

select * from table where left(cstr(data),5)="18.01"


Это сообщение отредактировал(а) Данкинг - 21.12.2008, 18:13


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Kbl4AH
Дата 21.12.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(kovalenko123 @  21.12.2008,  16:26 Найти цитируемый пост)
SQL.Text := 'select * from [Table]  WHERE Дата Like left(''01.12.2008'', 6)';
а вот этот код ничего не вернул

может ничего и не должен вернуть? может нет записей удовлетворяющих условию?
функция верная, я проверял пробными запросами...
Для MS SQL
Код

select left('01.12.2008', 6) from table;

вернет 01.12.
че за SQL у тебя используется? Может там другая функция? Хотя, если бы функция LEFT не работала, то ошибка бы выдавалась...
Проверь, точно у тебя есть запись с такой датой 01.12.хххх?

А, погодь... косяк... надо так...
Код

select * from [Table]  WHERE Дата Like left('01.12.2008', 6) || '%';


P.S. kovalenko123, проверь в самом SQL Builder, что запрос возвращает...

Это сообщение отредактировал(а) Kbl4AH - 21.12.2008, 19:45
PM MAIL ICQ   Вверх
Akella
Дата 22.12.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Данкинг, думаю, что ты неправильно делаешь, не зря ведь придумали специальный тип Дата в базах данных. Можно ж было как boolean хранить 0 или 1.
PM MAIL   Вверх
Данкинг
Дата 22.12.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Akella @  22.12.2008,  10:35 Найти цитируемый пост)
думаю, что ты неправильно делаешь

Что делаю - храню дату как строку? Да я и не спорю, что неправильно. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
kovalenko123
Дата 22.12.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Данкинг, 

Код

select * from table where left(cstr(data),5)="18.01"

Код сработал  smile 
а как теперь его с datetimepickerom связать ?? 
я попробовал
Код

 with adoquery1 do
    begin
      Active := False;
      SQL.Text := 'select * from [Table] where left(cstr(Дата),6)="DateTimePicker1.date"';
      Open;
    end;


но ничего не выходит.... что можно сделать ? 
Kbl4AH, 
не там точно есть запись на 01.12.2008 
PM MAIL ICQ   Вверх
Kbl4AH
Дата 22.12.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Код

ShortDateFormat := 'dd.mm';
with adoquery1 do
    begin
      Active := False;
      SQL.Text := 'select * from [Table] where left(cstr(Дата), 5) = ''' + DateToStr(DateTimePicker1.Date) + '''';
      Open;
    end;

или
Код

var
  Data: string;
......................
with adoquery1 do
    begin
      Active := False;
      DateTimeToString(Data, 'dd.mm', DateTimePicker1.Date);  
      SQL.Text := 'select * from [Table] where left(cstr(Дата), 5) = ''' + Data + '''';
      Open;
    end;


Это сообщение отредактировал(а) Kbl4AH - 22.12.2008, 19:53
PM MAIL ICQ   Вверх
Данкинг
Дата 22.12.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Kbl4AH, а значение datepicker'а почему не обрезал? smile 

Код

ShortDateFormat := 'dd.mm';
with adoquery1 do
    begin
      Active := False;
      SQL.Text := 'select * from [Table] where left(cstr(Дата), 5) = ''' +copy(DateToStr(DateTimePicker1.Date),1,5) + '''';
      Open;
    end;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Kbl4AH
Дата 22.12.2008, 19:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Данкинг @  22.12.2008,  19:50 Найти цитируемый пост)
Kbl4AH, а значение datepicker'а почему не обрезал?

А оно уже обрезанное в следствие использования ShortDateFormat := 'dd.mm';  smile 
P.S. Хотя лучше без формата даты... мне твоя обрезка строки больше понравилась... просто мне это в голову не пришло smile 

Это сообщение отредактировал(а) Kbl4AH - 22.12.2008, 19:56
PM MAIL ICQ   Вверх
Akella
Дата 22.12.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



товарищи  smile , а если на компьютере будет формат даты немного не "28.12.2008"
PM MAIL   Вверх
Kbl4AH
Дата 22.12.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Akella @  22.12.2008,  20:24 Найти цитируемый пост)
товарищи   , а если на компьютере будет формат даты немного не "28.12.2008"

И что?
Я для этого ShortDateFormat := 'dd.mm'; и использовал...
Проверил, поставил американский формат... примеры работают...
А с обрезкой строки, и правда, косяк будет...

Это сообщение отредактировал(а) Kbl4AH - 22.12.2008, 20:38
PM MAIL ICQ   Вверх
Akella
Дата 22.12.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Kbl4AH,  smile я не тебе

Добавлено через 2 минуты и 8 секунд
Цитата(kovalenko123 @  22.12.2008,  18:47 Найти цитируемый пост)
 with adoquery1 do
    begin
      Active := False;
      SQL.Text := 'select * from [Table] where left(cstr(Дата),6)="DateTimePicker1.date"';
      Open;
    end;


переделай на
Код

    begin
      Active := False;
      SQL.Text := 'select * from [Table] where left(cstr(Дата),6)="DateTimePicker1.date"';
ShowMessage(SQL.Text);
      Open;
    end;

И ты увидишь то, что получит SQL сервер. А когда увидишь, то подумай, знает ли SQL сервер про твой DateTimePicker1? smile 
PM MAIL   Вверх
Kbl4AH
Дата 22.12.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(Akella @  22.12.2008,  20:29 Найти цитируемый пост)
И ты увидишь то, что получит SQL сервер. А когда увидишь, то подумай, знает ли SQL сервер про твой DateTimePicker1?

 smile 
PM MAIL ICQ   Вверх
kovalenko123
Дата 23.12.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Kbl4AH, 
А с обрезкой строки, и правда, косяк будет...
а какой косяк?? 

твой пример 
Код

procedure TForm1.DateTimePicker1Change(Sender: TObject);
var
  Data: string;
begin
 with adoquery1 do
    begin
      Active := False;
      DateTimeToString(Data, 'dd.mm', DateTimePicker1.Date);
      SQL.Text := 'select * from [Table] where left(cstr(Дата), 5) = ''' + Data + '''';
      Open;
    end;
end;

Работает ! огромное спасибо !!!
а так же спасибо  всем кто принимал участие в обсуждении!!!
PM MAIL ICQ   Вверх
Kbl4AH
Дата 23.12.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 6
Всего: 15



Цитата(kovalenko123 @  23.12.2008,  13:57 Найти цитируемый пост)
А с обрезкой строки, и правда, косяк будет...а какой косяк??

Допустим дата 10 декабря 2008 года...
русский формат             10.12.2008       после вырезки первых 5ти символов будет           '10.12'
американский формат   12/10/2008      после вырезки первых 5ти символов будет           '12/10'
а при конвертации DateTimeToString(результат: string, 'dd.mm', дата: TDateTime)    всегда получится строка того формата, который указан в процедуре, в данном случае '10.12'.... и без разницы стандарт даты какой страны будет на компьютере...       
PM MAIL ICQ   Вверх
kovalenko123
Дата 23.12.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 12.5.2008

Репутация: нет
Всего: 1



Так я дату та в базе хроню, мне разве не пофиг какой стандарт на компе стоит? и потом у меня на заполнение используеться "русский формат" и  запрос я делаю "русским" поэтому косяков быть не должно   smile  

PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.