Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с SourceObject в разных Windows (рус/англ)
 
 автор: Мария   (29.06.2010 в 16:51)   личное сообщение
 
 

Помогите решить такую проблему. В моем проекте много раз используется программное изменение источника данных для подчиненной формы в зависимости от различных условий. Делала так: ПодчиненнаяФорма.SourceObject = "Запрос.ЗапросДляПодчиненнойФормы" или ПодчиненнаяФорма.SourceObject = "Таблица.ТаблицаДляПодчиненнойФормы". Все прекрасно работало, пока у одного из пользователей не возникла английская версия Windows, для которой нужно писать "Query.ЗапросДляПодчиненнойФормы" или "Table.ТаблицаДляПодчиненнойФормы".
Подозреваю, что должно быть простое решение, но не смогла его найти.

  Ответить  
 
 автор: Силblч   (29.06.2010 в 22:13)   личное сообщение
 
 

так пишите всегда все обращения к объектам по-английски

  Ответить  
 
 автор: Bellerofont   (29.06.2010 в 22:39)   личное сообщение
 
 

>так пишите всегда все обращения к объектам по-английски
В русском Access 2000, обращение по английски не работало ...

  Ответить  
 
 автор: Explorer   (29.06.2010 в 22:42)   личное сообщение
 
 

т.е. одна и та же БД работает в английской и не работает в русской версиях?

  Ответить  
 
 автор: Bellerofont   (30.06.2010 в 08:55)   личное сообщение
 
 

могу уверенно сказать, что попытка установить SourceObject =Table.ИмяТаблицы (или Query.ИмяЗапроса) для объекта Подчиненная форма вызывала ошибку в русской версии Access 2000, а SourceObject =Таблица.ИмяТаблицы - в английской версии Access 2000.
В следующих access стало возможным использовать Table.ИмяТаблицы как в английской так и в русской версиях.
Но в Access 2000 это использовалось редко, так как было в новинку.

  Ответить  
 
 автор: Explorer   (30.06.2010 в 09:05)   личное сообщение
 
 


могу уверенно сказать, что попытка установить


это нормально.

я бы удивился если бы попытка указать SourceObject = Table.TableName в Английской версии вызывало ошибку.

все остальные варианты следствие локализаций и возможных связанных ошибок.

бывает. проверь сервиспаки

  Ответить  
 
 автор: Мария   (30.06.2010 в 10:03)   личное сообщение
 
 

Спасибо всем, кто ответил. К сожалению, так пока и не знаю, что делать. Обращение на английском не работает под русским Windows, а это большинство пользователей. Обращение на русском вызывает ошибку в английском Windows. Проблему нужно решить до завтра. Может быть есть возможность как-то программно узнать, какая версия Windows стоит, русская или английская?

  Ответить  
 
 автор: Explorer   (30.06.2010 в 10:40)   личное сообщение
 
 

написание на английском должно работать по-всякому

нужно разбираться

  Ответить  
 
 автор: Мария   (30.06.2010 в 10:43)   личное сообщение
 
 

Спасибо, буду думать.

  Ответить  
 
 автор: Bellerofont   (30.06.2010 в 11:20)   личное сообщение
 
 

Какая версия Access?
Мария, это может не работать только в русском Access 2000.

  Ответить  
 
 автор: Силblч   (30.06.2010 в 11:19)   личное сообщение
 
 

может так?

me.SourceObject = "=Table.TableName"


хзхзхзхз

я уже совсемс тарый стал
а зачем указывать тип объекта?
не достаточно-ли просто имени?

  Ответить  
 
 автор: Bellerofont   (30.06.2010 в 11:37)   личное сообщение
 
 

>а зачем указывать тип объекта?
>не достаточно-ли просто имени?

Для формы достаточно, для таблицы и запроса нет

  Ответить  
 
 автор: Bellerofont   (30.06.2010 в 11:34)   личное сообщение
 
 

