Форум программистов CodeGuru
20 Июнь 2018, 13:27:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Большая работа (клиентское приложение для больницы), много вопросов  (Прочитано 17099 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Первокурсница
Интересующийся
**
Офлайн Офлайн

Сообщений: 14



Просмотр профиля
« : 23 Октябрь 2010, 22:05:26 »

Всем Привет! Подмигивание
У меня задание создать клиентское положение для больницы. Программа сложная, трудности начались с самого начала :lamer:Возможно вопросов будет много. Но пока что только 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 штук разных адресов, при каждом щелчке на другом пациенте должен отбражаться его адрес. Что делать? Плачу
Записан
Первокурсница
Интересующийся
**
Офлайн Офлайн

Сообщений: 14



Просмотр профиля
« Ответ #1 : 24 Октябрь 2010, 12:43:09 »

С этим справились. Настигла ещё одна проблема. Шпион По заданию нужно заносить из Edit'ов и Memo'в в таблицу в Акцессе всё что доктор туда напишет, а также ID доктора и пациента. В БД 4 связанные таблицы (на картинке схема данных).
Как с ними работать мне никто не объяснял, погуглила, кое-что нашла, но конечно же ничего не работает.
Вот что у меня примерно получилось:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject); {зарегистрировать приём}
begin
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('INSERT INTO Visit');
ADOQuery4.SQL.Add('VisitDate, VisitTime,Resultat,Symptoms,Diagnos');
ADOQuery4.SQL.Add('VALUES("'+Edit2.Text+'", "'+Edit3.Text+'", "'+ComboBox1.SelText+'", "'+Memo1.Lines+'", "'+Memo2.Lines+'", "'+Memo3.Lines+'");
ADOQuery4.SQL.Add('WHERE (D.ID_Doctor=V.ID_Doctor) AND P.ID_Patient=V.ID_Patient');
ADOQuery4.ExecSQL;
end;
Подсвечивает "'+Memo1.Lines+'", говорит
Код:
"Incompatible types: 'String' and 'TStrings' ".
А у меня там ещё и ComboBox... Как эту процедуру правильно записать?  Непонимающий
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #2 : 24 Октябрь 2010, 23:47:56 »

Подсвечивает "'+Memo1.Lines+'", говорит
Код:
"Incompatible types: 'String' and 'TStrings' ".

Это потому, что Lines в Memo - это массив объектов типа String (узнать количество строк можно из свойства Memo1.Lines.Count).
Имхо, правильно использовать Memo1.Text - должно вернуть весь текст в Memo.

А у меня там ещё и ComboBox...

Ну, из ComboBox-а то берется выделенный текст.
Правда, в случае если ничего не выделено - что возьмется ?
Поэтому надо производить проверку, если ничего не выделено - то предлагать пользователю выделить что-то в комбобоксе и выходить из процедуры.

Как эту процедуру правильно записать?  Непонимающий

Ну, просто надо сформировать текст запроса. Он формируется в принципе, надо чтобы типы данных приводились к String, если так формировать.

И еще одно замечание. Эта процедура имеет классическую уязвимость - возможность произвести внедрение sql-кода (так называемую SQL Injection).

Например, если в поле Edit2 ввести что-то типа:

Код:
',null,null,null,null); DROP DATABASE;

или

Код:
',null,null,null,null); DELETE FROM Visit;

будут плачевные последствия. В первом случае должна будет удалиться БД (хотя бд Access может и не удалиться), а во втором - из таблицы Visit удаляться все записи.

Поэтому обычно помещаемые в запрос пользовательские данные обрабатывают.
Делают это по-разному, в зависимости от задачи.
Записан

c-coder
Пользователь
***
Офлайн Офлайн

Сообщений: 110


Просмотр профиля
« Ответ #3 : 26 Октябрь 2010, 21:52:29 »

Рассмотрите возможность сделать уровень абстракции между БД и своим средством программирования.
А аватарка у первокурсницы классная  Пеффко !
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!