|
Вопрос # 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));
и тому подобное. думаю быстро найдете все ответы.
О том, что в делфи ещё есть отладчик... я молчу
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|