Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: продолжаем осваивать Find
 
 автор: час   (19.12.2009 в 17:05)   личное сообщение
 
 



' Присвоение переменным, значений из таблицы 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")




А записи такой нет - не найдено - будет ошибка....

может можно как то узнать - что запись не найдена???

  Ответить  
 
 автор: Lukas   (19.12.2009 в 17:12)   личное сообщение
 
 

Если запись не найдена, указатель встанет либо в EOF или в BOF, в зависимости от направления поиска.
Проверять на .EOF и .BOF.

  Ответить  
 
 автор: час   (19.12.2009 в 18:17)   личное сообщение
 
 

вот в моём варианте - куда проверку на
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)

да наверное так.....

  Ответить  
 
 автор: Lukas   (19.12.2009 в 18:28)   личное сообщение
 
 

Так красивше:

rst.Find "ID = 'Папка_Архивов'", , adSearchForward, 1
if Not rst.EOF then
     GLB_PATCH_ARHIV = rst("STR_PATCH")
end if 



у мну таких присвоений штук 15 будет

Может структуру описать, аль класс, чего они (переменные) порознь живут?

  Ответить  
 
 автор: час   (19.12.2009 в 18:43)   личное сообщение
 
 

класс не для нас
Я сколько порывался разобраться с классами и с их экземплярами и с их методами так чё та и не кончил......

  Ответить  
 
 автор: Lukas   (19.12.2009 в 18:45)   личное сообщение
 
 

Сейчас нарисую простейший пример.

  Ответить  
 
 автор: час   (19.12.2009 в 18:50)   личное сообщение
 
 

Чё....
Думаешь - я пойму??

  Ответить  
 
 автор: Lukas   (19.12.2009 в 19:10)   личное сообщение
16 Кб.
 
 

Да там минимум партизанский, только три свойства.
Смотри функции в общем модуле и модуль класса.

  Ответить  
 
 автор: Lukas   (19.12.2009 в 19:26)   личное сообщение
11 Кб.
 
 

Вот чуть иначе:

  Ответить  
 
 автор: час   (20.12.2009 в 10:22)   личное сообщение
 
 

StringProperty = "Мой первый класс"

  Ответить  
 
 автор: час   (20.12.2009 в 10:31)   личное сообщение
 
 

нифига себе.....
выходишь в окно базы , закрываешь форму, а значение свойства - не теряется - до полного выхода из приложения............
Обалдеть - как же так???????77

  Ответить  
 
 автор: час   (20.12.2009 в 10:34)   личное сообщение
 
 


Public Function funGetMyClsTest() As clsTest
    Static objTest As New clsTest 'объявим статичную переменную экземпляра класса
    
    Set funGetMyClsTest = objTest 'вернем ссылку на экземпляр класса
End Function

Public Function funGetClsTestProperty()
    With funGetMyClsTest()
        'Посмотрим свойства
        Debug.Print .StringProperty, .LongProperty, .DateProperty
    End With
End Function



ну ниХР себе.....

ФУНКЦИЯ_ ОБЪЕКТ_ЭКЗЕМПЛЯР

ДАААААААААААА ОФИГЕТЬ блинннннннннн

Ну ты изворотлив........
Хотя конечно примеры идентичны - по результату работы, но второй вариант - просто показатель изощрённого программирования....

  Ответить  
 
 автор: Lukas   (20.12.2009 в 11:37)   личное сообщение
13 Кб.
 
 


..выходишь в окно базы ... а значение свойства - не теряется - до полного выхода из приложения


Это поведение необходимо для класса, хранящего настройки.
То есть, однажды созданный, он должен висеть в памяти до выхода из приложения (или сброса проекта).
Для этого, в первом варианте, его переменная объявлена публичной на уровне модуля,
во втором варианте, его переменная объявлена статичной на уровне функции, возвращающей
ссылку на экземпляр класса.

Продолжим:
Допустим, нам необходимо контролировать значения, присваиваемые свойствам класса, а
одно свойство вообще нужно только для чтения. Для этого сначала преобразуем публичные переменные
уровня модуля в приватные и напишем процедуры свойств для этих переменных.
Я это сделал с помощью утилиты MZ-Tools 3.0, но можно и ручками:

  Ответить  
 
 автор: Lukas   (20.12.2009 в 13:18)   личное сообщение
13 Кб.
 
 

Теперь наложим ограничения на присвоение новых значений свойств,
и посмотрим, работают ли они:

  Ответить  
 
 автор: час   (20.12.2009 в 13:52)   личное сообщение
 
 

Я тожа MZ-Tools_ом юзаюсь
стоп - я пока застрял..........
=======================
Этот урок надо выложить в статьи на этом сайте....

  Ответить  
 
 автор: Lukas   (20.12.2009 в 14:55)   личное сообщение
 
 

