|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
А ни фига. Ибо мемо перед каждой записью-то очищается А после последней - нет, вот она и остаётся
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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? Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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
|
||||
|
||||
Задача в общем-то несложная.
Есть такое соображение: Где-то я читал или слышал, что рецепт должен быть обязательно написан от руки и на латинском языке. Не знаю, верно это или нет, но проверьте на всякий случай. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |