powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
25 сообщений из 280, страница 9 из 12
интересные факты / наблюдения / анализ чужих и собственных решений
    #37946925
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenЧтобы узнать существование файла иногда используют вот такой код:
Код: vbnet
1.
Len(Dir("C:\Test.txt"))


...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Function IsFileExists(FileName As String) As Boolean
    Dim FSO As Object   ' Scripting.FileSystemObject
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    IsFileExists = FSO.FileExists(FileName)
    Set FSO = Nothing
End Function


Другой вариант предлагает Старый Ворчун: Как проверить сущесвование фала?
Есть ещё 1 "штатный", но только слегка скрытый способ:
Код: vbnet
1.
2.
3.
4.
Function IsFileExists(FileName As String) As Boolean
    On Error Resume Next
    IsFileExists = Application.WizHook.FileExists.FileExists(FileName)
End Function


Тут "On Error Resume Next" нужен на всякий случай, типа "сеть недоступен" и т.д., и т.п.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37946930
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, очепятка. :)
Код: vbnet
1.
2.
3.
4.
Function IsFileExists(FileName As String) As Boolean
    On Error Resume Next
    IsFileExists = Application.WizHook.FileExists(FileName)
End Function
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37947670
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут слегка опять ошибся, не добавил "магический ключ" для "WizHook".
Код: vbnet
1.
2.
3.
4.
5.
Function IsFileExists(FileName As String) As Boolean
    On Error Resume Next
    Application.WizHook.Key = 51488399
    IsFileExists = Application.WizHook.FileExists(FileName)
End Function


Провел такой эксперимент: от самого минимального (-2147483648) до самого максимального (2147483647) целого числа типа long программно перебрал все значения для ключа "WizHook". Только и только в случае 51488399 WizHook работает нормально.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37960202
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то на лесенке (вот здесь 13162105 ) задал вопрос "как программно поменять папку в окне диалога". В смысле программно подменить папку таким образом, чтобы при нажатии Ctrl+O оказаться в нужной папке. Но при этом опцию "Default Database Directory" не трогать, чтобы другие базы не пострадали.
Проблему мог бы решить и простой код ChDir, который по описанию хелпа как раз таки должен был изменить текущую папку. Но проблема в том, что ChDir совсем не влияет на Ctrl+O.
Решение оказывается всё-таки существует. Вот и сам код, которого я в тот момент искал:
Код: vbnet
1.
CreateObject("WScript.Shell").CurrentDirectory="C:\"


Свойство "CurrentDirectory" оказывается не только для чтения, но и для записи.
Оно как раз таки влияет на Ctrl+O.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37998637
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А2003.
Наткнулся чисто случайно на такую вещь.
Если поменять свойство базы данных "ANSI Query Mode" на True (оказывается такое свойство по умолчанию существует для mdb файлов),
Код: vbnet
1.
CurrentDB.Properties("ANSI Query Mode") = True

то в "Сервис" ==> "Параметры" во вкладке "Синтаксис для SQL Server (ANSI 92)" появляется птичка там, где "текущая база данных".
После этого попробовал вот такой код:
Код: vbnet
1.
2.
?DCount("*", "MSysObjects", "name like '%'")
0

Как видно из результата пока что ANSI 92 "не вступил в силу". :)
По идее если стоит галка SQL Server (ANSI 92), то вместо "*" должен работать "%".
Когда программно меняю свойство "ANSI Query Mode", то такой номер поначалу не проходит. Но как только перезагружаю БД, то проходит. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #37998647
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
studierenТолько и только в случае 51488399 WizHook работает нормально.
735770
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38007740
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой dll файл, который находится по умолчанию вот здесь "C:\WINDOWS\system32\FM20.DLL". Когда его подключаем к проекту VBA, то появляется референс "Microsoft Forms 2.0 Object Library". По названию понятно, что работает с формами VBA (но не формами MS Access).
Есть полезная особенность этой библиотеки: помимо прочего работает с буфером обмена (clipboard). Может прочесть из буфера (метод GetFromClipboard) или наоборот скопировать в буфер (PutInClipboard). Вот примерчик из help'a:
GetFromClipboard
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim MyData as DataObject

