![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем Привет!
![]() У меня задание создать клиентское положение для больницы. Программа сложная, трудности начались с самого начала Возможно вопросов будет много. Но пока что только 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;![]() |
|
#2
|
||||
|
||||
|
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
|
||||
|
||||
|
Код:
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;![]() |
|
#4
|
||||
|
||||
|
Ну сделайте так:
Код:
... ADOQuery5.First; while not ADOQuery5.Eof do begin ... ПС: Код:
ADOQuery5.Active:=False; ADOQuery5.Close; ![]() Последний раз редактировалось Страдалецъ, 23.10.2010 в 23:14. |
|
#5
|
||||
|
||||
|
Тоже не помогло
но спасибо за отклик![]() |
|
#6
|
||||
|
||||
|
А может можно сделать так чтобы в DBGrid не все поля отражались которые мы выбираем с помощью ADOQuery? Потому что если в ADOQuery (в том который связан с DBGrid )писать select sity, street и всё остальное то всё переключается и отображается в Memo нормально. Но сказано по заданию в DBGrid не включать эти поля, так можно их можно как-либо скрыть?
|
|
#7
|
||||
|
||||
|
Цитата:
Далее через главное меню или через локальное меню открышегося окна выбрать Add all fields из списка. Теперь, в сформировавашемся списке, можно либо совсем удалить ненужные поля, либо выставить для них свойство Visible в False Цитата:
Последний раз редактировалось Страдалецъ, 24.10.2010 в 00:42. |
|
#8
|
||||
|
||||
|
А ни фига. Ибо мемо перед каждой записью-то очищается
А после последней - нет, вот она и остаётся ![]() |
|
#9
|
||||
|
||||
|
Фу черт, а слона-то я и не увидел. Бездумно скопировал весь блок в цикл. Стыдно мне ужасно.
Так попробуйте: Код:
Memo4.Clear;
while not ADOQuery5.Eof
do begin
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString) ; |
|
#10
|
||||
|
||||
|
С этим справились. Настигла ещё одна проблема.
По заданию нужно заносить из 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;![]() |
|
#11
|
||||
|
||||
|
Memo1.Lines.Text?
ComboBox1.Text? |
|
#12
|
||||
|
||||
|
Сделала, запустилось, но теперь ругается "ошибка синтаксиса в инструкции INSERT INTO"
Это наверняка изза связей, вот изза этого: Код:
ADOQuery4.SQL.Add('WHERE (D.ID_Doctor=V.ID_Doctor) AND P.ID_Patient=V.ID_Patient'); |
|
#13
|
||||
|
||||
|
1. Количество перечисленных полей в запросе меньше чем количество значений для них.
2. В ограничении используются алиасы D,V,P которые непонятно откуда взялись. 3. Воспользуйтесь параметрами в запросе. |
|
#14
|
||||
|
||||
|
Код:
procedure TForm1.BitBtn1Click(Sender: TObject); {зарегистрировать приём}
begin
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('INSERT INTO Visit');
ADOQuery4.SQL.Add('(ID_Doctor, ID_Patient, VisitDate, VisitTime,Resultat,Symptoms,Diagnos)');
ADOQuery4.SQL.Add('VALUES(+Doctor.FieldByName(ID_Doctor).AsString+, +Patient.FieldByName(ID_Patient).AsString+,'+' "'+Edit2.Text+'", "'+Edit3.Text+'", "'+ComboBox1.Text+'", "'+Memo1.Lines.Text+'", "'+Memo2.Lines.Text+'")');
ADOQuery4.ExecSQL;
end;
procedure TForm1.BitBtn2Click(Sender: TObject); {сформировать рецепт}
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Recept');
ADOQuery1.SQL.Add('(ID_Visit, ReceptCode, Medicaments)');
ADOQuery1.SQL.Add('VALUES(+Visit.FieldByName(ID_Visit).AsString+, '+'"'+Edit4.Text+'", "'+Memo1.Lines.Text+'")');
ADOQuery1.ExecSQL;
end;Сама программа-то заключается в следующем: Врач пришёл на работу, запустил это приложение, там отобразились ФИО всех врачей в DBGrid1 и ФИО всех пациентов которые в этой больнице зарегистрированы в DBGrid2. Доктор нажимает в DBGrid1 на ячейку со своей фамилией, потом нажимает в DBGrid2 на ячейку с фамилией пацента которого он осматривает, и пишет в эдитах и мемо дату и время визита, симптомы и диагноз. Затем нажимает на кнопку "зарегистрировать приём" - и все эти данные которые он написал отправляются в Акцесс в таблицу Visit, причем ID_Doctor и ID_Pacient там должны быть именно те которые были предварительно выбраны в гридах. Также доктор может (опять же щёлкнув предварительно нужные ячейки в гридах) записать в эдите и мемо код лекарства и название лекарства, нажать кнопку "сформировать рецепт"- и всё что он записал отправится снова в Акцесс в таблицу Recept причем опять же ID_Doctor и ID_Pacient там должны быть именно те которые были предварительно выбраны в гридах. Вот оно как ![]() |
|
#15
|
||||
|
||||
|
Задача в общем-то несложная.
Есть такое соображение: Где-то я читал или слышал, что рецепт должен быть обязательно написан от руки и на латинском языке. Не знаю, верно это или нет, но проверьте на всякий случай. |