| 
| 
 | Вопрос # 4 512/ вопрос открыт / | 
 |  Здравствуйте, уважаемые светлые головы, отцы и благодетели!Снова обращаюсь к вам с воплем о помощи. Проблема:
 Есть в таблице два поля с датами (Начало заболевания и окончание болезни).
 Вопрос:
 Как написать запрос на выборку персон, которые  болели в указанную,например в Edit, дату.
 Заранее очень признательна!
 
|  |   Вопрос задала: marinochka_m (статус: Посетитель)Вопрос отправлен: 18 августа 2010, 22:25
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 20 августа 2010, 19:02; участников в обсуждении: 3. 
|   | IlluminatI (статус: 2-ой класс), 19 августа 2010, 10:04 [#1]:Я так понимаю SQL? Допустим таблица имеет такой вид: 
 +-------+----------+----------+
| name  | start    | finish   |
+-------+----------+----------+
| first | 12.01.05 | 22.01.05 |
+-------+----------+----------+
| second| 15.06.08 | 24.06.08 |
+-----------------------------+Тогда запрос будет таким: 
 SELECT `name` FROM `tabl` WHERE (`start`='Edit1.Text' AND `finish`=Edit2.Text) |  
|   | Вадим К (статус: Академик), 19 августа 2010, 10:24 [#2]:to IlluminatI: и если человек болел два дня и более, то ... то ничего не будет выбрано.
 Запрос как минимум должен выглядеть так
 
 QueryXXX.SQL.Text := 'SELECT `name` FROM `tabl` WHERE (`start`<='+Edit1.Text+' AND `finish`>='+Edit1.Text+')'правда нужно что бы дата в Edit1 была записана как нужно. и поля start и finish были типа "дата", а не типа "строка". Галочка "подтверждения прочтения" - вселенское зло. |  
|   | marinochka_m (статус: Посетитель), 20 августа 2010, 18:49 [#4]:Спасибо за помощь,но...Уважаемый Вадим К, а разве не будет сообщения о несовместимости типов (я имею ввиду 'start' типа дата и Edit типа строка.)? Я промучалась с этим вопросом два дня, и единственное до чего додумалась, это такой монстроподобный код:
 
 
 procedure Tfrm_Find.btn_1Click(Sender: TObject);
var
  s:string;
begin
 if frm_Find.Caption='Поиск отсутствующих' then
  begin  //Во вспомогательное поле таблицы ставлю значение
    fDM.tbl_Otsutctvie.First;
    while not fDM.tbl_Otsutctvie.Eof do
     begin
       if (fDM.tbl_Otsutctvie['Отсутствовал_с']>=cal1.Date) and (fDM.tbl_Otsutctvie['По']<=cal1.Date)then
        begin
          fDM.tbl_Otsutctvie.Edit;
          fDM.tbl_Otsutctvie['D']:='1';
          fDM.tbl_Otsutctvie.Post;
        end;
          fDM.tbl_Otsutctvie.Next;
     end;
   //Делаю выборку по вспомогательному полю<a href="https://www.delphi-int.ru/user/192/" style="color: black;
text-decoration: none;">Вадим К</a>: 
    s:='SELECT Взвод,Фамилия,Отсутствовал_с,По,Причина  FROM Glavn,Otsutctvie '+
       'WHERE (Glavn.Ключ=Otsutctvie.Кадет)AND '+
       '(D="1")';
  end
  elseНо самое смешное, что и он не работает. То есть во вспомогательное поле таблицы не вставляется значение. Буду очень признательна Вам за консультацию.
 |  
|   | Вадим К (статус: Академик), 20 августа 2010, 19:02 [#5]:по поводу совместимости. в Edit нужно вписывать строковое представление даты. тогда запрос будет работать. в sql иначе дату не вставишь, кроме как текстом. Но вот как вставлять? если это был бы ms access через ADO, то вставляют так
 #mm/dd/yyyy#
 да, именно с решетками, и вначале месяц, потом число и год.
 
 Код вроде правдоподобный, но нужно разбираться. Рекомендую Вам сделать примитивное логирование и жизнь станет проще. В данном случае я бы наверно делал так - поставил на форму Memo1, а в коде писал что то вида
 Memo1.lines.add('контрольная точка 1 пройдена');
 Memo1.lines.add('i= '+ inttostr(i));
 и тому подобное. думаю быстро найдете все ответы.
 
 О том, что в делфи ещё есть отладчик... я молчу
   Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |