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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Как посчитать гематрию слова и записать в поле?
 
 автор: frKiller   (15.01.2009 в 22:46)   личное сообщение
 
 

Access 2003.

Есь база в виде простой таблицы c полями : [слово], [перевод],[гематрия]
[слово] - текстовое поле содержащее слово на иврите.
[перевод] - ясно, русский перевод
[гематрия] - это целочисленное поле которое должно содержать гематрическое значение слова и вычислятся само. Сначало =0.

Вычисляется следующим образом:

1. Берем 1 букву из слова в поле [слово]
2. Откудато из массива или другой таблички (да хоть как) берем число соответвующее этой букве.
3. Прибавляем это число к полю [гематрия]
повторяем пункты 1-3 пока не дойдем до конца слова.

типа
О -12
Т -23
С -4
Й-11

тогда

ОТСТОЙ = 12+23+4+23+12+11 = 85- вот сумму эту и надо запихать в поле [гематрия]

Я тут на сайте нашел похожие макросы, например подчет длины слова или перевертывание его по буквам задом наперед. Думаю смог бы из них сделать нужный мне, но я не понимаю как мне повесить оный макрос на поле [гематрия]
Спасибо

  Ответить  
 
 автор: Explorer   (15.01.2009 в 23:14)   личное сообщение
 
 

здесь на форуме где-то были примеры транслитерации - приведение букв одного алфавита к другому - поищите

ваша задача решается примерно таким образом

(если нет специальной функции формирования числа по букве)

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

я в акцесе ламер полный но с макросами на ВБ чо нить напишу, мне вот другое -
вот открываю я свою таблицу-словарик в режиме конструктора и тупо сочиняю запрос
типа gematria: Len([слово]) - пусь вычисляет хотябы длину слова. Таки Аксес создает отдельную табличку и и там мне показывает результаты! А мне надо чтоб он пихал результаты МОЮ таблицу в поле gematria!

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 11:24)   личное сообщение
 
 

Текст запроса:
UPDATE Имя_Таблицы SET gematria=Len([слово]);

  Ответить  
 
 автор: frKiller   (16.01.2009 в 12:13)   личное сообщение
 
 

Вот спасибо! Работат!

Далее. Предположим я написал фнукцию подсчета чего мне надо, например SubG(слово As String) которая возвращает целое число.
Как мне ее использовать? Так же?

UPDATE Имя_Таблицы SET gematria=SubG([слово]);

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 12:27)   личное сообщение
 
 

Ага. А самому попробовать - не быстрее будет, чем ожидать ответа на форуме?

  Ответить  
 
 автор: frKiller   (16.01.2009 в 12:48)   личное сообщение
 
 

Я одновременно пробую.

Итак запрос уже с моей функцией: UPDATE GeneralRus SET gematria = CalcGematria([original]);

сама функция:
Public Function CalcGematria(orig As String)
gg As Integer
gg = Len(orig)
CalcGematria = gg
End Function

Запускаю запрос а мне говорят "Неопределенная функция CalcGematria в выражении" :((

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 12:51)   личное сообщение
 
 

Public Function CalcGematria(orig As String) As Integer
gg As Integer
gg = Len(orig)
CalcGematria = gg
End Function

  Ответить  
 
 автор: frKiller   (16.01.2009 в 13:31)   личное сообщение
 
 

ТОже не работает. Собщает ту же ошибку

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 15:16)   личное сообщение
 
 

А где эта функция у вас располагается?

  Ответить  
 
 автор: frKiller   (16.01.2009 в 15:42)   личное сообщение
 
 

В разделе "МОДУЛИ" или если влезть в редактор ВБ то Modules

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 16:09)   личное сообщение
 
 

Public Function CalcGematria(orig As String) As Integer
CalcGematria = Len(orig)
End Function

Эта функция у меня нормально отрабатывает.


и еще переменные объявляются с помощью ключевого слова dim. У вас этого нет.

  Ответить  
 
 автор: Кабан   (16.01.2009 в 12:40)   личное сообщение
 
 

да

  Ответить  
 
 автор: Explorer   (16.01.2009 в 21:01)   личное сообщение
 
 

кратко

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 11:19)   личное сообщение
 
 

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

  Ответить  
 
 автор: Denis V.   (16.01.2009 в 13:37)   личное сообщение
 
 

Вот-вот. Можно вообще использовать три таблицы:
1. Это таблица со совами и переводом,
2. Таблица букв связанная с первой таблицей, т.е. в этой таблице слово разбивается по буквам при вводе в первую таблицу - это задача интерфейса.
3. Справочная таблица, т. н. весов - буква и соответствующее ей числовое значение.
Таким образом, вычислить гематрию - дело одного запроса!
Весь код - это только при добавлении слова в первую таблицу сделать столько добавлений во вторую, сколько букв оно содержит.

  Ответить  
 
 автор: frKiller   (17.01.2009 в 15:17)   личное сообщение
 
 

При добавлении да. Но у меня уже база словаря есть, надо посчитать везде гематрию, для начала (1).
Сейчас я сделал таблицу где веса букв (3) ога

У меня все та же проблема что и раньше. Тупо пищу запрос и тупо нажимаю его мышкой
UPDATE GeneralRus SET gematria = CalcGematria([original]); - не работает!!!! Неопределенная функция в выражении!!!

UPDATE GeneralRus SET gematria = Len([original]); - работает

всякие dim, public я поставил в текст функции для правильности. 2 день уже не понимаю чо ей надо!

  Ответить  
 
 автор: frKiller   (17.01.2009 в 15:52)   личное сообщение
 
 

Кажетсо заработало. Вывод - модуль и функция не должны назваться одинаково. Ну кто ж знал то!!

  Ответить  
 
 автор: Lukas   (17.01.2009 в 15:57)   личное сообщение
 
 



Реддик знал: Соглашение Реддика о наименованиях в VBA (7z)

  Ответить  
 
 автор: frKiller   (17.01.2009 в 21:28)   личное сообщение
 
 

Ладно, раз пошла такая пьянка спрошу еще последний вопрос.
Есть такое
varX = DLookup(.................)
If varX = Null Then ничо не делать а выходить из функции

но почемуто когда Null то все равно Аксец матерится и в дебаг меня зовет. Как заткнуть его?

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

...X = Nz(DLookup(.................))
variant при этом не надо, тип переменной может быть соответствующий типу поля таблицы.

или IsNull(varX) ?

  Ответить  
 
 автор: frKiller   (18.01.2009 в 11:39)   личное сообщение
23 Кб.
 
 

Всем спасибо! На всякий случай присобачил к собщению результат труда. Только база слов там всего 100. Ради малого размера. Как только разберусь с повторами в базе - выложу полную версию.

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

Хотел выложить полную версию на этот замечательный сайт но низнаю как.
посему даю ссылку Gematricon1 (copy 2).zip
База - 28 тысяч слов
Спасибо кто мне помогал здесь

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