Private Sub CommandButton1_Click()
    'Need to select text before copying it to Clipboard
    TextBox1.SelStart = 0
    TextBox1.SelLength = TextBox1.TextLength
    TextBox1.Copy

    MyData.GetFromClipboard
    TextBox2.Text = MyData.GetText(1)
End Sub

Private Sub UserForm_Initialize()
    Set MyData = New DataObject
    TextBox1.Text = "Move this data to the " _
        & "Clipboard, to a DataObject, then to "
        & "TextBox2!"
End Sub 


PutInClipboard
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim MyData As DataObject

Private Sub CommandButton1_Click()
    Set MyData = New DataObject
    
    MyData.SetText TextBox1.Text
    MyData.PutInClipboard

    TextBox2.Paste
End Sub

Private Sub UserForm_Initialize()
    TextBox1.Text = "Move this data to a " _
        & "DataObject, to the Clipboard, then to " _
        & "TextBox2!"
End Sub


Решил найти способ позднего подключения к этой библиотеке, чтобы не быть зависимым от версии офиса / ОС и т.д. Нашёл только 1 способ:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub PutInClipboardSomeText(SomeText As String)
    If Len(SomeText) > 0 Then
        Dim MyData As Object
        Set MyData = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        MyData.SetText SomeText
        MyData.PutInClipboard
        Set MyData = Nothing
    End If
End Sub


Вместо таинственного "заклинания" new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69} другую более понятную "формулировку" не нашёл. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38007792
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
Dim objdata As MSForms.DataObject
Set objdata = New MSForms.DataObject



http://www.cpearson.com/excel/Clipboard.aspx
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38007802
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри. я недопонял/не прочитал текст.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38008139
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenВместо таинственного "заклинания" new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69} другую более понятную "формулировку" не нашёл. :)
А нет другой формулировки. Посмотрел в "OLE/COM Object Viewer"
Может свой класс? У Гетца есть.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38009030
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studierenРешил найти способ позднего подключения к этой библиотеке, чтобы не быть зависимым от версии офиса / ОС и т.д. Нашёл только 1 способ:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub PutInClipboardSomeText(SomeText As String)
    If Len(SomeText) > 0 Then
        Dim MyData As Object
        Set MyData = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        MyData.SetText SomeText
        MyData.PutInClipboard
        Set MyData = Nothing
    End If
End Sub

Вместо таинственного "заклинания" new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69} другую более понятную "формулировку" не нашёл. :)Нет ProgID у MSForms.DataObject. Желающие могут добавить в реестр
пару строк
Код: plaintext
1.
2.
3.
4.
5.
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MSForms.DataObject]

[HKEY_CLASSES_ROOT\MSForms.DataObject\CLSID]
@="{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
и создавать объект через CreateObject("MSForms.DataObject"), но смысл при его весьма ограниченной в плане поддержки форматов функциональности ускользает.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38010897
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦаНет ProgID у MSForms.DataObject. Желающие могут добавить в реестр+
пару строк
Код: plaintext
1.
2.
3.
4.
5.
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MSForms.DataObject]

[HKEY_CLASSES_ROOT\MSForms.DataObject\CLSID]
@="{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"
и создавать объект через CreateObject("MSForms.DataObject"), но смысл при его весьма ограниченной в плане поддержки форматов функциональности ускользает.
Я так понимаю теоретически можно создать любую ветку в Win регистре да хоть "Чёрт знает что" по аналогию, ну а потом в VBA создавать CreateObject("Чёрт знает что")!
Забавно!!! Но что самое главное работает!!! :)

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

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

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

А какой смысл создавать ProgId если его нет?
Да по приколу можно в своем проекте везде создавать объект CreateObject("Хрень") и работать с ним. Если кто-нибудь и скопирует саму базу, то там (в других компах) конечно всё это не будет работать.

