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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 05:42   #11
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Время у вас не сравнивается, потому что формат времени скорей всего у вашего поля включает еще и миллисекунды

Кстати, еще в код
Цитата:
Сообщение от Lokos Посмотреть сообщение
Здравствуйте.
Пытаюсь сделать так

Код:
procedure TVahtaMainForm.poiskClick(Sender: TObject);
var
   zapr:string;
begin
    zapr:='SELECT * FROM NEW_TABLE WHERE';
   if (radiobutton2.Checked=true) and(checkbox1.Checked=false)  then
      zapr:=zapr+' "ВРЕМЯ ПРИБЫТИЯ"='+
      QuotedStr(TimeToStr(datetimepicker2.Time))+' and "ВРЕМЯ УБЫТИЯ" is not null'; 
   DM.FIBDS.Close;
   DM.FIBDS.SQLs.SelectSQL.Text:=zapr;
   DM.FIBDS.Open;
end;
Запрос выполняется без ошибок но вот записи не выводятся как будто их нет в таблице.
внесите такие изменения

Код:
procedure TVahtaMainForm.poiskClick(Sender: TObject);
var
   zapr:string;
begin
    zapr:='SELECT * FROM NEW_TABLE ';
   if (radiobutton2.Checked=true) and(checkbox1.Checked=false)  then
      zapr:=zapr+'WHERE "ВРЕМЯ ПРИБЫТИЯ"='+
      QuotedStr(TimeToStr(datetimepicker2.Time))+' and "ВРЕМЯ УБЫТИЯ" is not null'; 
   DM.FIBDS.Close;
   DM.FIBDS.SQLs.SelectSQL.Text:=zapr;
   DM.FIBDS.Open;
end;
иначе, когда у вас ((radiobutton2.Checked=true) and(checkbox1.Checked=false) ) = false, то будет выполняться запрос SELECT * FROM NEW_TABLE WHERE, который не выполнится и вызовет ошибку
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.

Последний раз редактировалось Sparkman; 12.08.2010 в 05:46.
Sparkman вне форума Ответить с цитированием
Старый 12.08.2010, 05:49   #12
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Точн не помню, но разве в FireBird нельзя так записать?
Код:
DM.FIBQ.ParamByName('TPR').AsDateTime:=Time;
Можете привести скрин таблицы БД с несколькими вставленными записями? Надо посмотреть как они там выглядят.
пробовал делать так
Код:
DM.FIBQ.ParamByName('TPR').AsDateTime:=Time;
и так
Код:
DM.FIBQ.ParamByName('TPR').AsTime:=Time;
Цитата:
Сообщение от Sparkman Посмотреть сообщение
Время у вас не сравнивается, потому что формат времени скорей всего у вашего поля включает еще и миллисекунды

Кстати, еще в код


внесите такие изменения

Код:
procedure TVahtaMainForm.poiskClick(Sender: TObject);
var
   zapr:string;
begin
    zapr:='SELECT * FROM NEW_TABLE ';
   if (radiobutton2.Checked=true) and(checkbox1.Checked=false)  then
      zapr:=zapr+'WHERE "ВРЕМЯ ПРИБЫТИЯ"='+
      QuotedStr(TimeToStr(datetimepicker2.Time))+' and "ВРЕМЯ УБЫТИЯ" is not null'; 
   DM.FIBDS.Close;
   DM.FIBDS.SQLs.SelectSQL.Text:=zapr;
   DM.FIBDS.Open;
end;
иначе, когда у вас ((radiobutton2.Checked=true) and(checkbox1.Checked=false) ) = false, то будет выполняться запрос SELECT * FROM NEW_TABLE WHERE, который не выполнится и вызовет ошибку
Как можно еще добавить мили секунды?
Ошибку не вызовет потому что все варианты учтены. В примере указана лишь часть кода
Изображения
Тип файла: jpg 1.jpg (80.9 Кб, 112 просмотров)
Тип файла: jpg 2.jpg (65.5 Кб, 122 просмотров)

Последний раз редактировалось artemavd; 12.08.2010 в 06:11.
Lokos вне форума Ответить с цитированием
Старый 12.08.2010, 05:55   #13
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от Lokos Посмотреть сообщение
Как можно еще добавить мили секунды?
Ошибку не вызовет потому что все варианты учтены. В примере указана лишь часть кода
попробуйте сравнить

Код:
DM.FIBDS.Close;
 DM.FIBDS.SQLs.SelectSQL.Text:='select * from NEW_TABLE where "ВРЕМЯ ПРИБЫТИЯ"=' + QuotedStr('15:15:57 00');
 DM.FIBDS.Open;
либо

Код:
DM.FIBDS.Close;
 DM.FIBDS.SQLs.SelectSQL.Text:='select * from NEW_TABLE where "ВРЕМЯ ПРИБЫТИЯ"=' + QuotedStr('15:15:57.00');
 DM.FIBDS.Open;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 12.08.2010, 06:53   #14
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от Sparkman Посмотреть сообщение
попробуйте сравнить

Код:
DM.FIBDS.Close;
 DM.FIBDS.SQLs.SelectSQL.Text:='select * from NEW_TABLE where "ВРЕМЯ ПРИБЫТИЯ"=' + QuotedStr('15:15:57 00');
 DM.FIBDS.Open;
либо

