Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: VB в офисе при конвертации 97 -> ХР  (Прочитано 29503 раз)
0 Пользователей и 1 Гость смотрят эту тему.
lexa_b
Гость
« : 14-01-2004 09:49 » 

Народ, подскажите может кто сталкивался...

Сконвертил БД на 97 аксессе под ХР офис. После чего база вроде работает, но не запускаются модули, написанные на VB. Постоянно выводит ошибку и не понимает функцию, написанную в этом модуле. Пробовал построителем формул задать его заново, но без результата.

Может я чего-то не то делаю или в VB какие-то изменения были? Я так понял, что он эту функцию вообще не видит Жаль
Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #1 : 14-01-2004 11:10 » 

В редакторе кода посмотри: Tools\References. Там отмечены ссылки на внешние модули. Устаревшие или точнее не найденные помечаются словом MISSING. Подключи их  (выбери из списка или укажи путь) и все должно заработать...
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
lexa_b
Гость
« Ответ #2 : 14-01-2004 11:43 » 

Что-то я не понял... или не так написал... щас уточню:

Есть в аксессе модули, в одном из них прописано преобразование числа в пропись. Я использую в отчете "=СуммаПрописью( [Поле108] )", т.е. он по идее должен передать мне переведенную сумму. При запуске в 97 аксессе все работает, при конвертации вадает ошибку. Вроде делаю все через редактор формы, должен видеть....  При запуске отчета он выдает, что надо ввести параметр "СуммаПрописью", т.е. как процедуру он не видит этот код.

Function СуммаПрописью(Сумма As Variant) As String
.......
Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #3 : 14-01-2004 12:21 » 

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

Кстати а куда ты пишишь "=СуммаПрописью( [Поле108] )"?
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
lexa_b
Гость
« Ответ #4 : 15-01-2004 03:27 » 

Пишу в том же отчете как данные для поля..
прописал public, не помогает Жаль
А в references чустно говоря не понял что проверять, там 7 первых галочек стоит, а что мне надо - ХЗ... missing нигде нету и не вижу где это может быть прописано...

З.Ы. прописал:
Public Function СуммаПрописью([Поле108] As Long) As String, правильно?
В этом поле рассчитывается сумма с нескольких счетов в этом же отчете.
Записан
lexa_b
Гость
« Ответ #5 : 15-01-2004 03:39 » 

Может где-то declare должно быть?
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 15-01-2004 05:23 » 

Гугается на те места где работаешь с рекордсетами нетакли?

В 97 по умольчанию цепляется библиотека DAO а 2000 и ХР ADO.
Так как модили в акцесе не компилируется а интепритируются имеем
подмену всех рекордсетов.
Строка

Dim rec as recordset

В 97 и ХР создает обектные переменные разного типа.
 Лечится двумя способами

1) прописываешь везде явное обявление переменных с указанием библиотеки

Dim DAO.rec as recordset

(незабудь за цепить джет в референс)
Решает проблему раз и на всегда но придется поработать ручками

 2) заходим в референс отключам АДО отключам ДАО(джет), выходим. заходим снова под ключаем ДАО , пробуем отлаживать ... если все получается так и оставляеем . Если требуется еще и АДО  то подключем и его.
Недостаток в том что из какой библиотеки будет создаваться recordset  определяется порядком их подключения....  
в общем переодически будет слетать .... но зато ничего править не дадо.
Записан

Да да нет нет все остальное от лукавого.
lexa_b
Гость
« Ответ #7 : 15-01-2004 07:36 » 

PSD,
Она вообще не ругается, только функцию эту в упор не видит... требует ввести параметр с именем процедуры

попытался так сделать, как написал, все то же самое.. или че-то не то делаю Жаль
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 15-01-2004 08:27 » 

Код в студию .... а то не понятно про что ты говроишь ....

Я имел ввиду  ситуацию

Dim ss As Recordset
....
ss.Edit 'и как раз  говорит что функция  Edit не определена?
Записан

Да да нет нет все остальное от лукавого.
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #9 : 15-01-2004 09:35 » 

Да, давая свою СуммуПрописью сюда!
Записан
lexa_b
Гость
« Ответ #10 : 16-01-2004 03:58 » 

Option Compare Database   'Использовать порядок сортировки базы данных
Option Explicit

Global Сумма As Currency, Остаток As Currency

