|
|
|
|
' Присвоение переменным, значений из таблицы TUNING_TBL
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open " SELECT TUNING_TBL.*" _
& " From TUNING_TBL", GLB_CONNECTION, adOpenKeyset, adLockOptimistic
If rst.RecordCount <> 0 Then
rst.Find "ID = 'Папка_Архивов'", , adSearchForward, 1
GLB_PATCH_ARHIV = rst("STR_PATCH")
rst.Find "ID = 'Папка_Компонентов'", , adSearchForward, 1
GLB_PATCH_COMPONENTS = rst("STR_PATCH")
|
А записи такой нет - не найдено - будет ошибка....
может можно как то узнать - что запись не найдена??? | |
|
| |
|
|
|
| Если запись не найдена, указатель встанет либо в EOF или в BOF, в зависимости от направления поиска.
Проверять на .EOF и .BOF. | |
|
| |
|
|
|
| вот в моём варианте - куда проверку на
eof засунуть
вот так?
rst.Find "ID = 'Папка_Архивов'", , adSearchForward, 1
if rst.eof = false then
GLB_PATCH_ARHIV = rst("STR_PATCH")
end if
|
у мну таких присвоений штук 15 будет.......
загнал их в одну функцию и при вылете по error пишу - чё та не так.....
Но что конкретно????
а вот как иначе.........
может функцию какую смастрячить.??????7
наверное так:
FUN_VERIFICs(str_Criters, str_Vars)
да наверное так..... | |
|
| |
|
|
|
| Так красивше:
rst.Find "ID = 'Папка_Архивов'", , adSearchForward, 1
if Not rst.EOF then
GLB_PATCH_ARHIV = rst("STR_PATCH")
end if
|
у мну таких присвоений штук 15 будет
Может структуру описать, аль класс, чего они (переменные) порознь живут? | |
|
| |
|
|
|
| класс не для нас
Я сколько порывался разобраться с классами и с их экземплярами и с их методами так чё та и не кончил...... | |
|
| |
|
|
|
| Сейчас нарисую простейший пример. | |
|
| |
|
|
|
| Чё....
Думаешь - я пойму?? | |
|
| |
|
16 Кб. |
|
| Да там минимум партизанский, только три свойства.
Смотри функции в общем модуле и модуль класса. | |
|
| |
|
11 Кб. |
|
| Вот чуть иначе: | |
|
| |
|
|
|
| StringProperty = "Мой первый класс" | |
|
| |
|
|
|
| нифига себе.....
выходишь в окно базы , закрываешь форму, а значение свойства - не теряется - до полного выхода из приложения............
Обалдеть - как же так???????77 | |
|
| |
|
|
13 Кб. |
|
|
..выходишь в окно базы ... а значение свойства - не теряется - до полного выхода из приложения
|
Это поведение необходимо для класса, хранящего настройки.
То есть, однажды созданный, он должен висеть в памяти до выхода из приложения (или сброса проекта).
Для этого, в первом варианте, его переменная объявлена публичной на уровне модуля,
во втором варианте, его переменная объявлена статичной на уровне функции, возвращающей
ссылку на экземпляр класса.
Продолжим:
Допустим, нам необходимо контролировать значения, присваиваемые свойствам класса, а
одно свойство вообще нужно только для чтения. Для этого сначала преобразуем публичные переменные
уровня модуля в приватные и напишем процедуры свойств для этих переменных.
Я это сделал с помощью утилиты MZ-Tools 3.0, но можно и ручками: | |
|
| |
|
13 Кб. |
|
| Теперь наложим ограничения на присвоение новых значений свойств,
и посмотрим, работают ли они: | |
|
| |
|
|
|
| Я тожа MZ-Tools_ом юзаюсь
стоп - я пока застрял..........
=======================
Этот урок надо выложить в статьи на этом сайте.... | |
|
| |
|
|
|
| Не надо никуда выкладывать, их, примеров, в учебниках, писаных настоящими специалистами навалом.
Будешь готов свистни в асю, следующая порция готова. | |
|
| |
|
|
22 Кб. |
|
| Продолжим:
Теперь поробуем отследить, что-же происходит и когда в нашем тестовом классе.
Для этого нам потребуется:
1. Добавить в описание нашего класса генерацию событий.
2. Поскольку подписаться на события объекта мы можем только в модуле класса,
переместим для наглядности работу с экземпляром тестового класса в модуль формы.
3. Проверим, а все-ли подписчики событий тестового класса отлавливают эти события.
Для этого реализуем возможность создания в нашей форме новых экземпляров класса нашей
формы (ну что-бы не городить других форм), хотя, в принципе, можно было просто
скопировать тестовую форму и сохранить под разными именами (проверь сам).
Что я сделал:
1. Добавил описания трех событий в тестовый класс.
2. Добавил вызов генерирования трех событий в описание свойства "LongProperty".
3. Создал форму "frmTest", где:
а. Объявил переменную нашего экземпляра класса с подпиской на события.
б. Присвоил ссылку переменной экземпляра класса в Form_Open.
в. Подписался на события нашего экземпляра класса, где описал что делать при отлове события.
г. Добавил пару кнопок для изменения значения свойства "LongProperty" тестового класса.
д. Добавил поле - Лог событий, куда собираю информацию о событиях экземпляра тестового
класса, где последнее событие всегда "сверху".
е. Добавил кнопочку "Новый экземпляр класса формы", что бы проверить, а все-ли подписчики
событий экземпляра тестового класса отлавливают эти события.
Для начала, пощелкай кнопками изменения значения свойства "LongProperty" экземпляра
тестового класса в форме, посмотри логи событий.
Затем создай новый экземпляр класса формы (или 2, или 3), и проверь, что все экземпляры
форм отлавливают события экземпляра тестового класса, при изменениях значения свойства в любой из форм.
Что предлагаю сделать тебе самому:
1. Добавить вызов генерирования событий тестового класса в описание свойства "DateProperty"
класса.(по аналогии)
2. В форме добавить функционал изменения значения свойства "DateProperty" экземпляра
тестового класса.
В результате, ты должен видеть в поле "Лог событий" формы попытки изменений значения
свойства "DateProperty" экземпляра тестового класса. | |
|
| |
|
27 Кб. |
|
| Ну и последнее на сегодня:
Чего то нам не хватает?
Правильно, методов.
Что методы будут делать?
А пусть они сохраняют значения свойств и читают их, причем для каждого пользователя свои.
1. Добавим табличку, где будем хранить значения свойств.
2. Опишем три метода в классе:
а. Save - запись текущих значений свойств
б. SetDefault - сброс значений свойств в значения по умолчанию
в. Reset - сброс значений свойств в последние сохраненные
3. Добавим три кнопки в форму, на Click которых будем вызывать новые методы.
Прим.: смотри изменения в Class_Initialize
Домашнее задание:
1. Описать в модуле класса события:
а. Сохранения значений свойств
б. Сброс в значения по умолчанию
в. Сброс значений свойств в последние сохраненные
2. Научить класс генерировать эти события в нужное время
3. Отловить эти события в форме и отображать в поле Лог событий
4. Научить класс автоматически сохранять текущие значения свойств по окончании работы. | |
|
| |
|
|
|
| Лукас - где ж ты раньше был, целовался с кем
Наконец хоть как-то понял про классы, думаю что примера 1-2 хватит пока за глаза.
Наткнувшись на Property Get - полез в справку - англицкий, полез в инет - во че нашел
http://www.firststeps.ru/vba/vbahelp/vbahelp1.html
может всем извесное, но я первый раз - там более все на нашем, жалко ADOBD нет.
Час - як там поживает Вашя жЯба (рекурсия) ??? | |
|
| |
|
|
|
| Её хорошо........
Мну с ней хреново
конечно можно взять Ваш код и впиндюрить в нужное место..........
но......... | |
|
| |
|
|
|
|
| Проблема в моей тупости.......
Проигрываю код .........
И он коттт, работать не хочет.....
а времени на разбор как то нема
пишу прогу.........
оставил наш первый вариант
без применения закладок.........
он мне понятнее, но ты говоришь - это медленновато...........
---------------------------------------
вот у мну и шильце в заде
не даёт покоя мне
Вдруг проблема та на складе
Вдарит шибко по спине......... | |
|
| |
|
|
|
| Объясните ламеру, для чего классы нужны? | |
|
| |
|
|
|
| "Строительная" аналогия:
Описание класса - это "формочка для изготовления кирпичей".
Экземпляры класса (иначе объекты) - это "кирпичи", сделанные в этой формочке.
Вот из этих "кирпичей" мы пытаемся строить "дом", под названием "программа". | |
|
| |
|
|
|
|
| Я конечно ламер , не спорю. но не да такой же степени. я просто не могу для себя ни как определить в каких случаях оправдано примениение классов. для решения каких задача это можно применять. к сожалению либо я учебники читаю ни так, либо одно из трех. объясните пожалуйста доступным языком. просто если я пойму для решения каких задач это применяется, я смогу понять ваш пример и конечно же потом использовать классы для решения своих задач. кстати спасибо Лукасу за программу по маштобированию времени. очень помог данный пример и я смог адаптировать его под свою задачу. кстати там я так понмаю тоже есть классы, вот пытался в них разобратья и не получилось или мне идти елки рубитЬ? | |
|
| |
|
|
|
|
| аминь | |
|
| |
|
|
|
| Кратко:
1. Генерировать события могут только объекты (экземпляры классов).
Как это делать - есть в примерах.
2. Слушать события других объектов могут только объекты.
Почему собственно нам пришлось в третьем примере переместится в модуль формы.
(Экземпляр формы есть экземпляр класса).
3. По одному описанию класса (модулю класса) можно создать много объектов.
Не зря же я добавил кнопку на форму - "Новый экземпляр класса формы".
Есть еще много чего, но пока не вкурены первые 3 пункта, об этом рано говорить.
Где это применить:
1 и 2: В том же примере с масштабированием шкалы времени, экземпляр класса clsDate генерирует событие
"AfterUpdate", а в описании формы есть подписка на это событие. В результате, когда мы вызываем
методы класса clsDate (AddDay и др.), форма отлавливает это событие и меняет себе источник строк.
3. Например нам необходимо открыть формы-карточки для нескольких записей таблицы. Мы можем:
а. Сохранить несколько одинаковых форм-карточек с разными именами и открывать их для каждой
необходимой записи. Недостатки: много однотипных форм, если придется что-то подправить,
придется править во всех, либо удалять все кроме одной, править ее, потом опять делать копии.
(компилятор с ума сойдет). Мы можем одновременно смотреть столько записей, сколько копий форм заготовили.
б. Создавать новые экземпляры класса единственной формы-карточки и работать с таким количеством записей,
которое нам необходимо. Если нужно будет что-то подправить - править только в одном описании формы.
Где применяются классы в принципе - везде!
Все что видим на экране: главное окно ACCESS, окно базы данных, все формы, все контролы, все отчеты, все таблицы и т.д.,
все окна конструкторов, все окна свойств, окно редактора VBA и прочее и прочее - все это экземпляры классов.
И даже то, что мы не видим, например рекордсеты - тоже экземпляры классов. | |
|
| |
|
|
|
| Спасибо за науку!!!!!!!! | |
|
| |
|
|
|
| спасибо | |
|
| |