powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 1С и Аксесс......
18 сообщений из 18, страница 1 из 1
1С и Аксесс......
    #32411110
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1С 7.5
связал 1С файлы с аксом - без проблем...
нашел нужные таблицы - интернет в помощь...
строю запрос ...

ID поля в 1С представляют собой стринг типа 6a, 6b ...6A....61...6~
(это к примеру)

но для аска 6t и 6T порову..., как тогда связывать таблицы?
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32411124
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, но думаю можно изменить соответствующую настройку реестра. Насколько я понимаю в 1C формат .dbf. Соответственно в ISAM разделе реестра для Access надо прописать что-от типа Exact=On для бинарного сравнения строк
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32411125
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exact 0 или -1, те в реестре храниться не строка On Off а число 0, -1.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32411126
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\3.5\Engines

Если я правильно понял вопрос то это по-моему то что нужно
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32414725
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это не отразится на полях где числовые значения?
или они так же будут сравниваться как бинарные (им , впрочем, это должно быть пофиг)?
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32417893
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ежели кто может по-подробнее, а то у меня чё-то не вышло
я присоединяю файлы 1С как Dbase 5.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32417902
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те Access не понимает формат?
Тогда не знаю.

Но мне самому интересно как извлечь что-то из 1C
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32417931
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, не очень понятно из формулировки, что же все-таки нужно.

автор
но для аска 6t и 6T порову..., как тогда связывать таблицы?


Что значит "порову..."? Что это значит вообще?

Если нужно чтобы Access различал регистр, то надо сделать
CollatingSequence=Ansi
Если нужно чтобы Access не различал регистр, то надо сделать
CollatingSequence=International
почему это так не знаю.
Я пробовал на файле (.dbf)

Exact = 00 или Exact = 01 действительно не работает
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32417932
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не Ansi
а Ascii
ошибся
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32418790
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
порову=поровну, т.е. однофикственно, т.е. 6t=6T

CollatingSequence=Ansi
Если нужно чтобы Access не различал регистр, то надо сделать
CollatingSequence=International


в каком месте?


мне надо, чтоб в запросе при связи двух таблиц по строковым полям поля с 6t и 6T не связывались.

из 1С можно вытащить (7.5) у меня есть мдб , на его примере можно
куда скинуть?
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32419444
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял вопрос сводится к следующему:
Может ли Access по-умолчанию сравнивать строки как бинарные данные? Те во всех JOIN-ах использовать сравнение строк с учетом регистра.
Думаю что нет, не может. Но хотелось бы услышать еще мнения на этот счет.

Как решить эту проблему.
Нужно вспомнить, что Access может делать JOIN не только по значениям поля, но и по выражениям.

Те мы можем сделать такой JOIN
Код: plaintext
1.
ON (StrComp(T1.Field1, T2.Field2,  0 ) =  0 )



Тогда получим то, что нужно, те бинарное сравнение.

Если в таблицах T1, T2 есть индексы для полей T1.Field1, T2.Field2, то можно слегка оптимизировать запрос, написав

Код: plaintext
1.
2.
3.
4.
5.
...
INNER JOIN ... ON T1.Field1 = T2.Field2
...
WHERE
ON (StrComp(T1.Field1, T2.Field2,  0 ) =  0 )


Те мы по JOIN выбираем записи пользуясь индексом, а далее отсеиваем ненужные записи с помощью WHERE. В некоторых случаях, возможно, это будет быстрее.



Что касается CollatingSequence.
Как ни странно, для присоединенных таблиц можно задать способ сравнения текстовых строк.
CollatingSequence = "Ascii" - сравнение бинарное
CollatingSequence = "International" - сравнение без учета регистра

Те если бы все таблицы в JOIN выражении были бы присоединенными, то можно было бы это использовать.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32419543
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы хотел уточнить в каком месте дада сделать эту установку
CollatingSequence = "Ascii" - сравнение бинарное
CollatingSequence = "International" - сравнение без учета регистра


а таблицы 1С все присоединенные.

вариант предложенный я буду пробовать.

только все функции замедляют работу.....
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32419592
простой эксперимент:
1. создаем таблицу формат dbase5 (из Acs97, экспортом). Подключаем и видим, что связывается с учетом регистра

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT TAB1.ID, TAB1_1.ID
FROM TAB1 INNER JOIN TAB1 AS TAB1_1 ON TAB1.ID = TAB1_1.ID;

TAB1.ID	TAB1_1.ID
a	a
A	A
b	b
B	B


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT t.ID, UCase([t1].[ID]) AS id1
FROM TAB1 AS t, TAB1 AS t1
WHERE (((UCase([t1].[ID]))=UCase([t].[ID])));

ID	id1
a	A
A	A
a	A
A	A
b	B
B	B
b	B
B	B


смотрим, чем оно этому обязано:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function GetColOrd()
Dim db As Database
Dim tdf As TableDef
    Set db = CurrentDb
    Set tdf = db.TableDefs( "tab1" )
    Debug.Print  "db.CollatingOrder = " ; db.CollatingOrder
    Debug.Print  "tdf.CollatingOrder = " ; tdf.Fields( 0 ).CollatingOrder
    Set tdf = Nothing
    Set db = Nothing
End Function


?GetColOrd
db.CollatingOrder = 1049
tdf.CollatingOrder = 1024

для справок:
?dbSortGeneral
1033
?dbSortNeutral
1024
?dbSortUndefined
-1
?dbSortCyrillic
1049
______
резюме: читай справку по порядку сортировки. (? можно ли задать при подключении TableDef).

ЗЫ: при связи с родной аксовской таблицой (1049), связь идет с учетом регистра (как 1024).

ЗЫ1: Плюсы (супротив связи с использованием функции) - работа по индексам. Минусы - надо явно следить за порядком сортировки при подключении. Боюсь, не обойдется без эксцессов. (Не уверен, что параметры isam dbase5 на различных машинах (или для различных jet-ов (3.5/4) одной машины:

Параметры инициализации dBASE

Папка Jet\3.5\Engines\Xbase содержит параметры инициализации драйвера Msxbse35.dll, используемого при доступе к внешним источникам данных dBASE. В следующем примере демонстрируются типичные значения элементов данной папки.

- из справки (Инициализация драйвера баз данных dBASE):
(параметры реестра Папка Jet\3.5\Engines\Xbase)

win32=<путь>\MSXBSE35.dll
NetworkAccess=On
PageTimeout=600
INFPath=C:\DBASE\SYSTEM
CollatingSequence=ASCII
DataCodePage=OEM
Deleted=On
Century=Off
Date=MDY
Mark=47
Exact=Off

где:
CollatingSequence Указывает используемый при сортировке порядок символов для всех таблиц dBASE, создаваемых или открываемых с помощью ядра Microsoft Jet. Возможные значения: "ASCII" или "International". По умолчанию задается значение "ASCII". Значения имеют тип String в Windows 95 и Windows NT 4.0 или тип REG_SZ в Windows NT 3.51.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32419776
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ключ реестра
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\3.5\Engines\XBase

для Jet 4.0 заменить 3.5 на 4.0 ну я думаю это и так понятно.

Вообще, я бы просто использовал вариант с функцией. Индексы еще надо как-то подключать к Access, а может он их сам автоматически подхватит. Я не знаю. Те в этом варианте много неопределенностей. А нужно ли со всем этим связываться?
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32421026
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял , буду пробовать....

со всем этим связываться стоит или не стоит - не знаю...
а с 1С требуется. вот.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32421671
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\3.5\Engines\XBase


такого у мея нет..

а такое есть (XBase есть только в ветке с 4.0)
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\4.0\Engines\XBase


\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\3.5\Engines\.....


win32=<путь>\MSXBSE35.dll
NetworkAccess=On
PageTimeout=600
INFPath=C:\DBASE\SYSTEM
CollatingSequence=ASCII - менял...
DataCodePage=OEM
Deleted=On
Century=Off
Date=MDY
Mark=47
Exact=Off менял... (двоичное, правда, делал 00 или 11)


хотя это не помогло..... или я чё-то не так или не то
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32421686
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот этот вариант мне больше нравится
SELECT [V7_Документ Счет].Клиент, [V7_Справочник Клиенты].[ID object], [V7_Документ Счет].[ID Document's], [V7_Справочник Клиенты].[ID parent obj], [V7_Справочник Клиенты].[object description]
FROM [V7_Справочник Клиенты] INNER JOIN [V7_Документ Счет] ON [V7_Справочник Клиенты].[ID object] = [V7_Документ Счет].Клиент
WHERE (((StrComp([V7_Справочник Клиенты].[ID object],[V7_Документ Счет].[Клиент],0))=0));

что соответствует
...
INNER JOIN ... ON T1.Field1 = T2.Field2
...
WHERE
ON (StrComp(T1.Field1, T2.Field2, 0) = 0)

без ON

во первых
может быть представлено в конструкторе запросов (облегчает жизнь)
во вторых
по скорости не уступает первоисточнику

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


ежели у кого есть предложения - буду рад услышать.
...
Рейтинг: 0 / 0
1С и Аксесс......
    #32430053
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторхотя это не помогло..... или я чё-то не так или не то
менять надо в ветке для твоего jet (97 -3.5, >=2000 - 4)

менять надо CollatingSequence.
действие это возимеет после перезагрузки аксеса (вернее - енжайна) (т.е. надо выходить из аксеса-то). Не уверен, что полсе этого не потребуется ЗАНОВО подключить файл dbf (не поменять строку подключение, а "пересоздать") и заново задать индексы, если они были. (аксесс сохраняет в определении таблиц (в т.ч. подключенных) много всего, в т.ч. может (думаю даже должен) хранить порядок сортировки)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 1С и Аксесс......
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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