|
|
|
| Имеется таблица - хранения параметров.
Столбцы таблицы:
ID_PARAMETR VALUE_PARAMETR
Значения столбцов:
FIRMA_NAME "Наша фирма"
FIRMA_ADRES "Главная улица, дом№1"
FIRMA_TELEPHON "876-345-234-23"
------------------------------------------------------------
В программе имеются Одноимённые переменные
Public FIRMA_NAME as string
Public FIRMA_ADRES as string
Public FIRMA_TELEPHON as string
-------------------------------------------------------------
Вопрос:
Как создать функцию, которая пробегая по таблице, находя там имя параметра, присваивала одноимённой переменной значение из второго столбца(VALUE_PARAMETR ) этой таблицы.
При отсутствии в программе одноимённой переменной вывести сообщение типа: "Параметр без переменной." | |
|
| |
|
|
|
|
| создай массив имен переменных - и беги по нему - находишь совпадение Case выбираешь нужный тебе вариант
должно срабатать или тыхочеь типа &rs.name = rs.Value
( & - в клиппере так можно было, оно брало значение rs.name и делало из него переменную, которой и присваивало значение как в VB хз или забыл) | |
|
| |
|
|
|
| Можно использовать коллекцию
Public Function mecol() As Collection
Dim col As New Collection
col.Add "FIRMA_NAME"
col.Add "FIRMA_ADRES"
Set mecol = col
End Function
Private Sub tstmecol()
Dim col2 As New Collection
Set col2 = mecol
Dim s
For Each s In col2
Debug.Print s
Next
End Sub
|
Как применить, думаю, сообразишь.
Пробегая по таблице проверяем вхождение в значение поля элемента коллекции и т.п.
Впрочем вариант с массивом то же самое.
Хотя, кажется глупость получилась Все равно потом проверять select case-ом.
Погорячился я.... | |
|
| |
|
|
|
|
или тыхочеь типа &rs.name = rs.Value
( & - в клиппере так можно было, оно брало значение rs.name и делало из него переменную, которой и присваивало значение как в VB )
|
типа того. | |
|
| |
|
|
|
| может быть я не все понял, а просто поизголяться dlookup'ом нельзя? | |
|
| |
|
|
|
| Вот так в лоб реализовать не получится. А вот с помощью «маневрирования» можно очень даже неплохие способы найти.
Способ 1. С использованием класса
Создаем класс КлассПараметров
Option Compare Database
Option Explicit
Private strFIRMA_NAME As String
Private strFIRMA_ADRES As String
Public Property Get FIRMA_NAME() As String
FIRMA_NAME = strFIRMA_NAME
End Property
Public Property Let FIRMA_NAME(ByVal vNewValue As String)
strFIRMA_NAME = vNewValue
End Property
'=========
Public Property Get FIRMA_ADRES() As String
FIRMA_ADRES = strFIRMA_ADRES
End Property
Public Property Let FIRMA_ADRES(ByVal vNewValue As String)
strFIRMA_ADRES = vNewValue
End Property
|
Заполнять теперь будем таким образом.
Public ПараметрыКонтрагента As New КлассПараметров
CallByName ПараметрыКонтрагента, "FIRMA_ADRES", VbLet, "ЗначениеАдрес"
CallByName ПараметрыКонтрагента, "FIRMA_NAME", VbLet, "ЗначениеИмя"
|
Читаем значения
?ПараметрыКонтрагента.FIRMA_ADRES
ЗначениеАдрес
?ПараметрыКонтрагента.FIRMA_NAME
ЗначениеИмя
|
Очень удобный способ для разработчика, т.к. при таком структурировании надо помнить лишь имя класса, а ограниченный список параметров сам выпадет в контекстное меню.
Можно создавать тематические группы параметров.
Если параметр не существует, то следует ловить ошибку при заполнении
Способ 2 Использование коллекции
Объявление и заполнение
Public КоллекцияПараметров As New Collection
КоллекцияПараметров.Add Item:="АдресФирмы", Key:="FIRMA_ADRES"
КоллекцияПараметров.Add Item:="НаименованиеФирмы", Key:="FIRMA_NAME"
|
Чтение
?КоллекцияПараметров.Item("FIRMA_NAME")
НаименованиеФирмы
?КоллекцияПараметров.Item("FIRMA_ADRES")
АдресФирмы
|
Удобен тем, что список параметров не ограничен, просто ввели в таблице новый параметр, и он автоматом заполнится в коллекцию.
Только при считывании ловим ошибку при обращении к несуществующему ключу | |
|
| |
|
|
|
| Спасибо !!!
Буду изучать......
В лоб значит - НЕТ.
| |
|
| |