Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Форма отображения 10-ти лучших работников зоопарков Украины.

Поиск

Для отображения 10-ти лучших работников зоопарков всей Украины используется форма Top10, которая вызывается из главного меню Справочники - Топ 10 работников.

 

Свойства формы:

AutoCenter =.T. - True

BorderStyle = 0 – No border

Caption = ’ Топ 10 работников’

DataSession = 2 – Private Data Session

Height = 228

Icon = ’fox8.ico’

MaxButton =.F. – False

MinButton =.F. – False

Name = ’top10’

Width = 663

oTop10 =.F.

 

Методы формы:

До создания формы выполняется процедура Load. В ней создается курсор (временная таблица), которая связываются с таблицей базы данных сервера.

SET TALK OFF && Не выводить промежуточные результаты

SET SAFETY OFF && Не запрашивать системного подтверждения на удаление

SET NEAR ON && Выполнять поиск до близлежащего элемента

 

thisform.oTop10=CREATEOBJECT('ocad') && создать объект-курсор для таблицы

thisform.oTop10.Alias='Top10' && имя курсора

thisform.oTop10.SelectCmd='SELECT * FROM Top10()'&& команда для заполнения курсора

&& структура курсора

thisform.oTop10.CursorSchema='id I, workname C(30), zooname C(20), cityname C(15), kol I'

IF thisform.oTop10.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Top10 '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

Объекты формы:

Grid1 – отображение таблицы

BaseClass = Grid,

ColumnCount = 5,

DeleteMark =.F. – False,

HighlightStyle = 2,

Name = ’Grid1’,

ReadOnly =.T. – True,

RowSource = ’Top10 ’,

ScrollBars = 0 – None

 

Дополнительные процедуры

Эти процедуры вызываются из форм программы и выполняют определенные действия над объектами, которые передаются в виде параметров.

 

· Add_record – добавляет новую запись в таблицу

LPARAMETERS tabname, objLst, objCursor

&& параметры - имя таблицы, объект-список, объект-курсор

 

&& Вызвать форму запроса нового имени и возврат его в переменную cName

DO FORM zapros_name WITH tabname, '' TO cName

IF EMPTY(cName) && Если запрос отменен

RETURN && Возврат

ENDIF

 

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

&& составление командной строки для запроса

oTemp.SelectCmd='SELECT * FROM add_'+tabname+'(?cName) as ret'

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

IF USED('City') && если открыт курсор City

idCity=City.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Zoo') && если открыт курсор Zoo

idZoo=Zoo.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

objCursor.CursorRefresh() && обновить курсор

objLst.Requery && перезалить список

=SEEK(temp.ret, tabname, 'id') && найти новую запись в списке

ENDIF

 

· Upd_record – изменяет запись в таблице

LPARAMETERS tabname, nId, objLst, objCursor

&& параметры - имя таблицы, id изменяемой записи, объект-список, объект-курсор

 

SELECT (tabname) && переключиться на курсор

&& Вызвать форму запроса нового имени и возврат его в переменную cName

DO FORM zapros_name WITH tabname, ALLTRIM(name) TO cName

IF EMPTY(cName) && Если запрос отменен

RETURN && Возврат

ENDIF

 

nId=id && запомнить id в переменной для использования в параметре функции

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

&& составление командной строки для запроса

oTemp.SelectCmd='SELECT * FROM upd_'+tabname+'(?nId,?cName) as ret'

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

objCursor.CursorRefresh() && обновить курсор

objLst.Requery && перезалить список

=SEEK(temp.ret, tabname, 'id') && найти новую запись в списке

ENDIF

 

· Del_record – удаляет запись из таблицы

LPARAMETERS tabname, nId, objLst, objCursor

&& параметры - имя таблицы, id удаляемой записи, объект-список, объект-курсор

 

&& запрос подтверждения удаления

ret_val=MESSAGEBOX('Действительно удалить эту запись?',4+32,'Удаление')

IF ret_val<>6 && если выбрано не "Да"

RETURN && вернуться

ENDIF

 

SELECT (tabname) && переключиться на курсор

old_name=name && сохранить удаляемое имя

oTemp=CREATEOBJECT('ocad') && создать объект для временного курсора

oTemp.Alias='Temp' && имя временного курсора

&& составление командной строки для запроса

oTemp.SelectCmd='SELECT * FROM del_record(?tabname,?nId) as ret'

 

oTemp.CursorSchema='ret I' && структура курсора

IF oTemp.CursorFill(.T.,.F., 1, loCmd)=.F. && если заполнение курсора не получилось

LOCAL laerror(1) && объявление массива

= AERROR(laerror) && чтение ошибки в массив

MESSAGEBOX('Temp '+STR(laerror(1))+' '+laerror(2)) && выдать сообщение об ошибке

RETURN.F. && возврат с ошибкой

ENDIF

 

IF temp.ret>0 && если сервер БД вернул код > 0

IF USED('City') && если открыт курсор City

idCity=City.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Zoo') && если открыт курсор Zoo

idZoo=Zoo.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

IF USED('Worker') && если открыт курсор Worker

idWorker=Worker.id && запомнить его id (он может использоваться в параметре функции на сервере БД

ENDIF

objCursor.CursorRefresh() && обновить курсор

SELECT (tabname) && переключиться на курсор

objLst.Requery && перезалить список

=SEEK(old_name, tabname, 'name') && выполнить поиск близлежащего названия к старому

IF EOF() && если вышли за конец курсора

GO BOTTOM && перейти в его конец

ENDIF

ENDIF

 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 155; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.108.48 (0.006 с.)