Не надо никуда выкладывать, их, примеров, в учебниках, писаных настоящими специалистами навалом.
Будешь готов свистни в асю, следующая порция готова.

  Ответить  
 
 автор: час   (20.12.2009 в 15:04)   личное сообщение
 
 

  Ответить  
 
 автор: Lukas   (20.12.2009 в 18:16)   личное сообщение
22 Кб.
 
 

Продолжим:

Теперь поробуем отследить, что-же происходит и когда в нашем тестовом классе.
Для этого нам потребуется:
1. Добавить в описание нашего класса генерацию событий.
2. Поскольку подписаться на события объекта мы можем только в модуле класса,
переместим для наглядности работу с экземпляром тестового класса в модуль формы.
3. Проверим, а все-ли подписчики событий тестового класса отлавливают эти события.
Для этого реализуем возможность создания в нашей форме новых экземпляров класса нашей
формы (ну что-бы не городить других форм), хотя, в принципе, можно было просто
скопировать тестовую форму и сохранить под разными именами (проверь сам).

Что я сделал:
1. Добавил описания трех событий в тестовый класс.
2. Добавил вызов генерирования трех событий в описание свойства "LongProperty".
3. Создал форму "frmTest", где:
а. Объявил переменную нашего экземпляра класса с подпиской на события.
б. Присвоил ссылку переменной экземпляра класса в Form_Open.
в. Подписался на события нашего экземпляра класса, где описал что делать при отлове события.
г. Добавил пару кнопок для изменения значения свойства "LongProperty" тестового класса.
д. Добавил поле - Лог событий, куда собираю информацию о событиях экземпляра тестового
класса, где последнее событие всегда "сверху".
е. Добавил кнопочку "Новый экземпляр класса формы", что бы проверить, а все-ли подписчики
событий экземпляра тестового класса отлавливают эти события.

Для начала, пощелкай кнопками изменения значения свойства "LongProperty" экземпляра
тестового класса в форме, посмотри логи событий.
Затем создай новый экземпляр класса формы (или 2, или 3), и проверь, что все экземпляры
форм отлавливают события экземпляра тестового класса, при изменениях значения свойства в любой из форм.

Что предлагаю сделать тебе самому:
1. Добавить вызов генерирования событий тестового класса в описание свойства "DateProperty"
класса.(по аналогии)
2. В форме добавить функционал изменения значения свойства "DateProperty" экземпляра
тестового класса.
В результате, ты должен видеть в поле "Лог событий" формы попытки изменений значения
свойства "DateProperty" экземпляра тестового класса.

  Ответить  
 
 автор: Lukas   (21.12.2009 в 00:02)   личное сообщение
27 Кб.
 
 

Ну и последнее на сегодня:
Чего то нам не хватает?
Правильно, методов.
Что методы будут делать?
А пусть они сохраняют значения свойств и читают их, причем для каждого пользователя свои.

1. Добавим табличку, где будем хранить значения свойств.
2. Опишем три метода в классе:
а. Save - запись текущих значений свойств
б. SetDefault - сброс значений свойств в значения по умолчанию
в. Reset - сброс значений свойств в последние сохраненные
3. Добавим три кнопки в форму, на Click которых будем вызывать новые методы.
Прим.: смотри изменения в Class_Initialize

Домашнее задание:
1. Описать в модуле класса события:
а. Сохранения значений свойств
б. Сброс в значения по умолчанию
в. Сброс значений свойств в последние сохраненные
2. Научить класс генерировать эти события в нужное время
3. Отловить эти события в форме и отображать в поле Лог событий
4. Научить класс автоматически сохранять текущие значения свойств по окончании работы.

  Ответить  
 
 автор: kot_k_k   (21.12.2009 в 09:58)   личное сообщение
 
 

Лукас - где ж ты раньше был, целовался с кем
Наконец хоть как-то понял про классы, думаю что примера 1-2 хватит пока за глаза.
Наткнувшись на Property Get - полез в справку - англицкий, полез в инет - во че нашел

http://www.firststeps.ru/vba/vbahelp/vbahelp1.html

может всем извесное, но я первый раз - там более все на нашем, жалко ADOBD нет.


Час - як там поживает Вашя жЯба (рекурсия) ???

  Ответить  
 
 автор: час   (21.12.2009 в 13:44)   личное сообщение
 
 

Её хорошо........
Мну с ней хреново
конечно можно взять Ваш код и впиндюрить в нужное место..........
но.........

  Ответить  
 
 автор: kot_k_k   (21.12.2009 в 14:28)   личное сообщение
 
 

