powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание текстового описания объекта (таблица,запрос) DAO
24 сообщений из 24, страница 1 из 1
Создание текстового описания объекта (таблица,запрос) DAO
    #39866307
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Помогите пжлст разобраться с проблемой: пытаюсь программно через DAO создать текстовое описание запроса. Никак не могу понять почему не работает и выдает ошибку 3367. Вроде все необходимые референсы подключены.
В интернете ничего дельного не нашел. Порыл форум тоже. Задал вопрос в https://www.sql.ru/forum/382821/opisanie-polya-tablicy-access - нет ответа.

Самое странное, что с запросом на объединение (в примере Запрос1) срабатывает, а в простым запросом на выборку нет (Запрос2). Как так?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
Option Compare Database

Function TEST() '
'пытаюсь программно через DAO создать текстовое описание запроса. Никак не могу понять почему не работает и выдает ошибку 3367 _
Вроде все необходимые референсы подключены _
Самое странное, что с запросом на объединение срабатывает, а в простым запросом на выборку нет. Как так?
DoCmd.SetWarnings False
    
    Dim dbs As DAO.Database, prp As DAO.Property, tdf As DAO.QueryDef
    Dim sDescr As String
    Dim QName As String 'имя запроса

Set dbs = DBEngine(0).OpenDatabase(CurrentDb.Name) 'CurrentDb
    Set tdf = Nothing
    Set MyQuery = Nothing

'здесь просто убиваю тестовые результаты
On Error Resume Next
    DoCmd.DeleteObject acQuery, "Запрос1 NEW"
    DoCmd.DeleteObject acQuery, "Запрос2 NEW"
On Error GoTo 0

'РАБОТАЕТ
QName = "Запрос1" 'есть запрос на объединение здесь называется "Запрос1"
    GoSub Process1
'НЕ РАБОТАЕТ!
QName = "Запрос2" 'есть запрос на выборку здесь называется "Запрос2"
    GoSub Process1

Exit Function

Process1:
    On Error GoTo err_
txtSQL = dbs.QueryDefs(QName).SQL
'просто создаю его копию
'DoCmd.CopyObject , QName & " NEW", acQuery, QName
    Set MyQuery = dbs.CreateQueryDef(QName & " NEW", txtSQL)

'дальше хочу создать описание объекта (созданного запроса)
    sDescr = dbs.Containers("tables").Documents(QName).Properties("description") 'читаем описание объекта, которое есть по-любому (по условию)
    'sDescr = "Тест бл*"
'создаем описания таблицы (здесь не используется)
'CurrentDb.Containers("tables").Documents(QName & " NEW").Properties("description") = sDescr & " NEW" 'создаем описания таблиц

    dbs.TableDefs.Refresh
    Application.RefreshDatabaseWindow
    
    Set tdf = dbs.QueryDefs(QName & " NEW")
    Set prp = tdf.CreateProperty("description", dbText, sDescr)
    tdf.Properties.Append prp 'Call tdf.Properties.Append(prp) ВОТ ЗДЕСЬ НЕ ПРОХОДИТ и РУГАЕТСЯ!!
    
    Set tdf = Nothing
    Set MyQuery = Nothing
Return

err_:
    If Err.Number = 3270 Then
        tdf.Properties.Append tdf.CreateProperty("Description", dbText, sDescr)
    ElseIf Err.Number = 3367 Then
        Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
    End If
Resume Next

End Function
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866387
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
access97 проверено
Код: vbnet
1.
2.
3.
Dim q As QueryDef
Set q = CurrentDb.CreateQueryDef("Q11", "SELECT * FROM MSysACEs")
q.Properties.Append q.CreateProperty("Description", dbText, "Q11 Descrioption")
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866448
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaaccess97 проверено
Забыл сказать что у меня Акс 2010. Это тоже не срабатывает с той же ошибкой.
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866509
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kulibbubuchaaccess97 проверено
Забыл сказать что у меня Акс 2010
увы, такого нету....
есть акс 2016, там оба кода работают без проблем
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866755
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставил SP1 для MSO2010, потом SP2 - толку ноль. Ну что ж, буду писать мелкомягким в суппорт.
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866761
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchakulibпропущено...
Забыл сказать что у меня Акс 2010
увы, такого нету....
есть акс 2016, там оба кода работают без проблем
Будьте добры, попробуйте пжлст вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub TEST3()
Dim MyQuery As QueryDef
'ÍÅ ÐÀÁÎÒÀÅÒ!
QName = "Çàïðîñ2" 'åñòü çàïðîñ íà âûáîðêó çäåñü íàçûâàåòñÿ "Çàïðîñ2"
txtSQL = CurrentDb.QueryDefs(QName).SQL
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW", txtSQL)
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")
End Sub