P.S. Это так сказать из той оперы что-то вроде "пригвоздить проект на основе серийного номера харда". :)
P.S.S. Я не сторонник радикальной защиты файла БД, а просто можно оказывается и так защитить кое-что в своей базе. :)
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38012496
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bryk_AlienЕсли зайти в
---> Панель управления –> Администрирование –> Источники данных
и попытаться настроить пользовательский ODBC, то винда выдаст ошибку 196. Это происходит потому, что вызывается настройщик для 32х разрядной системы.

Для того чтобы вызвать настройщик для 64-х битной винды нужно найти файл:
%WINDIR%\SysWOW64\odbccad32.exe
и запустить его.
Случайно наткнулся на блог Как настроить MS Access ODBC драйвер на windows7 x64 или vista x64
Там как раз об этом идёт речь.
Текст блогаОднажды возникла проблема при установке одной программы, та программа требовала настроить ODBC драйвер (microsoft access driver) на windows 7. При входе в "Источники данных (ODBC)" можно было только добавить драйвер SQL Server'а. Требуемого драйвера не было. Я перерыл множество инструкций и форумов прежде чем нашел совет, который мне помог. Вот он "How to Use Microsoft Access ODBC drivers for Vista x64/ Windows 7 x64".

Оказывается в Vista/Windows7 x64 есть две копии odbcad32.exe, один из них находится в "C:\Windows\syswow64\ ", а другой в "C:\Windows\system32\". Открывая как обычно "Источники данных (ODBC)" через "панель управления — администрирование", мы открываем второй вариант odbcad32.exe, то есть тот, который располагается в "C:\Windows\system32\" и у нас нет нужного нам драйвера ODBC!

Необходимо открыть вот этот файл "C:\Windows\syswow64\odbcad32.exe". Там без особых проблем можно установить MS Access ODBC driver.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021364
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал обычный текстовый файл "V.vbs" и написал внутри простой код:
Код: vbnet
1.
Msgbox Format(Date(), "mm.dd.yyyy")


Когда запускаю, то программа ругается.
Error: Type mismatch: 'Format'
Code: 800A000D
Source: Microsoft VBScript runtime error
Как же так?

Попробовал вот такой код в VBA, который вызывает VBScript:
Код: vbnet
1.
2.
3.
4.
5.
Dim O As Object
Set O = CreateObject("ScriptControl")
O.Language = "VBScript"
O.AddCode "Msgbox Format(Date(), ""mm.dd.yyyy"")"
Set O = Nothing


И опять программа ругается: Type mismatch: 'Format'
Это что же получается? Банальная функция Format в VB скриптах работает как-то не так?
Может как-то "по особому" надо "объяснить" ему как нужно работать с датой?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021408
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021414
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

Я так понимаю у VBScript нет такой функции Format???
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021427
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

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

msgbox другойтам где Формат написал - там кнопки прописываются. а Формата кажысь нет.
тебе влом скачать ВБСу хелп с тырнета?
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021443
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

Format-ов в VBS не один на все случаи, а 4:
FormatCurrency
FormatDateTime
FormatNumber
FormatPercent
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021471
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

Мне вообще-то нужно было дату превратить в 'yyyymmdd', чтобы отправить запрос к SQL Server. Поэтому решил использовать Format, но как-то не подумал (и не проверил), что у VBScript нету такой функции. :)
Это я по инерции пользователя VBA. :-)
Ну нет, значит нет. Буду использовать самопальную функцию.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38021488
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ILL HEADstudieren,

msgbox другой
VBScript умеет работать с Msgbox. Можете проверить. :)

ILL HEADтебе влом скачать ВБСу хелп с тырнета?
Да не влом. У меня вот здесь C:\Program Files\Microsoft Office\OFFICE11\1049\VBSCRIP5.CHM "по умолчанию" уже был хелп, видимо когда устанавливал офис там в дистрибутиве уже был.
...
Рейтинг: 0 / 0
интересные факты / наблюдения / анализ чужих и собственных решений
    #38022449
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

сильно извиняюсь. поразил приступ косоглазия.
...
Рейтинг: 0 / 0
25 сообщений из 280, страница 9 из 12
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / интересные факты / наблюдения / анализ чужих и собственных решений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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