Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.10.2010, 22:08
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
Печаль Большая работа (клиентское приложение для больницы), много вопросов

Всем Привет!
У меня задание создать клиентское положение для больницы. Программа сложная, трудности начались с самого началаВозможно вопросов будет много. Но пока что только 1.
По щелчку в DBGrid (там отображается ФИО пациентов) в Memo должен отображаться адрес и телефон этого пациента.
Вот
Код:
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
ADOQuery5.Active:=False;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * FROM Patient');
ADOQuery5.Open;
ADOQuery5.Active:=True;
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString);
end;
Но у меня отображается в Memo только запись которая в акцессе в таблице первая записана. А их там 25 штук разных адресов, при каждом щелчке на другом пациенте должен отбражаться его адрес. Что делать ?
Ответить с цитированием
  #2  
Старый 23.10.2010, 22:37
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

1. Ну мне кажется вы уже с запросом наврали.
Код:
ADOQuery5.SQL.Add('SELECT * FROM Patient');
Так вы получите всех пациентов, а вам наверняка нужно по какому-то критерию это делать иначе на клик в любой ячейке вашего грида вы будете получать один и тот-же набор пациентов.
2.
Код:
ADOQuery5.Open;
ADOQuery5.Active:=True;
Это две аналогичные комманды, оставьте какую-то одну.
3.
Код:
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString);
Таким кодом вы будете получать только значение одной текущей записи, а для получения всех записей надо по полученным данным пробежаться:
Код:
while not ADOQuery5.Eof
do begin
    Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString);
    Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
    Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
    Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
    Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString)
    ADOQuery5.Next;
    end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 23.10.2010, 23:00
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Код:
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
ADOQuery5.Active:=False;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT Sity, Street, Home, Kv, P_Kont_Phone');
ADOQuery5.SQL.Add('FROM Patient');
ADOQuery5.Active:=True;
while not ADOQuery5.Eof
do begin
Memo4.Clear;
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString) ;
Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString);
ADOQuery5.Next;
end;
end;
Теперь в Memo выводится последняя запись и больше никаких
Ответить с цитированием
  #4  
Старый 23.10.2010, 23:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну сделайте так:
Код:
...
ADOQuery5.First;
while not ADOQuery5.Eof
do begin
...

ПС:
Код:
ADOQuery5.Active:=False;
ADOQuery5.Close;
Это тоже 2 аналогичные комманды, выберите одну.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 23.10.2010 в 23:14.
Ответить с цитированием
  #5  
Старый 23.10.2010, 23:19
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

Тоже не помогло но спасибо за отклик
Ответить с цитированием
  #6  
Старый 23.10.2010, 23:47
Аватар для Первокурсница
Первокурсница Первокурсница вне форума
Прохожий
 
Регистрация: 27.02.2010
Сообщения: 46
Репутация: 10
По умолчанию

А может можно сделать так чтобы в DBGrid не все поля отражались которые мы выбираем с помощью ADOQuery? Потому что если в ADOQuery (в том который связан с DBGrid )писать select sity, street и всё остальное то всё переключается и отображается в Memo нормально. Но сказано по заданию в DBGrid не включать эти поля, так можно их можно как-либо скрыть?
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:42.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025