lexa_b
Гость
|
|
« : 14-01-2004 09:49 » |
|
Народ, подскажите может кто сталкивался... Сконвертил БД на 97 аксессе под ХР офис. После чего база вроде работает, но не запускаются модули, написанные на VB. Постоянно выводит ошибку и не понимает функцию, написанную в этом модуле. Пробовал построителем формул задать его заново, но без результата. Может я чего-то не то делаю или в VB какие-то изменения были? Я так понял, что он эту функцию вообще не видит
|
|
|
Записан
|
|
|
|
Dusk
Команда клуба
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
Команда клуба
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
Главный специалист
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
Главный специалист
Offline
Пол:
|
|
« Ответ #8 : 15-01-2004 08:27 » |
|
Код в студию .... а то не понятно про что ты говроишь ....
Я имел ввиду ситуацию
Dim ss As Recordset .... ss.Edit 'и как раз говорит что функция Edit не определена?
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
little
|
|
« Ответ #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
Молодой специалист
Online
|
|
« Ответ #12 : 16-01-2004 06:15 » |
|
в процедуре все вроде верно проверь, существует ли модуль с этой процедурой в базе после конвертации и если существует, то, как сказано у кого-то в подписи "debuging is our last hope" т.е. пройдись по "F8"
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
HandKot
Молодой специалист
Online
|
|
« Ответ #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
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #15 : 16-01-2004 06:38 » |
|
lexa_b, извини, некогда разбираться, я последний день на работе перед сессей. Приеду только в середине февраля. :oops: Я просил прислать прогу с пустыми таблицами для того, чтобы я проверил у себя (тестовые данные я бы сам вбил)...
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #16 : 16-01-2004 06:38 » |
|
выложи то место где ты его вызываешь.... может там чтото не так ...
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Dusk
Команда клуба
Offline
Пол:
Редкий, но веселый вид
|
|
« Ответ #17 : 16-01-2004 06:44 » |
|
Но, как я вижу, проблемма в области видимости функции... Попробуй ее перенести в новый модуль...
|
|
|
Записан
|
Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших Опыт - это то, что появляется сразу после того, как он был так необходим... Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
|
|
|
HandKot
Молодой специалист
Online
|
|
« Ответ #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
Главный специалист
Offline
Пол:
|
|
« Ответ #20 : 16-01-2004 07:44 » |
|
А с явным указанием именем модуля не пробовал? И просто создать тамже пустую функцию и вызвать с нужного места ? причем желательно с латиским названием....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
HandKot
Молодой специалист
Online
|
|
« Ответ #21 : 16-01-2004 10:09 » |
|
lexa_b, так ведь можно и с пустыми таблицами действительно, попробуй в базе после конверции создать процедуру хотя бы с MsgBox и проверь отработает или нет
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #22 : 16-01-2004 10:29 » |
|
С пустой базой и я повозился бы ....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
lexa_b
Гость
|
|
« Ответ #23 : 19-01-2004 03:39 » |
|
PSD, "А с явным указанием именем модуля не пробовал? " Это как?
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #24 : 19-01-2004 07:49 » |
|
Так module1.fnMy("Данные")
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
lexa_b
Гость
|
|
« Ответ #25 : 19-01-2004 08:12 » |
|
PSD, прописано в модуле "vspom" пишу vspom.СуммаПрописью(100) отвечает введите параметр "vspom" даже параметр заменил на цифру 100 - не помогает
Муть какая-то.... хоть заново переписывай
|
|
|
Записан
|
|
|
|
little
|
|
« Ответ #26 : 19-01-2004 08:31 » |
|
lexa_b, попробуй и правда переименовать название в SummaPropisju например... Может какие-то глюки кодировки?
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #27 : 19-01-2004 09:41 » |
|
1)Дай суда то место где пишешь... 2)создай новый модуль , напши там новую фунциюи попробуй повызывать в твоем запросе. 3) создай новый модуль , напши там новую фунциюи попробуй повызывать в новом запросе .... сравни результаты 4) если пункут два не прокатит, создай новую базу и повтори пунк 2....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #28 : 19-01-2004 09:41 » |
|
1)Дай суда то место где пишешь... 2)создай новый модуль , напши там новую фунциюи попробуй повызывать в твоем запросе. 3) создай новый модуль , напши там новую фунциюи попробуй повызывать в новом запросе .... сравни результаты 4) если пункут два не прокатит, создай новую базу и повтори пунк 3....
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
lexa_b
Гость
|
|
« Ответ #29 : 19-01-2004 09:42 » |
|
little, C "англицким произношением" функции заработало, всем спасибо !!!
|
|
|
Записан
|
|
|
|
|