Function IsLocked(rs As Recordset, UserName As String, MachineName As String)
' Аргументы:  Набор записей и две строковые переменные
' Определяет, заблокирована ли данная запись и если да,
'             то кто ее заблокировал

   
    Dim ErrorString As String
    Dim MachineNameStart As Integer
   
    IsLocked = False
    On Error GoTo IsLockedError
    rs.Edit                     'Попытка редактировать запись.
    rs.MoveNext
    rs.MovePrevious
    Exit Function               'Ошибки нет, так что возвращается "Ложь".

IsLockedError:
    If Err = 3260 Then          'Запись заблокирована -- разобрать сообщение.
        ErrorString = Error$    'об ошибке.
        UserName = Mid$(ErrorString, 44, InStr(44, ErrorString, "'") - 44)
        MachineNameStart = InStr(43, ErrorString, " на компьютере ") + 13
        MachineName = Mid$(ErrorString, MachineNameStart, Len(ErrorString) - MachineNameStart - 1)
        IsLocked = True
    End If
    Exit Function

................... тут еще всякой всячины куча ................

Public Function СуммаПрописью(СуммаСчета As Long) As String
' Аргументы:  Используются глобальные аргументы
'             Сумма, Остаток и Подпись
' Назначение: Перевод СуммыСчета в строковую константу
' Возвращает: СуммуПрописью

Dim Группа As Currency, Разряд As Long, Длина As Integer
Dim Пропись As String, Копейки As String, Сумма As Long

    Сумма = СуммаСчета
    Остаток = Сумма
   
    Группа = Остаток \ 1000000
    If Группа <> 0 Then
        Разряд = Группа \ 100
        Пропись = Пропись & Сотни(Разряд)
        Остаток = Остаток - Разряд * 100 * 1000000
        Группа = Группа - Разряд * 100

        If Группа > 19 Then
            Разряд = Группа \ 10
            Пропись = Пропись & Десятки(Разряд)
            Остаток = Остаток - Разряд * 10 * 1000000
            Группа = Группа - Разряд * 10
        End If

        Разряд = Группа
        Пропись = Пропись & Единицы(Разряд, "Мужской")
        Остаток = Остаток - Разряд * 1000000

        Пропись = Пропись & Миллионы(Разряд)
    End If

    Группа = Остаток * 100 \ 100000
    If Группа <> 0 Then
        Разряд = Группа \ 100
        Пропись = Пропись & Сотни(Разряд)
        Остаток = Остаток - Разряд * 100 * 1000
        Группа = Группа - Разряд * 100

        If Группа > 19 Then
            Разряд = Группа \ 10
            Пропись = Пропись & Десятки(Разряд)
            Остаток = Остаток - Разряд * 10 * 1000
            Группа = Группа - Разряд * 10
        End If

        Разряд = Группа
        Пропись = Пропись & Единицы(Разряд, "Женский")
        Остаток = Остаток - Разряд * 1000

        Пропись = Пропись & Тысячи(Разряд)
    End If

    Группа = Int(Остаток)
    If Остаток = Группа Then
      Копейки = " руб. 00 коп."
    Else
      Копейки = " руб." & Str(100 * (Остаток - Группа)) & " коп."
    End If
    If Группа <> 0 Then
        Разряд = Группа \ 100
        Пропись = Пропись & Сотни(Разряд)
        Остаток = Остаток - Разряд * 100
        Группа = Группа - Разряд * 100

        If Группа > 19 Then
            Разряд = Группа \ 10
            Пропись = Пропись & Десятки(Разряд)
            Остаток = Остаток - Разряд * 10
            Группа = Группа - Разряд * 10
        End If

        Разряд = Группа
        Пропись = Пропись & Единицы(Разряд, "Мужской")
        Остаток = Остаток - Разряд

    End If

    Пропись = Пропись & Копейки
    Длина = Len(Пропись)
    If IsNull(Длина) Then
       Exit Function
    End If

    Пропись = UCase(Mid(Пропись, 1, 1)) & (Mid(Пропись, 2, Длина))

    СуммаПрописью = Пропись

End Function
--------------------------------------------------------------

В отчете использую присвоение полю значения =СуммаПрописью([Поле10])
Поле10 формируется суммой нескольких полей в этом же отчете...
Записан
lexa_b
Гость
« Ответ #11 : 16-01-2004 04:00 » 

в references выбраны
Visual Basic for application
Microsoft Access 10.0 Object Library utility
OLE Automation
Microsoft Visual Basic for Appication Extensibly 5.3
Microsoft Office XP Web Components
Microsoft DAO 3.6 Object library
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #12 : 16-01-2004 06:15 » 

