Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 1С и Аксесс...... / 18 сообщений из 18, страница 1 из 1
16.02.2004, 22:11
    #32411110
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
1С 7.5
связал 1С файлы с аксом - без проблем...
нашел нужные таблицы - интернет в помощь...
строю запрос ...

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

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

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

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

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


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

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

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

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


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


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

из 1С можно вытащить (7.5) у меня есть мдб , на его примере можно
куда скинуть?
...
Рейтинг: 0 / 0
24.02.2004, 14:22
    #32419444
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
Насколько я понял вопрос сводится к следующему:
Может ли 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
24.02.2004, 15:01
    #32419543
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
я бы хотел уточнить в каком месте дада сделать эту установку
CollatingSequence = "Ascii" - сравнение бинарное
CollatingSequence = "International" - сравнение без учета регистра


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

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

только все функции замедляют работу.....
...
Рейтинг: 0 / 0
24.02.2004, 15:24
    #32419592
1С и Аксесс......
простой эксперимент:
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
24.02.2004, 16:51
    #32419776
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
ключ реестра
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
\Jet\3.5\Engines\XBase

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

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

со всем этим связываться стоит или не стоит - не знаю...
а с 1С требуется. вот.
...
Рейтинг: 0 / 0
25.02.2004, 21:40
    #32421671
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
\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
25.02.2004, 22:25
    #32421686
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
вот этот вариант мне больше нравится
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
03.03.2004, 18:21
    #32430053
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1С и Аксесс......
авторхотя это не помогло..... или я чё-то не так или не то
менять надо в ветке для твоего jet (97 -3.5, >=2000 - 4)

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


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