powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
25 сообщений из 280, страница 11 из 12
интересные факты / наблюдения / анализ чужих и собственных решений
    #38066201
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин сам файл не сцепился с первого разу.
Исправляю. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38066305
адв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studierenБлин сам файл не сцепился с первого разу.
Исправляю. :)А ведь и вправду - юбилей ( клац )

10 лет - круглая дата
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38066395
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
адв,

Честно говоря я не знал (собственно и не искал), что в форуме уже были темы о реестре "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]".

Ну если Вы всё знаете может подскажите что нужно исправить в Win 7, чтобы и там можно было копировать любой текст из VBA?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38066416
адв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

под вин7 не работаю, только тестирую.
Не подскажу, к сожалению, ибо не сталкивался с проблемой.

зы. А где я писал, что всё знаю? ;)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38103507
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у контролов (textbox, combobox) форм свойство "KeyboardLanguage" (Язык клавиатуры). Если поставить там "English", то при получении фокуса данным контролом язык клавиатуры сразу переходит на английский. Штука очень полезная, но вот беда! Совсем не работает в табличной форме. Выкрутился так:
В свойство "OnGotFocus" (Получение фокуса) написал:
Код: vbnet
1.
=SysCmd(710;67699721)


Здесь 67699721 так сказать "InputLocaleID" для английского языка, если верить вот этой статье .
Ну а для русского языка - 68748313.
Допустим мы не знаем этот код для других языков. Как же узнать?
Всё очень и очень просто. Сначала вручную сами переводим язык клавиатура на нужный язык и после этого в окне отладки пишем так:
Код: vbnet
1.
2.
?SysCmd(711)
 68748313 


После чего и получим нужный код "InputLocaleID".

P.S.
А в табличных формах есть ли другой способ перевода языка клавиатуры? Только вот Win API не самое лучшее решение, т.к. в зависимости от 32- или 64-разрядной ОС код может сработать, а может и нет.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38103527
ZezaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren..., т.к. в зависимости от 32- или 64-разрядной ОС код может сработать, а может и нет.
дико сорю
нам посчатливилось досталось -- 'безвременье'

рицепт -
- ждать....)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38161855
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то я уже спрашивал вот здесь 11371576 вопрос, который звучит примерно так:
Если у формы источником записей служит таблица, линкованная через ODBC в SQL Server, то как можно поймать текст сообщения об ошибке именно сервера?

P.S. Версия: А2003, формат: mdb.

