Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

Надо быстрее.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
1-37644
Hyboid
2003-12-25 19:12
2004.01.13
DLL Strings


3-37565
User_OKA
2003-12-15 12:53
2004.01.13
Поля


1-37797
Anka12345
2003-12-27 18:05
2004.01.13
выводятся только первые 3 слова ПЕРВОГО предложени


3-37559
Vick
2003-12-17 10:33
2004.01.13
Нет доступа при чтении файлов -ем с другого сервера


1-37778
Тимохов
2003-12-29 15:47
2004.01.13
Обмен опытом работы с MDI