powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баг или боян?
4 сообщений из 4, страница 1 из 1
Баг или боян?
    #39633156
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Решил поделиться очень странным багом.
У меня в базе есть 2 таблицы, которые содержат список заголовков (имён) функций из моих-же модулей.
Есть необходимость программно сравнивать эти списки. Так вот на операции сравнения имён, функции запускаются.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub aУдалитьЛишниеФункции()
On Error GoTo Ошибка                                                            'из таблицы "юСписокФункций" удаляем функции,
Dim strЗапрос  As String, strОсновнойСписок As String                           'которых уже нет в модулях
Dim rstОсновнойСписок As Recordset, rstВспомогательныйСписок As Recordset
Dim dbТекущая As Database
Set dbТекущая = CurrentDb
Set rstОсновнойСписок = dbТекущая.OpenRecordset("SELECT юСписокФункций.* FROM юСписокФункций ORDER BY юСписокФункций.КодФункции DESC;", dbOpenDynaset)
Set rstВспомогательныйСписок = dbТекущая.OpenRecordset("юСписокФункцийВспом", dbOpenDynaset)
    Do Until rstОсновнойСписок.EOF
        strОсновнойСписок = rstОсновнойСписок!ИмяФункции
        Debug.Print strОсновнойСписок
        
        rstВспомогательныйСписок.FindFirst "ИмяФункции = " & rstОсновнойСписок!ИмяФункции
        If rstВспомогательныйСписок.NoMatch Then
            rstОсновнойСписок.Delete                                            'удаляем устаревшую функцию
        End If
        rstОсновнойСписок.MoveNext
    Loop
Exit Sub
Ошибка:                                                                         'Обработка ошибки
MsgBox (Err.Description & "  " & Err.Number)
End Sub


Функция из списка запускается при выполнении команды
Код: vbnet
1.
 rstВспомогательныйСписок.FindFirst "ИмяФункции = " & rstОсновнойСписок!ИмяФункции

Кто-нибудь сталкивался с подобной бякой?
...
Рейтинг: 0 / 0
Баг или боян?
    #39633170
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,
нужно вывести функции из scope
также в поиске необходимы апострофы, но если она public, то и это наверное не поможет, хотя...
Код: vbnet
1.
rstВспомогательныйСписок.FindFirst "ИмяФункции = """ & rstОсновнойСписок!ИмяФункции & """"


либо функции перевести в private, тогда проблем быть не должно, но про апострофы нужно не забывать.
...
Рейтинг: 0 / 0
Баг или боян?
    #39633181
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А смысл выводить функции из видимости? Все равно работать не будет, т.к. функции будут ожидаемо запускаться. Это не баг, а абсолютно ожидаемая функциональность. Спасут только апострофы.
...
Рейтинг: 0 / 0
Баг или боян?
    #39633191
Код: vbnet
1.
2.
3.
        strОсновнойСписок = rstОсновнойСписок!ИмяФункции
        
        rstВспомогательныйСписок.FindFirst "ИмяФункции = " & rstОсновнойСписок!ИмяФункции

Интересный эффект. Видимо при выполнении FindFirst происходит ложное срабатывание метода Application.Run или EVal. Интересно, это происходит с любой функцией или с той, что уже запускалась ранее этим методом?
Кстати, у вас неправильный синтаксис для строкового критерия.
Надо так:
rstВспомогательныйСписок.FindFirst "ИмяФункции = ' " & rstОсновнойСписок!ИмяФункции & "'"
А лучше так:
rstВспомогательныйСписок.FindFirst "ИмяФункции = ' " & strОсновнойСписок & "'"
Может в этом и причина.

А вообще, если цель - удалить записи в Т2, отсутствующие в другой таблице Т1, то проще выполнить запрос:
Код: plsql
1.
DELETE * FROM T2 WHERE [ИмяФункции] NOT IN (SELECT [ИмяФункции] FROM T1)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баг или боян?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]