Анимация
JavaScript
|
Главная Библионтека smn=ASCAN(a view, sman view) cus=ASCAN(a view, cust view) mod=ASCAN(a view, model view) ord=ASCAN(a view, order view) ENDIF IF prm=0 CREATE SQL VIEW propmodel view CONNECTION remote 01 SHARE ; AS SELECT model.key model, model.name model, model.swept volume, ; model.quantity drum, model.capacity, model.torgue, model.top speed, model.starting, ; model.quantity door, model.quantity sead, model.length, model.width, ; model.height, model.expense 90, model.expense 120, model.expense town, ; firm.name firm, country.name country,fuel oil.name fuel oil, ; tyre.name tyre, body.name body ; FROM model ,firm, country, fuel oil, tyre, body ; WHERE model.key firm=firm.key firm ; AND firm.key country=country.key country ; AND model.key fuel oil=fuel oil.key fuel oil ; AND model.key tyre=tyre.key tyre ; AND model.key body=body.key body ENDIF IF lau=0 CREATE SQL VIEW lauto view CONNECTION remote 01 SHARE ; AS SELECT automobile passenger car.key model, automobile passenger car.date issue, ; automobile passenger car.cost, account.selled ; FROM automobile passenger car, account ; WHERE automobile passenger car.key auto=account.key auto ENDIF IF smn=0 CREATE SQL VIEW sman view CONNECTION remote 01 SHARE ; AS SELECT salesman.key salman, ; salesman.last name+ +salesman.first name+ +salesman.patronymic as sman ; FROM salesman ENDIF SELECT * FROM sman view INTO ARRAY Arcombo1 IF cus=0 CREATE SQL VIEW cust view CONNECTION remote 01 SHARE ; AS SELECT customer.key customer, customer.name customer ; FROM customer ENDIF SELECT * FROM cust view INTO ARRAY Arcombo2 IF mod=0 CREATE SQL VIEW model view CONNECTION remote 01 SHARE ; AS SELECT model.key model, model.name model ; FROM model ENDIF SELECT * FROM model view INTO ARRAY Arcombo3 IF ord=0 CREATE SQL VIEW order view CONNECTION remote 01 SHARE ; AS SELECT order .key order, order .key salman, order .key customer, order .key model ; FROM order && Устанавливаем таблицу order обновляемой =DBSETPROP(order view, View, Tables, order ) && Устанавливаем имена для обновления = DBSETPROP(order view.key order, Field, UpdateName, order .key order) =DBSETPROP(order view.key salman, Field, UpdateName, order .key salman) =DBSETPROP(order view.key customer, Field, UpdateName, order .key customer) = DBSETPROP(order view.key model, Field, UpdateName, order .key model) && Задаем простой уникальный ключ на основе одного поля таблицы Order = DBSETPROP(order view.key order, Field, KeyField, .T.) && Задаем обновляемые поля = DBSETPROP(order view.key salman, Field, Updatable, .T.) = DBSETPROP(order view.key customer, Field, Updatable, .T.) = DBSETPROP(order view.key model, Field, Updatable, .T.) && Активизация процесса обновления = DBSETPROP(order view, View, SendUpdates, .T.) && Задаем сравнение временной метки всех полей записи, && расположенной на удаленном источнике данных =DBSETPROP(order view, View, WhereType, 4) ENDIF USE order view =CURSORSETPROP("Buffering", 5) Код для события Unload формы: CLOSE DATABASES ALL CLOSE TABLES ALL Добавим в форму метод Combo init и запишем для него следующий код: nnAddItem="ThisForm.Combo"+ALLT(cNum)+".AddItem" nnArn="Arcombo"+ALLT(cNum) FOR I=1 TO ALEN(&nnArn,1) &nnAddItem(allt(&nnArn(i,2))) ENDFOR Добавим в форму метод Refresh list и запишем для него следующий код: ThisForm.Combo1.Value=((ASCAN(Arcombo1,order view.key salman))+1)/2 ThisForm.Combo2.Value=((ASCAN(Arcombo2,order view.key customer))+1)/2 ThisForm.Combo3.Value=((ASCAN(Arcombo3,order view.key model))+1)/2 Добавим в форму метод Show sav und и запишем для него следующий код: MyUpdate=1 ThisForm.mygo1.Com8.Enabled = .T. ThisForm.mygo1.Com9.Enabled = .T. Для события Click кнопки Propmodel (характеристика модели автомобиля) запишем следующий код: glkey mod=order view.key model DO FORM prop mod.scx Для события Click кнопки Lauto (список автомобилей) запишем следующий код: glkey mod=order view.key model glname mod=ALLT(Arcombo3(ThisForm.Combo3.Value,2)) DO FORM listauto.scx Для события Init всех элементов управления типа Combo Box (Combo1, Combo2 и Combo3) запишем следующий код: cNum=RIGHT(This.Name,1) ThisForm.combo init Для события InteractiveChange элемента управления Combo1 запишем следующий код: REPLACE order view.key salman WITH Arcombo1(ThisForm.Combo1.Value,1) ThisForm.Text2.Refresh ThisForm.Show sav und Для события InteractiveChange элемента управления Combo2 запишем следующий код: REPLACE order view.key customer WITH Arcombo2(ThisForm.Combo2.Value,1) ThisForm.Text3.Refresh ThisForm.Show sav und Для события InteractiveChange элемента управления Combo3 запишем следующий код: REPLACE order view.key model WITH Arcombo3(ThisForm.Combo3.Value,1) ThisForm.Text4. Refres h ThisForm.Show sav und Как видно из кода события Click кнопки lauto, сначала мы определяем значения кода (glkey mod) и наименования (glname mod) выбранной модели для дальнейшей выборки списка автомобилей по данной модели. После чего запускаем форму LISTAUTO (Список автомобилей). Похожая ситуация и с событием Click кнопки propmodel, где мы определяем значение кода (glkey mod) модели и запускаем форму PROP MOD (Характеристика модели автомобиля). Кратко опишем вызываемые формы. Форма LISTAUTO (Список автомобилей). Некоторые формы используют данные из одной или нескольких таблиц. Для включения требуемых таблиц в описание формы выберите команду Data Environment из меню View главного меню Visual FoxPro. Откроется окно Data Environment, напоминающее область просмотра таблиц Конструктора базы данных. Для добавления таблицы следует выбрать команду Add в меню Data Environment, которое добавляется в главное меню Visual FoxPro, или в контекстном меню, появляющемся при нажатии правой кнопки мыши. После этого выберите требуемую таблицу из диалогового окна Add Table or View. Обратите внимание, что можно либо использовать несколько таблиц и определять отношения между ними в самой форме, либо использовать готовые многотабличные представления данных. Для установления отношения между двумя таблицами нажмите на имя поля в главной таблице
JMtiOiHJiTibtB J...T.i.wi.i0.eJrJ!! OcsbD Eiiri" IDdaiit] h lha пати иж1 to idHonc- an Ejbpd n lill; H .2* ЛИ) K>« I i Рис. 9.10. В форме LISTAUTO мы используем данные из представления lauto view, и одним из возможных вариантов решения задачи является включение представления lauto view в окружение формы (Data Environment) вышеизложенным способом. И этот вариант был бы не худшим. Однако мы в своем примере поступаем по-другому. А именно, включаем в событие, имеющее место непосредственно перед созданием формы (Form.Load), запрос к представлению lauto view с выборкой данных по текущей модели, поместив результат запроса в курсор lauto. Подобный вариант приемлем только для просмотра данных. Дело в том, что данные в курсоре редактированию не подлежат. В событие Load формы запишем следующий код: SELECT lauto view.date issue, lauto view.cost, FROM lauto view ; WHERE lauto view.key model=glkey mod ; INTO CURSOR lauto ; lauto view.selled ; Далее, посредством панели инструментов Form Controls, в форму LISTAUTO включаем объект таблицу (Grid). В свойство источника данных (RecordSource), к которому привязан элемент управления Grid, помещаем имя курсора - lauto. После чего форму уже можно запускать на выполнение. И результат будет положительным. Хотя мы думаем, наш читатель вряд ли из тех, кого удовлетворит подобный результат. Дело в том, что заголовки колонок примут значения наименований полей курсора, элемент управления для отображения значений во всех колонках будет текстовым, что не всегда удобно, и т. д. Поэтому мы несколько усовершенствуем данную форму. На вкладке Layout для элемента управления Grid задаем количество объектов Column (свойство ColumnCount = 3), ликвидируем отображение столбца маркеров удаления (свойство DeleteMark = .F.), задаем тип полос прокрутки (свойство ScrollBars = 2 - только вертикальная полоса), задаем высоту заголовков столбцов (свойство HeaderHeight = 25) и высоту строк в элементе управления Grid (свойство RowHeight = 25). На вкладке Data для каждой колонки таблицы Grid.Column задаем источник данных, к которому привязывается объект: Grid.Column1.ControlSours=lauto.date issue и перенесите его в подчиненную таблицу. При этом между таблицами появится линия, как показано на рис. 9.10. Заметим, однако, что для этого необходимо заранее определить соответствующие индексы. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 [ 107 ] 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |