Реалізація алгоритму обробки даних
В.п. визначення — натиснута чи клавіша типового методу, якщо так — то повертає. При виборі п. 2 ми потрапляємо в редактор файла bb. dbf — («Профілактика»), куди ми. Відповідності зі значенням ASCII коду кожного символу всередині рядки, для ключів. Принципи підготовки даних для тестового прикладу і заповнення вихідних данных. В.п. виведення повідомлення на екран із наперед заданими координатами і… Читати ще >
Реалізація алгоритму обробки даних (реферат, курсова, диплом, контрольна)
Разработка програмного забезпечення, ведення бази даних, і отримання відомості з.
частковими суммами.
Реалізація алгоритму обробки даних, і ведення реляційної бази данных.
Аналіз обробки БД його отримання :
а) За яким файлу проводиться головний цикл обробки ?
Головний цикл обробки подпрограмме vedom — (в.п., яка проводить.
виявлення всіх випадків перевищення нормативних інтервалів між профилактиками,.
передача управління ними в вивідний файл «DD», і навіть здійснює видачу відомості на принтер).
проходить за файлу bb. dbf .
б) як він може бути упорядкований ?
Вона має бути упорядкований в хронологічному порядке.
Пример:
index on bb->invnom + dtoc (bb->dateprof) to bb0001.
Справка:
Синтаксис:
INDEX ON TO.
INDEX — команда обробки бази даних, що створює файли, містять індекси.
бази даних з урахуванням значення аргументу. З використанням.
індексного файла записи бази даних обробляються в послідовності,.
заданої ключовим вираженням, проте фізичний порядок прямування записів бази.
даних залишається незмінною. INDEX забезпечує послідовність записів,.
впорядковану по значенням ключового висловлювання. Для ключів типу CHARACTER — в.
відповідності зі значенням ASCII коду кожного символу всередині рядки, для ключів.
типу NUMERIC — відповідно до числовим порядком, для ключів типу дата — в.
хронологічному порядку й у логічних — вважається, що істина (.Т.) — більш.
високого порядка.
Memo-поля неможливо знайти индексированы.
в) Застосовуються чи фільтри ?
Хоча команда SET FILTER робить отже файл у робітничій області виглядає.
що складається з підмножини записів, насправді послідовно обробляються.
усі його записи.
Фільтри не застосовуються, т. к час з фильтрованной і нефільтрованій.
робочої областю виявляється у тому ж.
р) Чи є зв’язку «хозяин-слуга» і з яких полях ?
У подпрограмме vedom є связи.
Пример:
а) set relat to bb->invnom into cc Зв’язок полем «invnom».
б) set relat to cc->idst into aa additive Зв’язок полем «idst».
в) set relat to dd->invnom into cc additive Зв’язок полем «invnom».
Принципи підготовки даних для тестового прикладу і заповнення вихідних данных.
Ці дані було обрано довільно — «з головы»:
1) Ідентифікатор типу верстата.
2) Інвентарний номер станка.
3) Вигляд профилактики.
4) Найменування типу станка.
Ідентифікатор запис у файлі bb. dbf заповнювався по спадаючій (від 1 до 18), де 1;
перша запис, а 18- последняя.
Норма кол-ва днів між профилактиками було обрано произвольна.
Дата профілактики вибиралася те щоб норма кол-ва днів між профилактиками.
була перевищена всім видів профилактик.
б) Пункти меню, що мені робиться ?
Меню № 1:
1) Відразу розпочати роботу з Базою Данных.
2) Наново споруджувати індекси Бази Данных.
3) Провести компресію Бази Данных.
4) Вихід із Бази Данных.
При виборі п. 1, якщо індекси вже є ми потрапляємо в меню № 2.
При виборі п. 2 наново відбувається побудова всіх індексів Б. Д .
При виборі п. 3 виробляється компресія (ущільнення) Б. Д .
При виборі п. 4 з’являється горизонтальне підміню:
а) Зберегти та продовжити б) Завершити работу.
П.о) Зберегти всі внесені зміни і продолжить.
П.б) Завершити роботи з базою даних із збереженням всіх изменений.
Меню № 2:
1) Ведення файла «Нормативи профілактики устаткування «.
2) Ведення файла «Профілактика «.
3) Одержання відомості порушення норм техобслуживания.
4) Вихід із Бази Данных.
При виборі п. 1 ми потрапляємо в редактор файла aa. dbf — («Нормативи профілактики.
оборудования"), где ми можемо його переглядати і редагувати.
При виборі п. 2 ми потрапляємо в редактор файла bb. dbf — («Профілактика»), куди ми.
можемо його переглядати і редактировать.
При виборі п. 3 відбувається виявлення всіх випадків перевищення нормативних.
інтервалів між профилактиками, передача управління ними в вивідний файл «DD», і навіть видача.
відомості на принтер.
При виборі п. 4 виконуються дії аналогічні п. 4 в меню № 1.
Ведення БД .
Якими табл. представлено ведення БД, якою табл. вказується поточна робоча.
область, її слуги, колонки таблиці, набір клавіш куди передбачена.
реакція системы.
Клавіші куди реагує система:
/? / ® / /; PgUp / PgDn; Home / End — Переміщення курсора.
Enter — Вибір завдання у меню і редагування полів в редакторі.
Esc — Повернення на крок тому. Скасування редагування (без збереження изменненого.
значення).
F8 — Видалити рядок.
F3 — Вставити рядок.
F10 — Вихід із завдання зі збереженням всієї необхідної інформації або без збереження.
информации.
Структура програми :
а) Вміст rmk-файла «kursv.rmk»:
objs = main2, aa, util, bb.
.prg.obj:
CLIPPER $.
.obj.exe:
RTLINK OUTPUT $* FI $(objs) /PLL:base52.
main2.obj: main2.prg.
aa.obj: aa.prg.
util.obj: util.prg.
bb.obj: bb.prg.
kurs_ok.exe: main2. obj aa.obj util. obj bb.obj.
б) Імена і змістом prg-файлов. З кожної функції: ім'я, призначення, параметри,.
тип даних, і сенс, повернута значення, робочі перемен-ные та його назначение.
Програмні файлы:
1) aa.prg.
У цьому програмі реализовано:
1. Створення TBrowse-объекта для просмотра-редактирования файла aa. dbf з вікна.
2) bb.prg.
У цьому програмі реализовано:
1. Створення TBrowse-объекта для просмотра-редактирования файла bb. dbf з вікна.
3) main2.prg.
У цьому програмі реализовано:
1.Организация меню.
2. Індексування файлів.
3. Ущільнення файла .
4. Виявлення всіх випадків перевищення нормативних інтервалів між.
профилактиками, передача управління ними в вивідний файл «DD», і навіть видача відомості на.
принтер.
5. Висновок на екран інформації про «гарячих» клавишах.
4) util.prg.
Ця програма містить набір стандартних утилит:
1. Збереження екрана, відновлення экрана.
2. Переклад у верхній регістр як латиниці, і кириллицы.
3. Координати, повідомлення, цвет.
4. Вихід із завдання зі збереженням всієї необхідної інформації - реакція на клавішу F10.
5. Подача звукового сигналу для сигналізації успішного выполнения.
поставленого завдання:
Опис основних підпрограм:
1) в.п. постоения индексов:
func db_index (prm).
s_scr (24,0,25,79).
CLOSE ALL.
SETCOLOR («w/n »).
@ 24,0 CLEAR TO 25,79.
@ 24,6 SAY «Чекайте йде індексування! «COLOR «w+*/n «.
use bb.
index on bb->invnom + dtoc (bb->dateprof) to bb0001.
use aa.
index on aa->idst to aa0002.
use cc.
index on cc->invnom to cc0003.
use dd.
index on dd->(norma-fkdn) to dd0004.
close all.
r_scr ().
return nil.
2) в.п. відкриття індексів:
func db_open.
close all.
use aa index aa0002.
use bb index bb0001 new.
use cc index cc0003 new.
use dd index dd0004 new.
return nil.
3) в.п. ущільнення Б.Д. :
FUNCTION db_compress ().
s_scr (24,0,25,79).
CLOSE ALL.
SETCOLOR («w/n »).
@ 24,0 CLEAR TO 25,79.
@ 24,6 SAY «Чекайте йде ущільнення ! «COLOR («w+*/n »).
USE aa // ущільнення файла aa.dbf.
COPY TO work.
IF ERRORLEVEL () = 0.
USE.
DELETE FILE aa.dbf.
RENAME work. dbf TO aa.dbf.
ENDIF.
USE bb // ущільнення файла bb.dbf.
COPY TO work.
IF ERRORLEVEL () = 0.
USE.
DELETE FILE bb.dbf.
RENAME work. dbf TO bb.dbf.
ENDIF.
USE cc // ущільнення файла cc.dbf.
COPY TO work.
IF ERRORLEVEL () = 0.
USE.
DELETE FILE cc.dbf.
RENAME work. dbf TO cc.dbf.
ENDIF.
USE dd // ущільнення файла dd.dbf.
COPY TO work.
IF ERRORLEVEL () = 0.
USE.
DELETE FILE dd.dbf.
RENAME work. dbf TO dd.dbf.
ENDIF.
CLOSE ALL.
r_scr ().
RETURN NIL.
4) в.п. видачі інформації про клавішах, куди реагує система «Help»:
PROCEDURE hlp (callpnt, prm).
LOCAL retcol, crow, ccol.
IF prm = NIL.
prm := .F.
ENDIF.
crow = ROW ().
ccol = COL ().
retcol = SETCOLOR («w/n »).
@ 22,0 CLEAR TO 24,79.
IF callpnt = «GET «.
// виправлений HLP для GET 26.09.96.
@ 22,0 SAY «Enter/ «+ CHR (24) + «/ «+ CHR (25) + «/PgUp/PgDn » ;
+ «-Завершити редагування зі збереженням зміненого значення «.
@ 22,0 SAY «Enter/ «+ CHR (24) + «/ «+ CHR (25) + «/PgUp/PgDn «COLOR «r+/n «.
@ 23,1 SAY CHR (26) + «/ «+ CHR (27) + «/ ^ «+ CHR (26) ;
+ «/ ^ «+ CHR (27) + «/ Home / End — Переміщення курсору «.
@ 23,1 SAY CHR (26) + «/ «+ CHR (27) + «/ ^ «+ CHR (26) ;
+ «/ ^ «+ CHR (27) + «/ Home / End «COLOR «r+/n «.
@ 24,1 SAY «Esc — Скасувати редагування » ;
+ «(без збереження зміненого значення) «.
@ 24,1 SAY «Esc «COLOR «r+/n «.
ENDIF.
IF callpnt= «AAED » .OR. callpnt= «BBED «.
SET COLOR TO («w/n »).
@ 22,1 SAY chr (24) + «/ «+ chr (25) + «/ «+ CHR (26) + «/ «;
+ CHR (27) + «/ ^ «+ CHR (26) + «PgUp / PgDn » ;
+ «/ ^ «+ CHR (27) + «/ Home / End — Переміщення курсору «.
@ 24,0 SAY «Enter — Редагування «.
@ 23,23 TO 24,23 DOUBLE.
@ 23,25 SAY «Esc — Повернення на крок тому «COLOR «w/n «.
@ 23,25 SAY «Esc «COLOR «r+/n «.
@ 23,54 TO 24,54 DOUBLE.
@ 23,55 SAY «F8 — Видалити рядок «.
@ 24,55 SAY «F3 — Вставити рядок «.
SET COLOR TO («r+/n »).
@ 22,1 SAY chr (24) + «/ «+ chr (25) + «/ «+ CHR (26) + «/ «;
+ CHR (27) + «/ ^ «+ CHR (26) + «PgUp / PgDn » ;
+ «/ ^ «+ CHR (27) + «/ Home / End «.
@ 24,0 SAY «Enter «.
@ 23,55 SAY «F8 «.
@ 24,55 SAY «F3 «.
ENDIF.
IF callpnt= «CCED » .OR. callpnt= «DDED «.
SET COLOR TO («w/n »).
@ 22,1 SAY chr (24) + «/ «+ chr (25) + «/ «+ CHR (26) + «/ «;
+ CHR (27) + «/ ^ «+ CHR (26) + «PgUp / PgDn » ;
+ «/ ^ «+ CHR (27) + «/ Home / End — Переміщення курсору «.
@ 24,0 SAY «Enter — Редагування «.
@ 23,23 TO 24,23 DOUBLE.
@ 23,25 SAY «Esc — Повернення на крок тому «COLOR «w/n «.
@ 23,25 SAY «Esc «COLOR «r+/n «.
@ 24,25 SAY «^Enter — Вибір значення «COLOR «w/n «.
@ 24,25 SAY «^Enter «COLOR «r+/n «.
@ 23,54 TO 24,54 DOUBLE.
@ 23,55 SAY «F8 — Видалити рядок «.
@ 24,55 SAY «F3 — Вставити рядок «.
SET COLOR TO («r+/n »).
@ 22,1 SAY chr (24) + «/ «+ chr (25) + «/ «+ CHR (26) + «/ «;
+ CHR (27) + «/ ^ «+ CHR (26) + «PgUp / PgDn » ;
+ «/ ^ «+ CHR (27) + «/ Home / End «.
@ 24,0 SAY «Enter «.
@ 23,55 SAY «F8 «.
@ 24,55 SAY «F3 «.
ENDIF.
SET COLOR TO (retcol).
SETPOS (crow, ccol).
RETURN.
5) в.п. виявлення всіх випадків перевищення нормативних інтервалів між.
профилактиками, виведення в вивідний файл «DD», і навіть видачі відомості на.
принтер:
func vedom.
local tinvnom, sitog, tdata, tidzap, tidst, idpop.
set printer on.
select dd.
zap.
lin:=space (17)+ «Таблиця порушення норм техобслуговування: «.
? lin.
select bb.
set relat to bb->invnom into cc.
set relat to cc->idst into aa additive.
go top.
sitog:=0.
do while .not. eof ().
tinvnom:=bb->invnom.
tdata:=bb->dateprof.
tidzap:=bb->idzap.
tidst:=cc->idst.
skip.
if (bb->invnom=tinvnom).and.(bb->dateprof-tdata>aa->norma).
select dd.
append blank.
replace dd->invnom with tinvnom.
replace dd->fkdn with bb->dateprof-tdata.
replace dd->norma with aa->norma.
replace dd->idzappp with tidzap.
replace dd->idzapsp with bb->idzap.
sitog:=sitog+(dd->fkdn-dd->norma).
select bb.
endif.
enddo.
lin:= «+——————————————————————————————————————-+ «.
? lin.
lin:= «¦ Инв.¦ Найменування ¦ Дата ¦ Вигляд предвор. ¦ Дата ¦ вид слід. ¦Просроч.¦ «.
? lin.
lin:= «¦номер¦ типу верстата ¦ ¦ профілактики ¦ ¦ профілактики ¦ днів ¦ «.
? lin.
lin:= «¦——-+———————+————+———————+————+———————+————¦ «.
? lin.
select dd.
set relat to dd->invnom into cc additive.
go top.
do while .not. eof ().
tinvnom:=dd->invnom.
idpop:=dd->idzappp.
lin:= «¦ «+dd->invnom+ «¦ «.
select bb.
go top.
do while .not. eof ().
if (tinvnom=bb->invnom).and.(idpop=bb->idzap).
lin:=lin+aa->namest+ «¦ «+dtoc (bb->dateprof)+ «¦ «+bb->vidprof.
endif.
skip.
enddo.
select dd.
idpop:=dd->idzapsp.
select bb.
go top.
do while .not. eof ().
if (tinvnom=bb->invnom).and.(idpop=bb->idzap).
lin:=lin+ «¦ «+dtoc (bb->dateprof)+ «¦ «+bb->vidprof+ «¦ «.
endif.
skip.
enddo.
select dd.
lin:=lin+str (dd->fkdn-dd->norma, 4)+ «¦ «.
? lin.
skip.
enddo.
lin:= «+——————————————————————————————————————-+ «.
? lin.
set color to w+/b.
lin:= «Усього просроченно днів — «+str (sitog, 5).
? lin.
set printer off.
sound ().
inkey (0).
return nil.
6) в.п. подачі звукового сигналу для сигналізації успішного выполнения.
поставленого завдання:
func sound.
tone (300,1).
tone (100,1).
tone (300,1).
tone (100,1).
return nil.
7) в.п. збереження зкрана:
FUNC s_scr (t, l, b, r).
IF t = NIL.
t := 0.
ENDIF.
IF l = NIL.
l := 0.
ENDIF.
IF b = NIL.
b := MAXROW ().
ENDIF.
IF r = NIL.
r := MAXCOL ().
ENDIF.
AADD (wind[1], t).
AADD (wind[2], l).
AADD (wind[3], b).
AADD (wind[4], r).
AADD (wind[5], SAVESCREEN (t, l, b, r)).
AADD (pos[1], ROW ()).
AADD (pos[2], COL ()).
AADD (colr, SETCOLOR ()).
AADD (curs, SETCURSOR ()).
RETURN .T.
8) в.п. відновлення зкрана:
FUNC r_scr ().
LOCAL ln.
ln := LEN (wind[1]).
IF ln == 0.
@ 24,0 SAY «Помилка — стік на відновлення параметрів порожній «.
INKEY (0).
@ 24,0.
ENDIF.
RESTSCREEN (wind[1,ln], wind[2,ln], wind[3,ln], wind[4,ln], wind[5,ln]).
ASIZE (wind[1], ln-1).
ASIZE (wind[2], ln-1).
ASIZE (wind[3], ln-1).
ASIZE (wind[4], ln-1).
ASIZE (wind[5], ln-1).
SETPOS (pos[1,ln], pos[2,ln]).
ASIZE (pos[1], ln-1).
ASIZE (pos[2], ln-1).
SETCOLOR (colr[ln]).
ASIZE (colr, ln-1).
SETCURSOR (curs[ln]).
ASIZE (curs, ln-1).
RETURN .T.
9) в.п. визначення — натиснута чи клавіша типового методу, якщо так — то повертає.
блок коду з певним методом, якщо ні - то повертає NIL. Параметр
функції - INKEY-код натиснутої клавиши.
FUNC basemet (cod).
LOCAL ret, ei, i.
LOCAL crsm:={ ;
{K_DOWN, {o o: down () } } ;
{K_UP, {o o: up () } } ;
{K_PGDN, {o o: pagedown () } } ;
{K_PGUP, {o o: pageup () } } ;
{K_CTRL_PGDN, {o o: gobottom () } } ;
{K_CTRL_PGUP, {o o: gotop () } } ;
{K_RIGHT, {o o: right () } } ;
{K_LEFT, {o o: left () } } ;
{K_CTRL_RIGHT, {o o: panright () } } ;
{K_CTRL_LEFT, {o o: panleft () } } ;
{K_END, {o o: end () } } ;
{K_HOME, {o o: home () } } ;
{K_CTRL_END, {o o: panend () } } ;
{K_CTRL_HOME, {o o: panhome () } } }.
і := ASCAN (crsm, {ei cod = ei[1] }).
IF і 0.
ret := crsm[i, 2].
ELSE.
ret := NIL.
ENDIF.
RETURN ret.
10) в.п. перемикання режиму вставка/замена і виду курсора:
PROCEDURE Repl_Ins ().
IF READINSERT ().
READINSERT (.F.).
SETCURSOR (SC_INSERT).
ELSE.
READINSERT (.T.).
SETCURSOR (SC_NORMAL).
ENDIF.
RETURN.
11) в.п. переведення гривень у верхній регістр латиниці і кириллицы:
FUNC UpperC (prm).
LOCAL n, і, smb, cs.
n := LEN (prm).
FOR і = 1 TO n.
smb := SUBSTR (prm, і, 1).
cs := ASC (smb).
DO CASE.
CASE cs >= 97 .AND. cs.
cs := cs — 32.
prm := STUFF (prm, і, 1, CHR (cs)).
CASE cs >= 160 .AND. cs.
cs := cs — 32.
prm := STUFF (prm, і, 1, CHR (cs)).
CASE cs >= 224 .AND. cs.
cs := cs — 80.
prm := STUFF (prm, і, 1, CHR (cs)).
ENDCASE.
NEXT.
RETURN prm.
12) в.п. виходу з завдання зі збереженням всієї необхідної інформації - реакція на клавішу.
F10:
PROCEDURE fquit ().
LOCAL reply.
reply := ALERT («Зберегти всі внесені зміни та продовжити; «;
+ «роботи з Базою даних — тобто. зробити проміжний SAVE чи; «;
+ «Завершити роботи з базою даних із збереженням всіх змін; «;
{ «Зберегти та продовжити », «Завершити роботу «}).
IF (reply = 1) .OR. (reply = 0).
DBCOMMITALL ().
ELSE.
QUIT.
ENDIF.
RETURN.
13) в.п. виведення повідомлення на екран із наперед заданими координатами і цветом:
PROCEDURE msgs (x, y, m, color).
LOCAL ml, c.
IF m = NIL.
RETURN.
ENDIF.
ml=LEN (m).
IF ml=0 && .OR. ml > 80.
RETURN.
ENDIF.
IF x=NIL // Центр по X.
x := (80-ml)/2.
ENDIF.
IF y=NIL // Центр по Y.
y := 24/2 — 1.
ENDIF.
IF color NIL.
з := SETCOLOR (color).
@ y, x SAY m.
SETCOLOR©.
ELSE.
@ y, x SAY m.
ENDIF.
RETURN.
14) в.п. створення TBrowse-объекта для просмотра-редактирования.
файла aa. dbf з вікна t, l, b, r :
FUNCTION aaCr (t, l, b, r).
LOCAL brws, coln, cblk, chdr.
brws := TBrowseDb (t, l, b, r).
cblk := { «» + aa->idst }.
chdr := «Идент. типу верстата «.
coln := TBColumnNew (chdr, cblk).
coln:width := 19.
brws:AddColumn (coln).
cblk := { «» + aa->namest}.
chdr := «Найменування типу верстата «.
coln := TBColumnNew (chdr, cblk).
coln:width := 35.
brws:AddColumn (coln).
cblk := { STR (aa->norma, 7) }.
chdr := «Норма, дней «.
coln := TBColumnNew (chdr, cblk).
coln:width := 12.
brws:AddColumn (coln).
brws:colsep := CHR (186).
brws:headsep := CHR (205).
brws:colorspec := «w+/b, gr+/rb «.
RETURN brws.
15) в.п. перегляду файла aa. dbf з обробкою нажимаемых клавіш і викликом.
відповідних методів чи користувальних функций:
FUNCTION aaEd (brws).
LOCAL ret_fl, sel, otb, w.
LOCAL cc, rr, nrc:=0,i.
LOCAL ret:=NIL.
LOCAL t := brws: nTop, l := brws: nLeft, b := brws: nBottom, r := brws: nRight.
LOCAL t_ := 5, l_ := 6, b_ := 15, r_ := 74.
s_scr ().
s_r_s ().
SETCOLOR («N/W »).
CLS.
SETCOLOR («gr+/b, w+/gr »).
hlp («AAED »).
SELECT aa.
SET ORDER TO 2.
@ t-2, l-1 CLEAR TO b+2, r+1.
@ b+1, l TO b+1, r.
ret_fl := .F.
DO WHILE .NOT. ret_fl.
** оптимизированная з допомогою буфера клавіатури стабилизация.
DO WHILE (NEXTKEY () == 0) .AND. (.NOT. brws: stabilize ()).
ENDDO.
IF (NEXTKEY () == 0) .AND. (RECNO () nrc).
nrc := RECNO ().
rr := ROW ().
cc := COL ().
SETCOLOR («bg+/b »).
@ t-2, l+1 SAY «Нормативи профілактики устаткування: «.
@ b+2, l+1 SAY «Тип верстата: «.
@ b+2, COL ()+1 SAY aa->namest COLOR «w+/b «.
SETPOS (rr, cc).
ENDIF.
SETCOLOR («gr+/rb »).
** очікуємо натискання клавиши.
nkey := Inkey (0).
// якщо натиснута клавіша типового методу — викличемо его.
blk := basemet (nKey).
IF blk NIL.
EVAL (blk, brws).
ELSE.
DO CASE.
CASE (bHotkey := SETKEY (nKey)) NIL.
EVAL (bHotkey, PROCNAME (), PROCLINE (), READVAR ()).
CASE (nKey = K_F8).
DELETE.
// потрогаем файловий покажчик, если.
// возвращаетя EOF () — .T. після Down-Up,.
// отже файл пуст.
SKIP.
SKIP -1.
IF RECNO () = RECCOUNT ()+1.
ret_fl := .T. // завершення просмотра.
ENDIF.
brws:RefreshAll ().
nrc := 0.
CASE nKey = K_ESC.
ret_fl := .T. // завершення просмотра.
CASE (nKey = K_ENTER).
// Редагування поточного елемента данных.
aaGet (brws ;
«Редагування файла aa. dbf »).
nrc := 0 // оновити верхню строку.
CASE nKey == K_F3.
APPEND BLANK.
brws:RefreshAll ().
ENDCASE.
ENDIF.
ENDDO.
SET RELAT TO.
s_r_s (.T.).
r_scr ().
RETURN ret.
16) в.п. виконання GET в поточної колонці файла aa. dbf:
PROCEDURE aaGet (brws, z0).
LOCAL r, з, w, w2, otb.
LOCAL retcurs, retexit // форма курсору і режим виходу з READ.
LOCAL retins, retcol // режим вставка-замена в READ.
LOCAL indch := .F. // прапор змін значень полів, вхідних в.
// индекснове вираз (тоді доведеться REFRESHALL (),.
// а чи не REFRESHCURRENT ()).
LOCAL col.
r := ROW ().
з := COL ().
// Перевірка відновлення екрана, коректності бази й т.д.
ForceStable (brws).
// Установка клавіш Up-Arrow і Down-Arrow як клавіш виходу из.
// команди READ.
retexit := READEXIT (.T.).
// Установка клавіші INS для переключения.
// режиму вставка/замена.
// і одержувачів відповідного зміни виду курсора.
retins := SetKey (K_INS, { Repl_Ins ()}).
// еквівалентно Set Key K_INS To Procedure Repl_Ins.
// Установка виду курсору за поточного стану режима.
retcurs := SetCursor (IF (ReadInsert (), SC_NORMAL, SC_INSERT)).
s_scr ().
retcol := SETCOLOR («w+/g »).
@ brws: nTop-3,0.
@ brws: nTop-3,0 SAY z0.
hlp («GET »).
SETCOLOR («gr+/n, w+/g »).
indch := .F.
DO CASE.
CASE brws: colpos = 1.
w := aa->idst.
@ r, c+2 GET w.
READ.
IF .NOT.(LASTKEY () = K_ESC).OR.(aa->idst == w).
REPLACE aa->idst WITH w.
indch := .T.
ENDIF.
CASE brws: colpos = 2.
n := aa->namest.
@ r, c+2 GET n.
READ.
IF .NOT.(LASTKEY () = K_ESC).OR.(aa->namest == n).
REPLACE aa->namest WITH n.
ENDIF.
CASE brws: colpos = 3.
w := aa->norma.
@ r, c+1 GET w.
READ.
IF .NOT.((LASTKEY () = K_ESC) .OR. (aa->norma = w)).
REPLACE aa->norma WITH w.
ENDIF.
ENDCASE.
SETCOLOR (retcol).
r_scr ().
SETPOS (r, c).
IF indch.
brws:RefreshAll ().
ELSE.
brws:RefreshCurrent () // Забезпечити перемальовування поточної строки,.
ENDIF // оскільки змінювався елемент данных.
// Відновлення форми курсору та режиму виходу з READ по стрелкам.
// і складні процедури по клавіші K_INS.
SetCursor (retcurs).
READEXIT (retexit).
SetKey (K_INS, retIns).
// Перевірка вимоги звільнення з поточної записи після GET.
nKey := LASTKEY ().
IF nKey == K_UP .OR. nKey == K_DOWN .OR. ;
nKey == K_PGUP .OR. nKey == K_PGDN.
// управління курсором — перехід в іншу записи.
KEYBOARD (CHR (nKey)).
ENDIF.
RETURN.