Код:
DM.FIBDS.Close;
 DM.FIBDS.SQLs.SelectSQL.Text:='select * from NEW_TABLE where "ВРЕМЯ ПРИБЫТИЯ"=' + QuotedStr('15:15:57.00');
 DM.FIBDS.Open;
и не так и не так((((
Lokos вне форума Ответить с цитированием
Старый 12.08.2010, 06:55   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А какая необходимость так подробно заносить время? Можно проще же сделать.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.08.2010, 07:06   #16
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
А какая необходимость так подробно заносить время? Можно проще же сделать.
Слушаю ваш вариант
Представить его в виде строки?
Lokos вне форума Ответить с цитированием
Старый 12.08.2010, 07:46   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ну, смотри. Зачем тебе заносить какие-то милисекунды в БД? Это ж не НАСА, где космическая скорость нужна . Заносите только минуты и часы. Этого более чем достаточно. Вот, смотри. Берем твой запрос вставки записи и немного меняем его:

где-то в Lable1 перед вставкой заносится текущее время:
Код:
 Lable1.Caption:=TimeToStr(Now);

         DM.FIBQ.SQL.Clear;
         DM.FIBQ.SQL.Text:='INSERT INTO NEW_TABLE (ID,"ФИО","ДАТА ПРИБЫТИЯ","ВРЕМЯ ПРИБЫТИЯ", '+
         '"ВРЕМЯ УБЫТИЯ","АГЕНСТВО","СОПРАВОЖДАЮЩИЙ","КУДА")'+
         ' VALUES(null,:FIO,:DPR,:TPR,null,:AG,:SOPR,:KUDA)';
         DM.FIBQ.ParamByName('FIO').Value:=memo1.text;
         DM.FIBQ.ParamByName('DPR').AsString:=DateToStr(DateTimePicker1.Date);
         DM.FIBQ.ParamByName('TPR').AsString:=Lable1.Caption;
         DM.FIBQ.ParamByName('AG').Value:=combobox2.text;
         DM.FIBQ.ParamByName('SOPR').Value:=memo2.Text;
         DM.FIBQ.ParamByName('KUDA').Value:=memo3.Text;
         DM.FIBQ.ExecQuery;
         DM.FIBQ.Transaction.Commit;
         DM.FIBDS.Close;
Короче надо сделать так, чтобы в качестве параметра в запрос вставки передалавось текущее время в формате чч:мм. Без милисекунд. Думаю, что разберетсь как нужно). В БД поля со временем и датой сделайте текстовыми и попробуйте свой вариант для текстовых полей. Пробуйте, если что не будет получаться то будем вместе по ходу разбираться.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.08.2010, 07:57   #18
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
Смущение

Цитата:
Сообщение от artemavd Посмотреть сообщение
Ну, смотри. Зачем тебе заносить какие-то милисекунды в БД? Это ж не НАСА, где космическая скорость нужна . Заносите только минуты и часы. Этого более чем достаточно. Вот, смотри. Берем твой запрос вставки записи и немного меняем его:

где-то в Lable1 перед вставкой заносится текущее время:
Код:
 Lable1.Caption:=TimeToStr(Now);

         DM.FIBQ.SQL.Clear;
         DM.FIBQ.SQL.Text:='INSERT INTO NEW_TABLE (ID,"ФИО","ДАТА ПРИБЫТИЯ","ВРЕМЯ ПРИБЫТИЯ", '+
         '"ВРЕМЯ УБЫТИЯ","АГЕНСТВО","СОПРАВОЖДАЮЩИЙ","КУДА")'+
         ' VALUES(null,:FIO,:DPR,:TPR,null,:AG,:SOPR,:KUDA)';
         DM.FIBQ.ParamByName('FIO').Value:=memo1.text;
         DM.FIBQ.ParamByName('DPR').AsString:=DateToStr(DateTimePicker1.Date);
         DM.FIBQ.ParamByName('TPR').AsString:=Lable1.Caption;
         DM.FIBQ.ParamByName('AG').Value:=combobox2.text;
         DM.FIBQ.ParamByName('SOPR').Value:=memo2.Text;
         DM.FIBQ.ParamByName('KUDA').Value:=memo3.Text;
         DM.FIBQ.ExecQuery;
         DM.FIBQ.Transaction.Commit;
         DM.FIBDS.Close;
Короче надо сделать так, чтобы в качестве параметра в запрос вставки передалавось текущее время в формате чч:мм. Без милисекунд. Думаю, что разберетсь как нужно). В БД поля со временем и датой сделайте текстовыми и попробуйте свой вариант для текстовых полей. Пробуйте, если что не будет получаться то будем вместе по ходу разбираться.
Если использовать текстовые поля то не каких проблем не вознекает даже с секундами Просто было интересно почему не выполнялся запрос Спс
Lokos вне форума Ответить с цитированием
Старый 12.08.2010, 08:15   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Наверное все дело в формате времени. ХЗ
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.08.2010, 11:07   #20
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

а не проще ли все-таки время хранить в том формате который ему соответствует, т.е. хотя бы DATE в бд
а в запросе пользоваться преобразованием подставляемых даты/времени через формат
soleil@mmc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Выборка по времени и дате Aleksei83 Microsoft Office Access 6 24.06.2010 08:25
Firebird. Выборка записей. Вопрос про DBGridEh. artemavd БД в Delphi 14 17.10.2009 12:09
FireBird Д'якон БД в Delphi 2 04.12.2008 11:15
FireBird 1.5.4 Nikola__ БД в Delphi 2 17.11.2008 14:42