Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];
ВнизНадо быстрее. Найти похожие ветки
← →
gestern (2003-12-13 18:20) [0]Подскажите как ускорить работу процедуры? Текст привожу полностью. Поясню: таблица отвечает за запись пациентоа в 12 разных кабинетах клиники.
Поля:id
dok-фамилия доктора
chislo- дата записи
vremya-время записи
appar-апарат с помощью которого производится лечение
После того как запись вставлена нужно посмотреть не занят ли доктор в это время, и не занят ли апарат. Я соченил для этого такое:
procedure TForm1.IBDataSet1AfterPost(DataSet: TDataSet);
var
sql,oldsql:string;
begin
oldsql:=IBDataset1.SelectSQL.Text;//запоминаю старый запрос
sql:="SELECT * from SOTIS where (id<>"""+inttostr(ibdataset1id.AsInteger)+""")and (DOK="""+IBDataSet1dok.AsString+""") and (chislo="""+datetostr(IBDataSet1chislo.AsDateTime)+ """) and (vremya="""+timetostr(IBDataSet1vremya.AsDateTime)+ """)";//проверяю занят ли доктор
IBDataset1.Close;
IBDataset1.SelectSQL.Clear;
IBDataset1.SelectSQL.Add(sql);
IBDataset1.Open;
IBDataset1.First;
if ibdataset1.RecordCount > 0 then // значит занят...
begin
dbgrid6.columns[11].Visible:=true;//вывожу поле с названием кабинета где работает доктор (где он занят)
dbgrid6.Columns[11].Width:=100;
showmessage("Врач в это время занят");
end;
dbgrid6.columns[11].Visible:=false;//прячу поле
//тоже самое для апарата
sql:="SELECT * from SOTIS where (id<>"""+inttostr(ibdataset1id.AsInteger)+""")and(APPAR="""+IBDataSet1APPAR.AsString+""") and (chislo="""+datetostr(IBDataSet1chislo.AsDateTime)+ """) and (vremya="""+timetostr(IBDataSet1vremya.AsDateTime)+ """)";
IBDataset1.Close;
IBDataset1.SelectSQL.Clear;
IBDataset1.SelectSQL.Add(sql);
IBDataset1.Open;
IBDataset1.First;
if ibdataset1.RecordCount > 0 then
begin
showmessage("В это время апарат занят");
end;
//
IBDataset1.Close;
IBDataset1.SelectSQL.Clear;
IBDataset1.SelectSQL.Add(oldsql);//вывожу грид в начальном виде
IBDataset1.Open;
IBDataset1.First;
end;
← →
gestern (2003-12-13 20:45) [1]ау......
← →
Mike_Goblin (2003-12-13 21:46) [2]Начнем пожалуй
1)
>Поясню: таблица отвечает за запись пациентоа в 12 разных >кабинетах клиники.
А если кабинетов будет 5 или 16, от этого что-то изменится?
2)
>После того как запись вставлена нужно посмотреть не занят ли >доктор в это время, и не занят ли апарат
То есть мы записались на прием, а потом смотрим, а может ли доктор нас принять? странная логика, однако.
3) Стоит задуматься о том, что случиться если вдруг возникнет ошибка при выполнении процедуры. Как минимум текст страрого запроса не будет восстановлен
4)"SELECT * from SOTIS where ....
а затем
if ibdataset1.RecordCount > 0
вопрос, а нафига выбирать ВСЕ поля и зачем вообще их выбирать
В общем плохо продумана логика работы
1. Продумать логику
2. Провести оптимизацию SQL запросов, а еще лучше задуматься о необходимости хранимой процедуры
← →
JibSkeart (2003-12-14 11:11) [3]Вообщем все правильно сказали
но я всетаки за то чтобы подобные веши "заворачивать"
в сп
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c