Нашёл по теме вот такую статью ACC2000: Cannot Trap Specific ODBC Errors on OnOpen Property of a Form
Там как раз таки написано о причине данной проблемы:
ODBC error messages normally consist of two components. The first component is error 3146, whose description is:
ODBC--Call failed
The server-specific error information is contained in the second component, from which you can retrieve an error number and a description such as:
[Microsoft][ODBC SQL Server Driver][SQL Server] <Server-specific error message> (#<error number>)

Ну и совсем слегка переделал тот код и у меня получился следующее:
Код: 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.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
Public Function SaveRecODBC(Frm As Form) As Boolean
    Dim Ctrl As Access.Control
    Dim Fld  As DAO.Field
    Dim E    As DAO.Error
    
    On Error GoTo ODBC_Error
    With Frm.RecordsetClone
    If Frm.Dirty = True Then
        If Frm.NewRecord = True Then
            .AddNew
            For Each Ctrl In Frm.Controls
                Select Case Ctrl.ControlType
                Case acTextBox, acComboBox, acListBox, acCheckBox
                    Select Case Left$(Ctrl.Properties("ControlSource").Value & "=", 1)
                    Case "="
                    Case Else
                        If IsNull(Ctrl.Value) = False Then
                            For Each Fld In .Fields
                                If Fld.Name = Ctrl.Properties("ControlSource").Value Then
                                    Fld.Value = Ctrl.Value
                                    Exit For
                                End If
                            Next Fld
                        End If
                    End Select
                End Select
            Next Ctrl
            .Update
        Else
            .Bookmark = Frm.Bookmark
            .Edit

            For Each Ctrl In Frm.Controls
                Select Case Ctrl.ControlType
                Case acTextBox, acComboBox, acListBox, acCheckBox
                    Select Case Left$(Ctrl.Properties("ControlSource").Value & "=", 1)
                    Case "="
                    Case Else
                        For Each Fld In .Fields
                            If Fld.Name = Ctrl.Properties("ControlSource").Value Then
                                If Fld.Value <> Ctrl.Value Or _
                                        IsNull(Fld.Value) <> IsNull(Ctrl.Value) Then
                                    Fld.Value = Ctrl.Value
                                End If
                                Exit For
                            End If
                        Next Fld
                    End Select
                End Select
            Next Ctrl
            .Update
        End If ' End If Frm.NewRecord
    End If ' End If Frm.Dirty
    End With
    SaveRecODBC = True

Exit_SaveRecODBCErr:
    Set Ctrl = Nothing
    Set Fld = Nothing
    Set E = Nothing
    Exit Function

ODBC_Error:
    Dim strTxt As String
    Dim strErr As String
    
    For Each E In DBEngine.Errors
        strTxt = E.Description
        If strTxt Like "*[[]SQL Server[]]*" Then
            strTxt = Mid$(strTxt, InStr(1, strTxt, "[SQL Server]") + 12)
            If strTxt Like "*([#]*" Then
                strTxt = Left$(strTxt, InStr(1, strTxt, "(#") - 1)
            End If
            ' Если уже имеется как минимум 1 текст ошибки на русском языке, то текст ошибки _
              на английском можно пропустить.
            If Len(strErr) = 0 Or E.Description Like "*[А-я]*" Then
                strErr = strErr & vbCrLf & strTxt
            End If
        End If
    Next E
    MsgBox Mid$(strErr, 3)
    SaveRecODBC = False
    Resume Exit_SaveRecODBCErr
End Function

Function BeforeUpdateOfForm(Optional Frm As Access.Form) As Integer
    If Frm Is Nothing Then Set Frm = Screen.ActiveForm
    
    ' Попробуем сохранить изменения.
    If SaveRecODBC(Frm) = True Then
        Frm.Undo
        ' Если текущая запись новая, то следует переходить на последную запись.
        If Frm.NewRecord = True Then
            DoCmd.GoToRecord acForm, Frm.Name, acLast
        End If
        BeforeUpdateOfForm = 0
    Else
        ' Елси не удалось сохранить изменения, то следует вернуть -1 для отмены _
          обновления.
        BeforeUpdateOfForm = -1
    End If
End Function

...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38161862
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь код, который я "спрятал" под спойлер нужно держать в отдельном модуле.
Ну а в форме на событие BeforeUpdate пишем так:
Код: vbnet
1.
2.
3.
Private Sub Form_BeforeUpdate(Cancel As Integer)
    BeforeUpdateOfForm Me
End Sub

или в свойство "До обновления" пишем так:
=BeforeUpdateOfForm([Form])

Вопрос:
А нет ли каких-либо подвох в этом коде? Ну я имею ввиду нет ли там косяков и не будет ли где-то поджидать "сюрприз"?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38246569
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный факт я обнаружил. Если мы переменную величину объявляем как Integer, Date и т.д., то переменная ведёт себя также соответственно как Integer, Date и т.д., но некоим образом не как Variant. По идее всё так. Но! Бывает оказывается и исключение! :)
Если в модуле объявляем переменную как Private или через Dim, то тут происходит нечто необычное.
Код: vbnet
1.
2.
Private I As Integer
Dim D As Date


Теперь если в окне отладки просто запустить вот такой код, то MsgBox как не странно будет пустым.
Код: vbnet
1.
2.
MsgBox I
MsgBox D


Если же проверить их на IsEmpty, то тут выясняется что IsEmpty(I) = True.
Вот если этих же переменных объявить как Public, то уже MsgBox не пустой.

Что это даёт в таком случае?
Бывает иногда полезным узнать программным путём "использована" ли переменная (т.е. задавали ли мы хоть какое-либо значение). Если тип Variant, то достаточно было просто проверить IsEmpty, а вот с другими типами IsEmpty всегда возвращал False. Оказывается бывает и исключение. :)

P.S. Сильно извиняюсь если баян. Из-за лени не стал искать в нашем форуме или в гугле, а сразу здесь же опубликовал. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38246577
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно! Если я в окне отладки пытаюсь передать строковую значению, то почему-то у меня VBA не ругается.
Код: vbnet
1.
I = "Test"


Как так? Значит если мы объявляем переменную как Private или Dim, то уже не имеет значение какой у него тип, всё равно будет как Varinant?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38246587
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже если у вас в модуле написано "option explicit", то для окна "immediate" это свойство не установлено. Возможно, что только по умолчанию, и где-то можно переключить, не важно.

Так вот, если переменная на момент попытки её использования еще ни разу не была использована (читай, инициализирована), то создаётся новая переменная уровня окна immediate с типом variant. Со всеми вытекающими.

В общем-то, предсказуемое поведение
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38246588
ййййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если переменные выше уровнем не удалось найти в памяти, то происходит примерно следующее:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Option Compare Database
Option Explicit

Public b As Integer
Dim c As Long

Sub Immediate()
  Static b As Variant
  Static c As Variant
  
  b = "123"
  c = "abc"
End Sub
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38246606
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ййййй,

Упппс! Привык куски своих кодов проверять в окне отладки. Как-то не подумал, что окно отладки не видит эти переменные. :)
Случайно "наткнулся" при проверке очередного своего кода и не разобрался. Первом делом подумал, что это такая особенность VBA. :)
Реально sorry! :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38247068
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал нижеследующий простейший код (Property) в MS Access и в MS Excel / Word:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Option Explicit
Dim varResult As Variant

Public Property Get Result() As Variant
    Result = varResult
End Property

Public Property Let Result(ByVal varValue As Variant)
    varResult = varValue
End Property


Если запускаю вот такой код в окне отладки MS Access, то ошибки не возникает и программа возвращает значение, а вот в Excel / Word ругается:
Код: vbnet
1.
2.
Result=10:  Run("Result")
 10


Run по разному работает в разных продуктах офиса?

P.S.
Мне нужно было передать значение какой-либо переменной БД, находясь извне (т.е. в чужой среде) и потом в MS Access прочесть это значение. Конечно можно просто сохранить это значение в какой-либо таблице и в MS Access прочесть это. Но хотелось бы избежать создание лишних таблиц. Во время эксперимента и выяснил, что Run по разному работает в разных офисных продуктах.
В связи с чем ещё 1 вопрос: как народ поступает в таких случаях?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38505385
Bryk_Alien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Условное форматирование Access 2010

Условное форматирование в акцесс 2003 было ограничено тремя вариантами

Как вы, наверное, уже знаете, в 2010 акцессе это ограничение было убрано (причём, довольно коряво). Это выражается в том, что через удобный интерфейс можно добавить хоть 100500 вариантов условного форматирования для поля. Лично я, когда проверял, остановился на 25 вариантах... Но, если вы попытаетесь считать или добавить условные форматирования посредством VBA, вам будут доступны только первые три варианта. Попытка обратиться к остальным вызовет ошибку.

Ковыряясь во внутренностях контрола, в наборе Properties я обнаружил 2 свойства:
№ 128 - ConditionFormat
№ 129 - ConditionFormat14

Оба эти Properties-а имеют формат битового поля. Только в первом случае свойство хранит информацию о первых трёх уровнях форматирования, а во втором случае - массив данных о всех условных форматированиях, которые можно присвоить контролу.

Для набора из пяти свойств, данные могут выглядеть так:
Массив данных в Hex
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
01 00 05 00 00 00 01 00 00 00 00 00 00 00 01 00 
00 00 FF 00 00 00 FF FF FF 00 0C 00 00 00 5B 00 
74 00 78 00 74 00 43 00 6F 00 6C 00 6F 00 72 00 
5D 00 3D 00 31 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 
00 00 00 01 00 00 00 FF C2 0E 00 FF FF FF 00 0C 
00 00 00 5B 00 74 00 78 00 74 00 43 00 6F 00 6C 
00 6F 00 72 00 5D 00 3D 00 32 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 01 00 00 00 FF F2 00 00 
FF FF FF 00 0C 00 00 00 5B 00 74 00 78 00 74 00 
43 00 6F 00 6C 00 6F 00 72 00 5D 00 3D 00 33 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 
00 22 B1 4C 00 FF FF FF 00 0C 00 00 00 5B 00 74 
00 78 00 74 00 43 00 6F 00 6C 00 6F 00 72 00 5D 
00 3D 00 34 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 
00 00 01 00 00 00 00 B7 EF 00 FF FF FF 00 0C 00 
00 00 5B 00 74 00 78 00 74 00 43 00 6F 00 6C 00 
6F 00 72 00 5D 00 3D 00 35 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Код хранит пять условных форматирований с разными цветами текста для условий [txtColor]=1 ... [txtColor]=5

Если этот массив данных присвоить какому-нибудь элементу в соответствующее свойство, то этот элемент станет обладать соответствующим набором условных форматирований. Так же можно передавать набор форматирований от одного контрола - другому:
Код: vbnet
1.
Me.txt2.Properties(129) = Me.txt1.Properties("ConditionFormat14")



Может, кому пригодится...
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38505396
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Bryk_Alien Условное форматирование Access 2010
Это бы в Недокументированные фичи http://www.sql.ru/forum/47491 и в Баги http://www.sql.ru/forum/85650 ...
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38534511
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть топик Саныча «Узнать программно, послан ли отчет на принтер или на предпросмотр?» . Там есть решение, суть которого – повесить на событие Format заголовка отчёта примерно вот такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ReportHeader_Format(Cancel As Integer, FormatCount As Integer)
    On Error Resume Next
    DoCmd.OpenReport Me.Name, acViewPreview
    If Err.Number <> 0 Then
        ' Отчёт отправлен на печать. Вот здесь и отмечаем в нужной таблице о данном факте.
    End If
End Sub



Когда отравляем на печать отчёта «DoCmd.OpenReport» вызывает ошибку. Как это работает не совсем понятно. Всё бы ничего, но только у меня возникла проблема. Есть у меня одна база данных, где «DoCmd.OpenReport» не возвращает ошибку, даже если с режима предварительного просмотра отчёт отправляем на печать. Вроде бы файл не испорчен, попробовал импортировать в новую базу, да и попробовал удалить все модули и воссоздать заново их (у Joss есть специальная программка, которая так и делает). Короче ничего не помогло, после чего попробовал пойти другим путём.
На печать мы можем отправить двумя способами:
1) сначала открыв отчёт в режиме предварительного просмотра и затем нажимая на Ctrl+P.
2) сразу отправляем на печать.
Код: vbnet
1.
DoCmd.OpenReport "Название отчёта", acViewNormal


Случай № 1. Если открываем отчёт в режиме предварительного просмотра, то в заголовке отчёта 1 раз происходит событие «Format» и если отправляем этот же отчёт на печать, то и данное событие совершается уже 2-раз. Стало быть, если установим глобальный счётчик внутри модуля отчёта или какую-нибудь метку, то при совершении повторного события будем знать, что отчёт отправлен на печать. Причём, даже если отчёт отправлен на печать не полностью, а только некоторые страницы (не обязательно начиная с первой стр.), то всё равно повторно происходит событие «ReportHeader_Format». Итак, повторное совершение события «ReportHeader_Format» информирует нас об отправке на печать отчёта.
Случай № 2. При открытии отчёта в режиме предварительного просмотра совершается событие «Activate», а при отправке на печать без предварительного просмотра это событие не происходит вовсе. В общем-то, логично! Стало быть, на момент «Activate» ставим метку о том, что отчёт активирован и на момент закрытия отчёта «Close» смотрим, не был ли отчёт активирован. Если отчёт был активирован, то ничего не делаем внутри события «Close». А если всё таки активации не произошло, то тогда смотрим, не был ли заголовок отчёта отформатирован хотя бы раз. Если не был, то это означает, что отчёт не открыт вовсе (ну например, из-за отсутствия данных после фильтра). А если был, то отчёт отправлен на печать без предварительного просмотра.
Вот и код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub ReportHeader_Format(Cancel As Integer, FormatCount As Integer)
    With ReportHeader
        If Len(.Tag) = 0 Then
            .Tag = "ReportHeader_Format"
        Else
            ' Отчёт отправлен на печать. Вот здесь и отмечаем в нужной таблице о данном факте.
            MsgBox "Отчёт отправлен на печать после предварительного просмотра!", vbInformation
        End If
    End With
End Sub

Private Sub Report_Activate()
    Report.Tag = "Report_Activate"
End Sub

Private Sub Report_Close()
    If Report.Tag <> "Report_Activate" Then
        If ReportHeader.Tag = "ReportHeader_Format" Then
            ' Отчёт отправлен на печать. Вот здесь и отмечаем в нужной таблице о данном факте.
            MsgBox "Отчёт отправлен на печать без предварительного просмотра!", vbInformation
        End If
    End If
End Sub



P.S. А не прозевал ли я какую-нибудь подвоху? В смысле бывают ли случаи, когда этот код не работает? У кого какие мысли?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38534678
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