>написание на английском должно работать по-всякому
это не так для русского Access 2000

  Ответить  
 
 автор: Силblч   (30.06.2010 в 11:17)   личное сообщение
 
 

хз... из VBA у меня всегда работало
хотя может я и ошибаюсь...
но этого не может быть :)

  Ответить  
 
 автор: Bellerofont   (30.06.2010 в 11:33)   личное сообщение
 
 

>но этого не может быть :)
ничего страшного, это пройдет :)
Простой пример (русский 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 Введенное имя формы не соответствует соглашениям об именах объектов приложения 'Борей'.
Все хорошо

  Ответить  
 
 автор: Силblч   (30.06.2010 в 12:39)   личное сообщение
 
 


ничего страшного, это пройдет :)


уже вряд ли ;)


эх жаль не могу проверить
акс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


я понял, почему у меня никогда не возникало такой проблемы
если я использовал субформу, то это была всегда форма, в которой был источник данных...
если надо было удалять контролы в такой субформе, то их удалял и создавал заново...

  Ответить  
 
 автор: Анатолий (Киев)   (30.06.2010 в 14:58)   личное сообщение
 
 

Мария, как сильно оличаются по количеству и названиям полей таблица и запрос?
Если никак то самое правильное - создать табличную форму и использовать ее в качестве подчиненной. SourceObject будет оставаться неизменным, а менять только RecordSource субформы.

ЗЫ. Я никогда в жизни не применял такой синтаксис, как у вас, поэтому, видимо, и не наступал на эти грабли.

ЗЗЫ. Если вы когда-то надумаетесь защитить БД на уровне пользователей, то поменять SourceObject сможет только юзер с правами на изменение макета главной формы.
А если надумаетесь создать MDE файл, то, ИМХО, ваша стратегия там не будет работать в принципе (не берусь утверждать, опять же - не пробовал).

  Ответить  
 
 автор: Силblч   (30.06.2010 в 15:32)   личное сообщение
 
 

+1024

  Ответить  
 
 автор: Serge Gavrilov   (30.06.2010 в 22:58)   личное сообщение
 
 

>А если надумаетесь создать MDE файл, то, ИМХО, ваша стратегия там не будет работать в принципе
Смена SourceObject без проблем работает в mde

  Ответить  
 
 автор: Explorer   (01.07.2010 в 03:38)   личное сообщение
 
 

+1024

приветствую, Сергей.
что-то давно не заглядывал...

все подвизаешься на этой ниве или уже забросил-мигрировал?

  Ответить  
 
 автор: Serge Gavrilov   (01.07.2010 в 11:41)   личное сообщение
 
 

Привет, Иван.

>что-то давно не заглядывал...
заглядываю иногда, но времени стало катастрофически не хватать, поэтому активности не проявляю.
Сын забират все свободное (и не только свободное) время.

>все подвизаешься на этой ниве или уже забросил-мигрировал?
и на этой то же. Но в основном приходится программировать на vb.net, c#

  Ответить  
 
 автор: Мария   (02.07.2010 в 11:02)   личное сообщение
 
 

Спасибо всем, кто ответил!
Может быть менять источник данных в процессе работы действительно не лучшее решение. Будет время - подумаю.
Настаивать, чтобы все пользователи использовали Access 2003 невозможно. Сейчас многие организации используют только лицензионное программное обеспечение. Для них переход на более новую версию - это ненужные финансовые расходы.
Пока включила обработку ошибки - если ошибка возникла при использовании английского названия, попробовать использовать русское. Те компьютеры, которые были в пределах досягаемости, такой вариант приняли. Как поведет себя этот фрагмент у других пользователей, пока не знаю.

  Ответить  
 
 автор: Feel   (06.07.2010 в 19:07)   личное сообщение
 
 

В реестре установщик хранит версию и локаль Офиса:
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 в какой-то стартовой форме и выставить триггер))

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList