|
|
|
| Помогите решить такую проблему. В моем проекте много раз используется программное изменение источника данных для подчиненной формы в зависимости от различных условий. Делала так: ПодчиненнаяФорма.SourceObject = "Запрос.ЗапросДляПодчиненнойФормы" или ПодчиненнаяФорма.SourceObject = "Таблица.ТаблицаДляПодчиненнойФормы". Все прекрасно работало, пока у одного из пользователей не возникла английская версия Windows, для которой нужно писать "Query.ЗапросДляПодчиненнойФормы" или "Table.ТаблицаДляПодчиненнойФормы".
Подозреваю, что должно быть простое решение, но не смогла его найти. | |
|
| |
|
|
|
| так пишите всегда все обращения к объектам по-английски | |
|
| |
|
|
|
| >так пишите всегда все обращения к объектам по-английски
В русском Access 2000, обращение по английски не работало ... | |
|
| |
|
|
|
| т.е. одна и та же БД работает в английской и не работает в русской версиях? | |
|
| |
|
|
|
| могу уверенно сказать, что попытка установить SourceObject =Table.ИмяТаблицы (или Query.ИмяЗапроса) для объекта Подчиненная форма вызывала ошибку в русской версии Access 2000, а SourceObject =Таблица.ИмяТаблицы - в английской версии Access 2000.
В следующих access стало возможным использовать Table.ИмяТаблицы как в английской так и в русской версиях.
Но в Access 2000 это использовалось редко, так как было в новинку. | |
|
| |
|
|
|
|
могу уверенно сказать, что попытка установить
|
это нормально.
я бы удивился если бы попытка указать SourceObject = Table.TableName в Английской версии вызывало ошибку.
все остальные варианты следствие локализаций и возможных связанных ошибок.
бывает. проверь сервиспаки | |
|
| |
|
|
|
| Спасибо всем, кто ответил. К сожалению, так пока и не знаю, что делать. Обращение на английском не работает под русским Windows, а это большинство пользователей. Обращение на русском вызывает ошибку в английском Windows. Проблему нужно решить до завтра. Может быть есть возможность как-то программно узнать, какая версия Windows стоит, русская или английская? | |
|
| |
|
|
|
| написание на английском должно работать по-всякому
нужно разбираться | |
|
| |
|
|
|
|
| Какая версия Access?
Мария, это может не работать только в русском Access 2000. | |
|
| |
|
|
|
| может так?
me.SourceObject = "=Table.TableName"
|
хзхзхзхз
я уже совсемс тарый стал
а зачем указывать тип объекта?
не достаточно-ли просто имени? | |
|
| |
|
|
|
| >а зачем указывать тип объекта?
>не достаточно-ли просто имени?
Для формы достаточно, для таблицы и запроса нет | |
|
| |
|
|
|
| >написание на английском должно работать по-всякому
это не так для русского Access 2000 | |
|
| |
|
|
|
| хз... из VBA у меня всегда работало
хотя может я и ошибаюсь...
но этого не может быть :) | |
|
| |
|
|
|
| >но этого не может быть :)
ничего страшного, это пройдет :)
Простой пример (русский Access 2000):
Private Sub btn1_Click()
On Error GoTo HandleError
10 Me.subform1.SourceObject = "Table.Товары"
20 Me.subform1.SourceObject = "Таблица.Товары"
Debug.Print "Все хорошо"
Exit Sub
HandleError:
Debug.Print "Строка " & Erl, Err.Number, Err.Description
Resume Next
End Sub
|
Результат:
Строка 10 2124 Введенное имя формы не соответствует соглашениям об именах объектов приложения 'Борей'.
Все хорошо | |
|
| |
|
|
|
|
ничего страшного, это пройдет :)
|
уже вряд ли ;)
эх жаль не могу проверить
акс2003й...
а почему бы не апгредйить до 2003его?
на 2003м у меня проблем не возникло даже с таким кодом
Private Sub Кнопка2_Click()
On Error GoTo HandleError
10 Me.subform1.SourceObject = "Table.главная книга"
20 Me.subform1.SourceObject = "Таблица.главная книга"
Debug.Print "Все хорошо"
Exit Sub
HandleError:
Debug.Print "Строка " & Erl, Err.Number, Err.Description
Resume Next
End Sub
|
я понял, почему у меня никогда не возникало такой проблемы
если я использовал субформу, то это была всегда форма, в которой был источник данных...
если надо было удалять контролы в такой субформе, то их удалял и создавал заново... | |
|
| |
|
|
|
| Мария, как сильно оличаются по количеству и названиям полей таблица и запрос?
Если никак то самое правильное - создать табличную форму и использовать ее в качестве подчиненной. SourceObject будет оставаться неизменным, а менять только RecordSource субформы.
ЗЫ. Я никогда в жизни не применял такой синтаксис, как у вас, поэтому, видимо, и не наступал на эти грабли.
ЗЗЫ. Если вы когда-то надумаетесь защитить БД на уровне пользователей, то поменять SourceObject сможет только юзер с правами на изменение макета главной формы.
А если надумаетесь создать MDE файл, то, ИМХО, ваша стратегия там не будет работать в принципе (не берусь утверждать, опять же - не пробовал). | |
|
| |
|
|
|
| +1024 | |
|
| |
|
|
|
| >А если надумаетесь создать MDE файл, то, ИМХО, ваша стратегия там не будет работать в принципе
Смена SourceObject без проблем работает в mde | |
|
| |
|
|
|
| +1024
приветствую, Сергей.
что-то давно не заглядывал...
все подвизаешься на этой ниве или уже забросил-мигрировал? | |
|
| |
|
|
|
| Привет, Иван.
>что-то давно не заглядывал...
заглядываю иногда, но времени стало катастрофически не хватать, поэтому активности не проявляю.
Сын забират все свободное (и не только свободное) время.
>все подвизаешься на этой ниве или уже забросил-мигрировал?
и на этой то же. Но в основном приходится программировать на vb.net, c# | |
|
| |
|
|
|
| Спасибо всем, кто ответил!
Может быть менять источник данных в процессе работы действительно не лучшее решение. Будет время - подумаю.
Настаивать, чтобы все пользователи использовали Access 2003 невозможно. Сейчас многие организации используют только лицензионное программное обеспечение. Для них переход на более новую версию - это ненужные финансовые расходы.
Пока включила обработку ошибки - если ошибка возникла при использовании английского названия, попробовать использовать русское. Те компьютеры, которые были в пределах досягаемости, такой вариант приняли. Как поведет себя этот фрагмент у других пользователей, пока не знаю. | |
|
| |
|
|
|
| В реестре установщик хранит версию и локаль Офиса:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
смотрим разделы с GUID
в XP, 2000 и 2003 офисе GUID строится по таким правилам
http://support.microsoft.com/kb/230848/
http://support.microsoft.com/kb/302663/
http://support.microsoft.com/kb/832672/
например {91110419-6000-11D3-8CFE-0150048383C9} MSO 2003 Pro SP3
{WXYYLLLL-????-????-????-???????????}, локаль здесь LLLL в HEX
"0409 hexadecimal converts to 1033 decimal, which represents English"
в 2007 офисе GUID строится иначе
http://support.microsoft.com/kb/928516/ru-ru
{BRMMmmmm-PPPP-LLLL-p000-D000000FF1CE}, локаль опять LLLL
но смысла уже проверять нет, ибо работает и так
как в 97 сходу не нашел, но думаю аналогично
дублирует это во всех версиях ключ Language = 1049 (русский, 1033 английский, 2052 китайский, остальные по ссылке http://technet.microsoft.com/ru-ru/library/cc179219.aspx)
прочитать значения можно скриптом до запуска акса или из акса, но нахрена все это я написал?
не проще отловить ошибку 2124 в какой-то стартовой форме и выставить триггер)) | |
|
| |