Я немного изменил ваш код (который кстати в исходном виде у меня тоже сработал) и он опять перестал работать с той же ошибкой.
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866784
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой, извиняюсь
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub TEST3()

Dim MyQuery As QueryDef
    Set MyQuery = Nothing
'НЕ РАБОТАЕТ!
QName = "Запрос2" 'есть запрос на выборку здесь называется "Запрос2"
txtSQL = CurrentDb.QueryDefs(QName).SQL
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW", txtSQL)
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")
End Sub
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866841
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..эээ...мммм....презерватив на швабру? он погоды конечно не далает...
Код: vbnet
1.
2.
3.
4.
...    
Dim MyQuery As QueryDef
Set MyQuery = Nothing
...


не вижу отличий от моего варианта, код рабочий как в 97 так и в 2016

таки что-то произошло между событиями
авторЭто тоже не срабатывает с той же ошибкой
и
авторкоторый кстати в исходном виде у меня тоже сработал
сервиспаки?
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866851
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Империческим путем обнаружил что один SQL-текст работает, а другой нет. Как так то?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub TEST5()

Dim MyQuery As QueryDef
    Set MyQuery = Nothing
QName = "Запрос2" 'есть запрос на выборку здесь называется "Запрос2"
'ВАШ КОД РАБОТАЕТ
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW", "SELECT * FROM MSysACEs")
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")
'МОЁ НЕ РАБОТАЕТ!
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW2", "SELECT tbl1.NAME, tbl1.Count FROM tbl1 WHERE (((tbl1.Count)<6))")
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")
End Sub


Тем же путём обнаружил кучу появляющихся скрытых процедур, которые видимо формируются для преобразования в результирующий объект, но почему-то торчат в памяти. Оно? Как избавиться?
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866861
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотрите
Код: vbnet
1.
2.
3.
For i = 0 To MyQuery.Properties.Count
    Debug.Print MyQuery.Properties(i).Name, MyQuery.Properties(i).Value
Next


если вывести все свойства ПЕРЕД добавление Description, то видим, что оно уже есть
...
DatasheetGridlinesThemeColorIndex -1
DatasheetForeThemeColorIndex -1
Description описание объекта
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866893
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha... видим, что оно уже есть
Есть где? В новом созданном запросе? Или в исходном объекте? Я прошу извинить, уже столько здесь накидал, что наверное и вас сбил с толку.

Изначально планируется на основе существующего запроса "Запрос2" (из приаттаченного примера) в котором действительно уже есть описание, программно создать новый запрос, сохранить его и присвоить описание аналогичное исходному "Запрос2". Но сам новый запрос в тексте SQL претерпевает изменения. Так бы можно было бы просто скопировать исходный.

Так вот, во вновь создаваемом запросе "Запрос2 NEW" не может быть описания т.к. он абсолютно новый. Описание есть только в исходном.
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866910
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объекта
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866919
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kulibbubucha... видим, что оно уже есть
Так вот, во вновь создаваемом запросе "Запрос2 NEW" не может быть описания т.к. он абсолютно новый. Описание есть только в исходном.
вот вставлено в ваш исходный файл, в котором у меня тоже воспроизводится ошибка 3367:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    
....    
Set MyQuery = dbs.CreateQueryDef(QName & " NEW", txtSQL)

Dim i As Integer
For i = 0 To MyQuery.Properties.Count
    Debug.Print MyQuery.Properties(i).Name, MyQuery.Properties(i).Value
Next
...


...таки суслик есть, проверьте сами

ps а если создать новый файл и попробовать пострадать в нем?
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866924
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuНе могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объекта
юзеру нет, разработчику да и эта ситуация простая - время :-)
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866933
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaсмотрите
Код: vbnet
1.
2.
3.
For i = 0 To MyQuery.Properties.Count
    Debug.Print MyQuery.Properties(i).Name, MyQuery.Properties(i).Value