в процедуре все вроде верно
проверь, существует ли модуль с этой процедурой в базе  после конвертации
и если существует, то, как сказано у кого-то в подписи
"debuging is our last hope"
т.е. пройдись по "F8"
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #13 : 16-01-2004 06:26 » 

если хочешь, то пришли по почте и я посмотрю
у меня тоже офис ХР

если будешь посылать, то посылай 97 версию для пущей надежности
Записан

I Have Nine Lives You Have One Only
THINK!
lexa_b
Гость
« Ответ #14 : 16-01-2004 06:28 » 

HandKot, существует...  я говорю, проблема в том, что тестируешь отдельно модуль - все в норме, но он туде не обращается, не видит эту прогу (если я правильно понял по симптомчикам - спрашивает :"Введите параметр  СуммаПрописью")
Записан
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #15 : 16-01-2004 06:38 » 

lexa_b,  извини, некогда разбираться, я последний день на работе перед сессей. Приеду только в середине февраля.
 :oops:
Я просил прислать прогу с пустыми таблицами для того, чтобы я проверил у себя (тестовые данные я бы сам вбил)...
  Так больше нельзя...
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 16-01-2004 06:38 » 

выложи то место где ты его вызываешь.... может там чтото не так ...
Записан

Да да нет нет все остальное от лукавого.
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #17 : 16-01-2004 06:44 » 

Но, как я вижу, проблемма в области видимости функции... Попробуй ее перенести в новый модуль...
Записан

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #18 : 16-01-2004 06:44 » 

lexa_b, посылай 97 версию обещаю не нарушать авторских прав
честное пионерское  Отлично
Записан

I Have Nine Lives You Have One Only
THINK!
lexa_b
Гость
« Ответ #19 : 16-01-2004 06:55 » 

Dusk, пробовал, не помогает....
HandKot, у тебя ящик 100 метров выдержит? Улыбаюсь
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 16-01-2004 07:44 » new

А с явным указанием  именем модуля не пробовал?
И просто создать тамже пустую функцию и вызвать с нужного места ? причем желательно с латиским названием....
Записан

Да да нет нет все остальное от лукавого.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #21 : 16-01-2004 10:09 » 

lexa_b,
так ведь можно и с пустыми таблицами  Отлично

действительно, попробуй в базе после конверции создать процедуру
хотя бы с MsgBox и проверь отработает или нет
Записан

I Have Nine Lives You Have One Only
THINK!
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 16-01-2004 10:29 » 

С пустой базой и я повозился бы ....
Записан

Да да нет нет все остальное от лукавого.
lexa_b
Гость
« Ответ #23 : 19-01-2004 03:39 » 

PSD, "А с явным указанием именем модуля не пробовал? "
Это как?
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 19-01-2004 07:49 » 

Так
module1.fnMy("Данные")
Записан

Да да нет нет все остальное от лукавого.
lexa_b
Гость
« Ответ #25 : 19-01-2004 08:12 » 

PSD, прописано в модуле "vspom"
пишу vspom.СуммаПрописью(100)
отвечает введите параметр "vspom"
даже параметр заменил на цифру 100 - не помогает

Муть какая-то.... хоть заново переписывай
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #26 : 19-01-2004 08:31 » 

lexa_b, попробуй и правда переименовать название в SummaPropisju например... Может какие-то глюки кодировки?
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 19-01-2004 09:41 » 

1)Дай суда то место где пишешь...
2)создай новый модуль , напши там новую фунциюи попробуй повызывать в  твоем запросе.
3) создай новый модуль , напши там новую фунциюи попробуй повызывать в новом запросе .... сравни результаты
4) если пункут два не прокатит, создай новую базу  и повтори пунк 2....
Записан

Да да нет нет все остальное от лукавого.
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 19-01-2004 09:41 » 

1)Дай суда то место где пишешь...
2)создай новый модуль , напши там новую фунциюи попробуй повызывать в  твоем запросе.
3) создай новый модуль , напши там новую фунциюи попробуй повызывать в новом запросе .... сравни результаты
4) если пункут два не прокатит, создай новую базу  и повтори пунк 3....
Записан

Да да нет нет все остальное от лукавого.
lexa_b
Гость
« Ответ #29 : 19-01-2004 09:42 » 

little, C "англицким произношением" функции заработало, всем спасибо !!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines