Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание текстового описания объекта (таблица,запрос) DAO / 24 сообщений из 24, страница 1 из 1
24.09.2019, 13:56
    #39866307
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Здравствуйте! Помогите пжлст разобраться с проблемой: пытаюсь программно через 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
24.09.2019, 15:01
    #39866387
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
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
24.09.2019, 16:04
    #39866448
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
bubuchaaccess97 проверено
Забыл сказать что у меня Акс 2010. Это тоже не срабатывает с той же ошибкой.
...
Рейтинг: 0 / 0
24.09.2019, 17:10
    #39866509
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
kulibbubuchaaccess97 проверено
Забыл сказать что у меня Акс 2010
увы, такого нету....
есть акс 2016, там оба кода работают без проблем
...
Рейтинг: 0 / 0
25.09.2019, 11:35
    #39866755
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Поставил SP1 для MSO2010, потом SP2 - толку ноль. Ну что ж, буду писать мелкомягким в суппорт.
...
Рейтинг: 0 / 0
25.09.2019, 11:46
    #39866761
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
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
25.09.2019, 12:00
    #39866784
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Ой, извиняюсь
Код: 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
25.09.2019, 13:15
    #39866841
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
..эээ...мммм....презерватив на швабру? он погоды конечно не далает...
Код: vbnet
1.
2.
3.
4.
...    
Dim MyQuery As QueryDef
Set MyQuery = Nothing
...


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

таки что-то произошло между событиями
авторЭто тоже не срабатывает с той же ошибкой
и
авторкоторый кстати в исходном виде у меня тоже сработал
сервиспаки?
...
Рейтинг: 0 / 0
25.09.2019, 13:29
    #39866851
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Империческим путем обнаружил что один 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
25.09.2019, 13:44
    #39866861
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
смотрите
Код: 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
25.09.2019, 14:26
    #39866893
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
bubucha... видим, что оно уже есть
Есть где? В новом созданном запросе? Или в исходном объекте? Я прошу извинить, уже столько здесь накидал, что наверное и вас сбил с толку.

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

Так вот, во вновь создаваемом запросе "Запрос2 NEW" не может быть описания т.к. он абсолютно новый. Описание есть только в исходном.
...
Рейтинг: 0 / 0
25.09.2019, 14:48
    #39866910
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Не могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объекта
...
Рейтинг: 0 / 0
25.09.2019, 15:14
    #39866919
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
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
25.09.2019, 15:16
    #39866924
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
sdkuНе могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объекта
юзеру нет, разработчику да и эта ситуация простая - время :-)
...
Рейтинг: 0 / 0
25.09.2019, 15:26
    #39866933
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
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
25.09.2019, 15:32
    #39866938
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
on error resume next
перед
for i = 0 to...
...
Рейтинг: 0 / 0
25.09.2019, 15:32
    #39866939
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
sdkuНе могу представить ситуевину,когда юзеру(а разработчику и подавно), понадобится описание объектаА кепшены разве это не то же самое? А ведь они очень нужны. Вот и здесь та же тема.
...
Рейтинг: 0 / 0
25.09.2019, 15:46
    #39866949
kulib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
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
25.09.2019, 16:28
    #39866977
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание текстового описания объекта (таблица,запрос) DAO
Как говорит мой милый ребенок "..продолжаем заниматься х@рней..."

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

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


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