капельку подправил ваш код, а то событие срабатывало даже в момент предпросмотра (на радость всё работает даже при "поднятии" экземпляра класса отчета :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38535360
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

А вот так уже не работает :(
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38535759
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

поправил, теперь и в последнем случае всё нормально отрабатывает (да, всёж ФАК иногда перечитывать надо .... )))))) чешу "репу"))))
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38545110
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подключить в референсах VBA " C:\WINDOWS\system32\scrrun.dll " (у меня Win XP, в других версиях возможно месторасположение файла чуть-чуть другое), то в списке библиотек появится " Microsoft Scripting Runtime ". Теперь нажимаю F2 и в " Object Browser " выбираю библиотеку " Scripting ". Выбираю из списка любую интересующую меня функцию и нажимаю F1, чтобы прочесть справочный материал. Всё время у меня выходило пустое окно.
Есть один замечательный топик "Программно получить список классов и всех членов этого класса из библиотеки в References" , где есть код, с помощью которого можно получить много интересных свойств библиотек. Например, " MetodHelp ". Так вот, попробовал я и этот файл " C:\WINDOWS\system32\scrrun.dll " анализировать, так у него оказывается свойство " MetodHelp " = " C:\WINDOWS\system32\VBENLR98.CHM ". Смотрю я в свой компьютер и не нахожу этот файл. Поэтому и у меня пустое окно. Нашёл в и-нете вот здесь этот файл и поместил в папку " C:\WINDOWS\system32 ". Пустое окно исчезло, то вместо него компьютер начал ругаться. Как я понял из "ругани" компа, видимо этот файл был изначально предназначен для Windows 98, а у меня Windows XP. В инете нашёл вот такой топик Associate a help file with a library in the VBA object brower . Как я понял из данного топика файл был переименован " VBLR6.CHM " и находится совсем в другом месте (в моём случае вот здесь " C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\1033\VBLR6.CHM "). Скопировал я этот файл и разместил копию в папке " C:\WINDOWS\system32 ", да и переименовал как " VBENLR98.CHM ".
И О ЧУДО!!!!!
Программа совершенно перестала ругаться и самое главное начала открывать нужный справочный материал.

P.S.
Сколько же библиотек якобы "без справочного материала"? Microsoft видимо много раз переименовал и переместил в разные папки, да так, что приходится искать очень долго, чтобы найти.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38545170
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывод:
Если вместо справочного материала получаем пустое окно, то предварительно с помощью нижеуказанной функции узнаём полное название и местоположение справочного файла.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function GetMetodHelp(FileName As String) As String
    Dim objTypeLib As Object
    Set objTypeLib = CreateObject("TLI.TypeLibInfo")
    objTypeLib.ContainingFile = FileName
    GetMetodHelp = objTypeLib.HelpFile
    Set objTypeLib = Nothing
End Function


P.S. Чтобы функция заработала, разумеется, нужно заранее зарегистрировать файл tlbinf32.dll .

После этого ищем этот файл в нужной папке. Если нет его там, то находим и размещаем туда. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38715665
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: А2003, Win XP.

Есть такой тип данных "date" в SQL Server (если не ошибаюсь начиная с версией 2005 появился этот тип данных). Когда линкую таблицу, то Access воспринимает этот тип как текст, а не дата. Причина как оказывается в драйвере. Если использовать драйвер "SQL Server", то так и происходит. Ну а если использовать более "свежий" драйвер "SQL Server Native Client 10.0", вот там "date" как дата. Ну и другие типы данных вроде бы читаются без проблем. (Недавно был топик, где об этом и было написано).
Вот только одна проблема. Если тип данных "varchar( Max )", то этот драйвер теперь совсем "плохо читает" (почему-то не показывает первые 255 символов). Сталкивался ли кто-либо с такой проблемой? Может в строке подключения что-то надо "подкрутить"?
Экспериментирую с различными строками подключения, пока безрезультатно.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38823258
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,
получить строку значений столбца запроса (сконкатенировать столбец) можно , подключив библиотеку Excel и использовав функцию Transpose из этой библиотеки , тогда эту операцию можно записать одной строкой
Код: vbnet
1.
2.
?join(excel.Application.WorksheetFunction.Transpose(excel.Application.WorksheetFunction.Transpose(currentdb.OpenRecordset("select фамилия from сотрудники").GetRows(currentdb.OpenRecordset("select count(фамилия) from сотрудники")(0)))),",")
Белова,Новиков,Бабкин,Воронов,Кротов,Акбаев,Кралев,Крылова,Ясенева
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38823332
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimport, очень спорное решение. Гораздо проще получить строку через ADO (GetString), ИМХО.
...
Рейтинг: 0 / 0
25 сообщений из 280, страница 11 из 12
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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