Форум: "Начинающим";
Текущий архив: 2011.01.16;
Скачать: [xml.tar.bz2];
ВнизINSERT INTO table поля из двух других связанных таблиц Найти похожие ветки
← →
Первокурсница © (2010-10-24 14:29) [0]Здравствуйте.
Клиентское приложение для больницы.
БД:
Таблица Doctor:
ID_Doctor (счётчик, первичный ключ)
D_Sname (текст)
D_Name (текст)
D_PhName (текст)
Special (текст)
D_KontPhone (текст)
KabNum (текст)
Graph (мемо)
Таблица Pаtient:
ID_Patient (счётчик, первичный ключ)
P_Sname (текст)
P_Name (текст)
P_PhName (текст)
Sity (текст)
Street (текст)
Home (текст)
Kv (текст)
birdts_year (текст)
birdts_day (текст)
P_Kont_Phone (текст)
Таблица Recept:
ReceptKey (счётчик, первичный ключ)
ID_Visit (числовой)
ReceptCode (текст)
Medicaments (мемо)
Таблица Visit:
ID_Doctor (числовой)
ID_Patient (числовой)
ID_Visit (счётчик, первичный ключ)
VisitDate (текст)
VisitTime (текст)
Resultat (текст)
Symptoms (мемо)
Diagnos (мемо)
Doctor связана с Visit (1-N) по полям ID_Doctor
Visit связана с Patient (N-1) по полям ID_Patient
Visit связана с Recept (1-N) по полям ID_Visit
В Delphi клиентское приложение которое позволяет докторам вносить в таблицу Visit (в Акцесс) данные о дате и времени приёма, симптомы заболевания и диагноз, а в таблицу Recept (в Акцесс) код рецепта и выписанное пациенту лекарство. Заносятся все эти данные с помощью Edit и Memo которые расположены на форме. Также на форме расположены две DBGrid - с фио пациентов (Patient) и фио врачей (Doctor). Врач щелкает на ячейке с фамилией пациента, затем на ячейке с фамилией врача, вносит все необходимые данные в Editы и Memo, жмёт кнопку "Зарегистрировать приём" - и данные об этом пациенте и враче и болезнях отправляются в Акцесс в таблицу Visit, жмёт кнопку "Сформировать рецепт" - и данные об этом визите и лекарства отправляются в Акцесс в таблицу Recept.
Вот программа:unit LAB8Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Buttons, Grids, DBGrids;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
DBGrid1: TDBGrid;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit2: TEdit;
Label8: TLabel;
Edit3: TEdit;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Edit4: TEdit;
Memo1: TMemo;
Label12: TLabel;
Memo2: TMemo;
Label13: TLabel;
Memo3: TMemo;
Label14: TLabel;
Label15: TLabel;
Memo4: TMemo;
DBGrid2: TDBGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
ADOQuery2: TADOQuery;
DataSource2: TDataSource;
ADOQuery3: TADOQuery;
DataSource3: TDataSource;
ADOQuery4: TADOQuery;
DataSource4: TDataSource;
ADOQuery5: TADOQuery;
DataSource5: TDataSource;
ComboBox1: TComboBox;
procedure FormActivate(Sender: TObject);
procedure DBGrid2CellClick(Column: TColumn);
procedure DBGrid1CellClick(Column: TColumn);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT D_Sname, D_Name, D_PhName, Special, D_KontPhone, KabNum,Graph");
ADOQuery1.SQL.Add("FROM Doctor");
ADOQuery1.Open;
ADOQuery1.FieldByName("Graph").Visible:=false;
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add("SELECT P_Sname, P_Name, P_PhName, birdts_year, birdts_day, Sity, Street, Home, Kv, P_Kont_Phone");
ADOQuery4.SQL.Add("FROM Patient");
ADOQuery4.Open;
ADOQuery4.FieldByName("Sity").Visible:=false;
ADOQuery4.FieldByName("Street").Visible:=false;
ADOQuery4.FieldByName("Home").Visible:=false;
ADOQuery4.FieldByName("Kv").Visible:=false;
ADOQuery4.FieldByName("P_Kont_Phone").Visible:=false;
end;
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
Memo4.Lines.Add(ADOQuery4.FieldByName("Sity").AsString) ;
Memo4.Lines.Add(ADOQuery4.FieldByName("Street").AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName("Home").AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName("Kv").AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName("P_Kont_Phone").AsString);
Label5.Caption:=ADOQuery4.FieldByName("P_Sname").AsString+" "+ADOQuery4.FieldByName("P_Name").AsString+" "+ADOQuery4.FieldByName("P_PhName").AsString;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
ADOQuery2.Active:=False;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("SELECT Graph");
ADOQuery2.SQL.Add("FROM Doctor");
ADOQuery2.Active:=True;
Label4.Caption:=ADOQuery1.FieldByName("D_Sname").AsString+" "+ADOQuery1.FieldByName("D_Name").AsString+" "+ADOQuery1.FieldByName("D_PhName").AsString;
Edit1.Text:=ADOQuery1.FieldByName("Graph").AsString;
end;
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").AsInteger+", "+Patient.FieldByName("ID_Patient").AsInteger+","+"""+Edit2.Text+"", ""+Edit3.Text+"", ""+ComboBox1.Text+"", ""+Memo1.Lines.Text+"", ""+Memo2.Lines.Text+"")");
ADOQuery4.ExecSQL;
end;
end.
На данном этапе подсвечивается Строка ADOQuery4.SQL.Add("VALUES("+Doctor.FieldByName("ID_Doctor"), ошибка "неизвестная переменная". Как занести в таблицу Visit правильно и айди врача, и айди пациента и всё что доктор прописал?
← →
Юрий Зотов © (2010-10-24 14:50) [1]Почему в строковой конкатенации используется AsInteger? Наверное, надо использовать или AsString, или параметры.
Ну и:
> Doctor связана с Visit (1-N) по полям ID_Doctor
> Visit связана с Patient (N-1) по полям ID_Patient
К одному доктору могут прийти несколько пациентов. Один пациент может прийти к нескольким докторам. Значит, напрашивается: Doctor связана с Patient через Visit (N-N) по полям ID_Doctor и ID_Patient.
Кроме того, один пациент может прийти к одному доктору несколько раз. Это разруливается через поле ID_Visit таблицы Visit.
← →
Юрий Зотов © (2010-10-24 14:53) [2]Кстати, очень неплохая учебная задачка, тем более для первого курса.
Или Вы уже не на первом?
:o)
← →
Первокурсница © (2010-10-24 14:54) [3]
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+"")");
Та же самая ошибка, неизвестная переменная. Схему данных не я придумывала, она указана в методичке, и отклоняться от неё запрещено :(
← →
Первокурсница © (2010-10-24 14:55) [4]На первом я пока что :(
← →
MonoLife © (2010-10-24 15:20) [5]
> Первокурсница © (24.10.10 14:54) [3]
используйте параметры
> Первокурсница © (24.10.10 14:55) [4]
>
> На первом я пока что :(
>
до сих пор
← →
Юрий Зотов © (2010-10-24 15:25) [6]> Первокурсница © (24.10.10 14:54) [3]
Создайте временную форму с Memo, в этот Memo выведите получившийся текст ADOQuery4.SQL и проверьте его.
А лучше все-таки использовать параметры.
← →
Первокурсница © (2010-10-24 15:35) [7]Параметры нельзя использовать, всё строго по методичке, шаг вправо, шаг влево-расстрел. Проверка показала то же самое - таблицу принимает за неизвестную переменную.
← →
sniknik © (2010-10-24 15:38) [8]> до сих пор
сколько лет? судя по тому, что уже 2 месяца вопросы задаешь уровня "ниже плинтуса".
>ADOQuery4.SQL.Add("VALUES("+Doctor.FieldByName("ID_Doctor").AsString+
покажи объявление переменной Doctor в коде.
← →
sniknik © (2010-10-24 15:40) [9]> всё строго по методичке
врать не надо.
> Проверка показала то же самое - таблицу принимает за неизвестную переменную.
база это не дельфи код...
← →
Первокурсница © (2010-10-24 15:47) [10]Вам методичку показать? :)
Вспомните что вы проходили на 1ом курсе в институте? Скажете Дельфи+БД? Врать не надо, максимум паскаль :) Вы лекции писали? А мы их не пишем, нам дали методичку с задачами и сказали что мин.обр. выпустило указ "80% программы на самостоятельное изучение" :)
Переменная Doctor - это не переменная, а таблица базы данных.
← →
Юрий Зотов © (2010-10-24 15:58) [11]> Первокурсница © (24.10.10 15:47) [10]
> Переменная Doctor - это не переменная, а таблица базы данных.
Которую компилятор не знает. Чему же удивляться?
← →
sniknik © (2010-10-24 16:00) [12]> Вам методичку показать? :)
обязательно. то место где про запрет использования параметров.
> Скажете Дельфи+БД?
скажу что - паскаль, лисп, пролог и фокспро. лисп, пролог факультативно (за зачет), паскаль, фокспро нормально (за курсовые + экзамен).
> Врать не надо, максимум паскаль :)
на паскале базу написать посложнее будет... и ведь писали. Дельфи+БД просто отдых по сравнению с этим.
> Вы лекции писали?
были, но давали выбор (препод понимающий попался) - кто хочет самостоятельно "на компе" может использовать их время, но спрашивать с таких будут "вдвойне". я использовал.
> нам дали методичку с задачами и сказали что мин.обр. выпустило указ "80% программы на самостоятельное изучение" :)
счастье то какое нынче. а нам приходилось прогуливать, разную обязательную муру, чтобы самостоятельно позаниматься... (а по "муре" экзамены, которые никто не отменял)
> Переменная Doctor - это не переменная, а таблица базы данных.
> база это не дельфи код...
← →
Первокурсница © (2010-10-24 16:06) [13]Тогда Вам надо не методичку показывать, а с преподом знакомиться,именно он у нас яростный противник параметров)
Ну раз все всё писали и Дельфи для Вас отдых то почему бы не подсказать? Я в курсе что это не дельфи код, но из этого недельфикода мне нужно выдрать поле, мне никто не объяснял как это делать, поэтому и спрашиваю у знающих людей :)
← →
sniknik © (2010-10-24 16:16) [14]> то почему бы не подсказать?
во первых я подсказал, фактически носом ткнул в причину. после причины других вопросов не было, жалобы на методичку и плохого препода это не вопросы.
а вод подсказку в виде кода для копипаста... не...
не нравится твой подход к учебе.
и игнорирование моих советов тоже, я вот тебе про ADODataSet в прошлых твоих постах вроде говорил. и?... что вижу, опять ADOQuery.
был бы у тебя прогресс, и был бы вопрос который трудно объяснить, если не кодом, другое дело. а так нет, спасибо не надо (в смысле за спасибо репетиторствовать не буду).
← →
Первокурсница © (2010-10-24 16:19) [15]Спасибо, хотя не знаю за что
← →
Игорь Шевченко © (2010-10-24 16:49) [16]нафиг оно тебе, это программирование ?
← →
Первокурсница © (2010-10-24 17:06) [17]Я вообще мечтала пойти учиться на юриста, но в нашем городе в этот вуз можно поступить только предварительно заплатив 254 000 рублей начальнику либо если у тебя папа хотя бы подполковник милиции или прокурор. Семья у нас нищая, папа мой алкоголик, развёлся с мамой когда я ещё пешком под стол ходила, щас живёт на украине, алиментов я ни разу не видела. ЕГЭ сдала на четвёрки, в платный вуз пойти возможности нету, на бесплатное отделение поступить смогла только на факультет программирования, там как раз требовались 4 по егэ.
З.Ы,: щас начнутся недовольные возгласы "не пытайся нас разжалобить, мы всё равно не будем тебе помогать!, врать не надо, ты на самом деле богатая и счастливая, те просто делать нефиг, вот ты и тревожишь наш покой!", хех:) Да не хотите помогать-ну и не надо, не хотите верить-ну и не верьте :)
Вы ненавидите и презираете друг друга и эта взаимная ненависть - единственное, что делает вас целым. До какого каления вас нужно довести, чтоб в других вы увидели наконец себя? Чтоб вместо "я" и "они" сказали наконец "мы"? Вам это не обьяснили в прайм-тайм по будням на главном канале?
Вам посоветовали быть уникальным и культивировать свою непохожесть, верно? Так продолжайте, будьте оригинальны, станьте чемпионом по пролежням в своем отделе, получите Оскар за лучшую имитацию оргазма, кидайте партнеров на бабки, перегрызите друг другу глотки в спорах...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c