Next


если вывести все свойства ПЕРЕД добавление Description, то видим, что оно уже есть
...
DatasheetGridlinesThemeColorIndex -1
DatasheetForeThemeColorIndex -1
Description описание объекта

И в новом запросе на 11-м i у меня вылетает ошибка св-ва 3251

Name Запрос2 NEW
DateCreated 25.09.2019 14:03:57
LastUpdated 25.09.2019 14:03:57
Type 0
SQL SELECT tbl1.NAME, tbl1.COUNT
FROM tbl1
WHERE (((tbl1.COUNT)<7));

Updatable True
Connect
ReturnsRecords True
ODBCTimeout 60
RecordsAffected 0
MaxRecords 0
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866938
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
on error resume next
перед
for i = 0 to...
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866939
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuНе могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объектаА кепшены разве это не то же самое? А ведь они очень нужны. Вот и здесь та же тема.
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866949
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaon error resume next
перед
for i = 0 to... Да точняк. Спасибо!

И так ситуация действительно странная - дебагер "говорит" что description у объекта есть. А сам объект показывает что его нет. Дпльше пытаюсь другим методом добавить описание Containers("tables").Documents(QName & " NEW"), и опять же ошибка, которая кричит что св-во не найдено.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub TEST5()

Dim MyQuery As QueryDef

QName = "Запрос2" 'есть запрос на выборку здесь называется "Запрос2"
'ВАШЕ РАБОТАЕТ
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW_TEST", "SELECT * FROM MSysACEs")
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")

'МОЁ!
txtSQL = CurrentDb.QueryDefs(QName).SQL
Set MyQuery = CurrentDb.CreateQueryDef(QName & " NEW", txtSQL)
CurrentDb.TableDefs.Refresh
On Error Resume Next
For i = 0 To MyQuery.Properties.Count
    Debug.Print MyQuery.Properties(i).Name, MyQuery.Properties(i).Value
Next

On Error GoTo 0
'НЕ РАБОТАЕТ, дебагер говороит что описание есть
MyQuery.Properties.Append MyQuery.CreateProperty("Description", dbText, "Q11 Description")
'Пробую второй варинт добавления описания - ошибка 3270 - Св-во не найдено (собственно о чем и ругается дебагер в первом разе)
CurrentDb.Containers("tables").Documents(QName & " NEW").Properties("description") = "Q11 Description"

End Sub
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866977
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говорит мой милый ребенок "..продолжаем заниматься х@рней..."

Удали Description у таблицы tbl1 ... вдруг там суслик
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39866980
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в догонку... просто удали, без "Не должно и не может быть" :-)
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39867075
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaУдали Description у таблицы tbl1 ... вдруг там суслик Да лаааааддднооо?!?!?!?!?! АБАМА РАМА. У меня нет никаких других слов, да и эти не понимаю))))

Я в шоке. Сработало! Как так то? Ребенку вашему огромный респект. Вас как отблагодарить? С меня ящик пива
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39867080
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubuchasdkuНе могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объектаюзеру нет, разработчику да и эта ситуация простая - время :-)Разработчику,который создал объект, его описание крайне необходимо-ведь он не знал что создавал
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39867250
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkububuchaпропущено...
юзеру нет, разработчику да и эта ситуация простая - время :-)Разработчику,который создал объект, его описание крайне необходимо-ведь он не знал что создавал
Согласен!
Комментарии и описания это все для слабаков.
Тру разработчик не запаривается о том, что его код кто-то может сопровождать, или через несколько лет он сам что-то забудет.
Тру разработчик все держит в своей голове!
...
Рейтинг: 0 / 0
Создание текстового описания объекта (таблица,запрос) DAO
    #39867269
kulib
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, ну мне надо и всё. Считайте, что это творческий процесс. Хочу, чтобы работало. И мне помогли. Огромное спасибо еще раз. А примеров как можно использовать описания таблиц или запросов могу привести, но избавьте плиз.
Лучше б рассказал кто, почему св-во таблицы влияет на присвоение того же св-ва запросу.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание текстового описания объекта (таблица,запрос) DAO
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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