а че мешает , там того кода.
а в чем не понимаение?
ставь проблему на стол, разольем - подумаем, в чем загвоздка.

  Ответить  
 
 автор: час   (21.12.2009 в 15:00)   личное сообщение
 
 

Проблема в моей тупости.......
Проигрываю код .........
И он коттт, работать не хочет.....
а времени на разбор как то нема
пишу прогу.........
оставил наш первый вариант
без применения закладок.........
он мне понятнее, но ты говоришь - это медленновато...........
---------------------------------------
вот у мну и шильце в заде
не даёт покоя мне
Вдруг проблема та на складе
Вдарит шибко по спине.........

  Ответить  
 
 автор: Krusz   (21.12.2009 в 16:12)   личное сообщение
 
 

Объясните ламеру, для чего классы нужны?

  Ответить  
 
 автор: Lukas   (21.12.2009 в 16:24)   личное сообщение
 
 

"Строительная" аналогия:
Описание класса - это "формочка для изготовления кирпичей".
Экземпляры класса (иначе объекты) - это "кирпичи", сделанные в этой формочке.
Вот из этих "кирпичей" мы пытаемся строить "дом", под названием "программа".

  Ответить  
 
 автор: час   (21.12.2009 в 17:14)   личное сообщение
 
 



И вот мне объясняють как нуна опалубку делать - а у меня всё питарды получаются........

  Ответить  
 
 автор: Krusz   (22.12.2009 в 09:40)   личное сообщение
 
 

Я конечно ламер , не спорю. но не да такой же степени. я просто не могу для себя ни как определить в каких случаях оправдано примениение классов. для решения каких задача это можно применять. к сожалению либо я учебники читаю ни так, либо одно из трех. объясните пожалуйста доступным языком. просто если я пойму для решения каких задач это применяется, я смогу понять ваш пример и конечно же потом использовать классы для решения своих задач. кстати спасибо Лукасу за программу по маштобированию времени. очень помог данный пример и я смог адаптировать его под свою задачу. кстати там я так понмаю тоже есть классы, вот пытался в них разобратья и не получилось или мне идти елки рубитЬ?

  Ответить  
 
 автор: kot_k_k   (22.12.2009 в 09:54)   личное сообщение
 
 

елки рубить не надо - лес и самогон - наши зеленые друзья!!!

а про классы - Лукас просвети нас, О всемогущий и направь нас на путь истины Аминь

  Ответить  
 
 автор: час   (22.12.2009 в 10:10)   личное сообщение
 
 

аминь

  Ответить  
 
 автор: Lukas   (22.12.2009 в 13:29)   личное сообщение
 
 

Кратко:
1. Генерировать события могут только объекты (экземпляры классов).
Как это делать - есть в примерах.
2. Слушать события других объектов могут только объекты.
Почему собственно нам пришлось в третьем примере переместится в модуль формы.
(Экземпляр формы есть экземпляр класса).
3. По одному описанию класса (модулю класса) можно создать много объектов.
Не зря же я добавил кнопку на форму - "Новый экземпляр класса формы".

Есть еще много чего, но пока не вкурены первые 3 пункта, об этом рано говорить.

Где это применить:
1 и 2: В том же примере с масштабированием шкалы времени, экземпляр класса clsDate генерирует событие
"AfterUpdate", а в описании формы есть подписка на это событие. В результате, когда мы вызываем
методы класса clsDate (AddDay и др.), форма отлавливает это событие и меняет себе источник строк.
3. Например нам необходимо открыть формы-карточки для нескольких записей таблицы. Мы можем:
а. Сохранить несколько одинаковых форм-карточек с разными именами и открывать их для каждой
необходимой записи. Недостатки: много однотипных форм, если придется что-то подправить,
придется править во всех, либо удалять все кроме одной, править ее, потом опять делать копии.
(компилятор с ума сойдет). Мы можем одновременно смотреть столько записей, сколько копий форм заготовили.
б. Создавать новые экземпляры класса единственной формы-карточки и работать с таким количеством записей,
которое нам необходимо. Если нужно будет что-то подправить - править только в одном описании формы.

Где применяются классы в принципе - везде!
Все что видим на экране: главное окно ACCESS, окно базы данных, все формы, все контролы, все отчеты, все таблицы и т.д.,
все окна конструкторов, все окна свойств, окно редактора VBA и прочее и прочее - все это экземпляры классов.
И даже то, что мы не видим, например рекордсеты - тоже экземпляры классов.

  Ответить  
 
 автор: час   (22.12.2009 в 14:20)   личное сообщение
 
 

Спасибо за науку!!!!!!!!

  Ответить  
 
 автор: Krusz   (22.12.2009 в 16:08)   личное сообщение
 
 

спасибо

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList