|
|
|
| Access 2003.
Есь база в виде простой таблицы c полями : [слово], [перевод],[гематрия]
[слово] - текстовое поле содержащее слово на иврите.
[перевод] - ясно, русский перевод
[гематрия] - это целочисленное поле которое должно содержать гематрическое значение слова и вычислятся само. Сначало =0.
Вычисляется следующим образом:
1. Берем 1 букву из слова в поле [слово]
2. Откудато из массива или другой таблички (да хоть как) берем число соответвующее этой букве.
3. Прибавляем это число к полю [гематрия]
повторяем пункты 1-3 пока не дойдем до конца слова.
типа
О -12
Т -23
С -4
Й-11
тогда
ОТСТОЙ = 12+23+4+23+12+11 = 85- вот сумму эту и надо запихать в поле [гематрия]
Я тут на сайте нашел похожие макросы, например подчет длины слова или перевертывание его по буквам задом наперед. Думаю смог бы из них сделать нужный мне, но я не понимаю как мне повесить оный макрос на поле [гематрия]
Спасибо | |
|
| |
|
|
|
| здесь на форуме где-то были примеры транслитерации - приведение букв одного алфавита к другому - поищите
ваша задача решается примерно таким образом
(если нет специальной функции формирования числа по букве) | |
|
| |
|
|
|
| я в акцесе ламер полный но с макросами на ВБ чо нить напишу, мне вот другое -
вот открываю я свою таблицу-словарик в режиме конструктора и тупо сочиняю запрос
типа gematria: Len([слово]) - пусь вычисляет хотябы длину слова. Таки Аксес создает отдельную табличку и и там мне показывает результаты! А мне надо чтоб он пихал результаты МОЮ таблицу в поле gematria! | |
|
| |
|
|
|
| Текст запроса:
UPDATE Имя_Таблицы SET gematria=Len([слово]); | |
|
| |
|
|
|
| Вот спасибо! Работат!
Далее. Предположим я написал фнукцию подсчета чего мне надо, например SubG(слово As String) которая возвращает целое число.
Как мне ее использовать? Так же?
UPDATE Имя_Таблицы SET gematria=SubG([слово]); | |
|
| |
|
|
|
| Ага. А самому попробовать - не быстрее будет, чем ожидать ответа на форуме? | |
|
| |
|
|
|
| Я одновременно пробую.
Итак запрос уже с моей функцией: UPDATE GeneralRus SET gematria = CalcGematria([original]);
сама функция:
Public Function CalcGematria(orig As String)
gg As Integer
gg = Len(orig)
CalcGematria = gg
End Function
Запускаю запрос а мне говорят "Неопределенная функция CalcGematria в выражении" :(( | |
|
| |
|
|
|
| Public Function CalcGematria(orig As String) As Integer
gg As Integer
gg = Len(orig)
CalcGematria = gg
End Function | |
|
| |
|
|
|
| ТОже не работает. Собщает ту же ошибку | |
|
| |
|
|
|
| А где эта функция у вас располагается? | |
|
| |
|
|
|
| В разделе "МОДУЛИ" или если влезть в редактор ВБ то Modules | |
|
| |
|
|
|
| Public Function CalcGematria(orig As String) As Integer
CalcGematria = Len(orig)
End Function
Эта функция у меня нормально отрабатывает.
и еще переменные объявляются с помощью ключевого слова dim. У вас этого нет. | |
|
| |
|
|
|
|
|
| Насколько я понял задачу, нужно слово преобразовывать в массив символов, затем в цикле перебирать элементы массива и присваивать соответствующие значения символам из таблицы. Присвоение тоже должно происходить в массиве. После элементы числового массива суммируются.
В принципе, ничего сложного нет. | |
|
| |
|
|
|
| Вот-вот. Можно вообще использовать три таблицы:
1. Это таблица со совами и переводом,
2. Таблица букв связанная с первой таблицей, т.е. в этой таблице слово разбивается по буквам при вводе в первую таблицу - это задача интерфейса.
3. Справочная таблица, т. н. весов - буква и соответствующее ей числовое значение.
Таким образом, вычислить гематрию - дело одного запроса!
Весь код - это только при добавлении слова в первую таблицу сделать столько добавлений во вторую, сколько букв оно содержит. | |
|
| |
|
|
|
| При добавлении да. Но у меня уже база словаря есть, надо посчитать везде гематрию, для начала (1).
Сейчас я сделал таблицу где веса букв (3) ога
У меня все та же проблема что и раньше. Тупо пищу запрос и тупо нажимаю его мышкой
UPDATE GeneralRus SET gematria = CalcGematria([original]); - не работает!!!! Неопределенная функция в выражении!!!
UPDATE GeneralRus SET gematria = Len([original]); - работает
всякие dim, public я поставил в текст функции для правильности. 2 день уже не понимаю чо ей надо! | |
|
| |
|
|
|
| Кажетсо заработало. Вывод - модуль и функция не должны назваться одинаково. Ну кто ж знал то!! | |
|
| |
|
|
|
|
| Ладно, раз пошла такая пьянка спрошу еще последний вопрос.
Есть такое
varX = DLookup(.................)
If varX = Null Then ничо не делать а выходить из функции
но почемуто когда Null то все равно Аксец матерится и в дебаг меня зовет. Как заткнуть его? | |
|
| |
|
|
|
| ...X = Nz(DLookup(.................))
variant при этом не надо, тип переменной может быть соответствующий типу поля таблицы.
или IsNull(varX) ? | |
|
| |
|
23 Кб. |
|
| Всем спасибо! На всякий случай присобачил к собщению результат труда. Только база слов там всего 100. Ради малого размера. Как только разберусь с повторами в базе - выложу полную версию. | |
|
| |
|
|
|
| Хотел выложить полную версию на этот замечательный сайт но низнаю как.
посему даю ссылку Gematricon1 (copy 2).zip
База - 28 тысяч слов
Спасибо кто мне помогал здесь | |
|
| |