Рассылка статей | Выпуск 30. TreeView и защита базы
Leadersoft.ru

Рассылка статей

Программирование и готовые решения

В этом разделе сайта дается информация от https://leadersoft.ru о статьях по программированию, ответах на вопросы и др. Статьи рассылаются подписчикам и публикуются на разных сервисах. Возможно некоторая информация устарела и ссылки не работают, но эти сведения могут быть полезны, если Вы серьезно занимаетесь разработкой баз данных

Выпуск 30. TreeView и защита базы

Вакансия руководителя.  Нам нужен руководитель, но при этом разбирающийся в вопросах программирования и создания баз данных. Вот образец подходящего нам резюме. Отличное знание компьютерной техники и специального торгового оборудования (контрольно-кассовые машины, оборудование для штрихового кодирования, электронные весы, системы защиты от потерь Sensormatic, Мето). Навыки программирования в  Windows NT, знание специализированного  ПО: Cупермаг,  Супермаг- УКМ (<Сервис Плюс>), БЭСТ (<Интеллект Сервис>), IAB-Trade (<Интерартбазар>/IBS), Компас (<Инкомсофт>), R-Keeper (VSC), 1С. Участие в крупных проектах по автоматизации торговых предприятий. Проведение предпроектного обследования в области комплексной автоматизации торговых  предприятий. Последующая реализация этих проектов с внедрением конкретных систем, знание технологии розничной торговли.  Опыт руководства коллективом до 10 человек, работа с клиентами, проведение переговоров, заключение контрактов. Желательно знание Windows NT и Java, понимание принципа работы интернет - магазина
Зарплата: 1000$
Город: Москва
Режим работы: Полный рабочий день
Образование: Высшее
Пол: Мужской
Возраст: 25-40
Контактное лицо: Станислав Гудилин

Новости магазина
    В магазине "Лидер Access" появилась новая программа "Авансовые отчеты". Применяется в бухгалтерии. В программе есть справочники: "Статьи затрат", "Сотрудники", "Участки". На базе их создаются отчеты. Цена программы 250 рублей + НДС. Защищена от изменений. Автор: Олег Кошевой.
Новости сайта
27.04.2001. На сайте добавился дополнительный комментарий и дискуссия по подписке с Андреем Беляковым по компиляции в базе данных. Смотрите 28 выпуск подписки 341 вопрос.

Ответы на вопросы

   Персональное спасибо Инне Соколовой за помощь в ответах на вопросы. 
Вопрос 151 (05.01.2000) Windows'95. MS Access 2.0 Все работает нормально. Нужен WORD'97. Установка MS Office 97 _БЕЗ_ MS Access'97. Почему-то пропадает MS  Access  2.0. Вероятно, винда спросила что-то типа "обнаружены лишние  копии  офиса,  их  удаление  никак  не  повлияет на ...". Очевидно  повлияло, т.к. при последующей установке MS Access 2.0 на уже установленный MS Office 97 получаем следующее: Access  2.0  спокойно создает новые базы и работает с ними, а при открытии  старых,  т.е.  созданных  ДО установки офиса-97, выдает ошибку "такой-то файл поврежден или не является файлом MS  Access" На другой машине с Access 2.0 эти-же файлы нормально работают. Как быть? (При  попытке  преобразовать  mde  версии  2.0  для  MS  Access 97 выдается  "ошибка  компиляции",  а  т.к.  модулей там навалом, то переписывать под Access-97 не стал. Долго, да и лень.)
   Ответ. Инна Соколова. Порядок установки должен быть такой. Сначала ставим OFFICE'97, можно вместе с Access. Потом ставим Access 2.0 в свою директорию, например ACCESS, и в свою группу, например Microsoft Office. Все работает. По умолчанию запускается Access 2.0. Правда у меня нет файлов .mde , а только mdb
Вопрос 219(06.02.2001) Как часто Вы пользуетесь элементами ActiveX, а именно FlexGrid, DataGrid и TreeView? (кстати справки по этим элементам в Офисе почему то нет) В хелпе(MSDN для VB) написано, что если использовать эти элементы мне нужно с ними будет поставлять файл mscomctl.ocx. Неужели это верно и для Аксесс, или эти элементы входят в стандартную поставку офиса
  Ответ 1. Я бы сказал так, что элементы FlexGrid и DataGrid практически не применяю (справедливо для Access, а не VB). Напротив элемент TreeView имеет повышенное внимание у заказчиков. Примерно 9 из 10 хотят его куда-нибудь добавить. Например, были разговоры по применению у юридической компании (для учета договоров в формате word и excel), у производственной фирмы (для учета электронных компонентов) и в торговых компаниях. Так что советую его серьезно изучить. Надо отметить, что элемент TreeView, с моей точки зрения, достаточно капризный и имеет много "проблем" в разных операционных системах. Например, если при открытии формы в событии Open (не Load) Вы поставите загрузку узлов дерева, то получите только "каркас" (дерево без текста). Справедливо - для Windows 2000, но не Windows 98. Исправить ошибку бывает очень сложно, даже прямой ввод текста не помогает. Бывает при редактировании класса разрушается вся база данных. Есть и другие ошибки, которые предлагается исправить через api-интерфейс. Подробности смотрите в библиотеке разработчика MSDN.
   В файле la_activex.mdb есть пример 5 по применению TreeView. Он основан на создании нового класса MicrosoftTree и имеет большую надежность, чем создание дерева без класса. Все события дерева отображаются в форме. Для операций Drag & Drop также показано добавление узла красным цветом.
   Пример дан в сокращенном варианте. Коммерческая версия имеет больше возможностей. Она позволяет привязать TreeView к любой таблице, сохранить дерево после редактирования, удаления и сортировки узлов, отобразить всплывающее меню и иконки, позволяет в операциях drag & drop изменять drag-иконку и работать с подчиненными узлами.
   А теперь изучите класс для работы с TreeView

' Объявляем класс Tree с событиями
Public WithEvents Tree As TreeView

' Объявляем собственное событие для сообщений в главной форме
Public Event progress(strMsg As String)

' Переменные для сохранения узлов в операции DragDrop
Private Type DropDrag
   idxStart As Long ' Начальный узел перемещения
   idxEnd As Long ' Конечный узел перемещения
End Type

'События при создании/уничтожении класса. Можете добавить в них свои функции при создании или уничтожении дерева
Private Sub Class_Initialize()
Private Sub Class_Terminate()

' События до и после редактирования текста узла
Private Sub Tree_BeforeLabelEdit(Cancel As Integer) ' Перед редактированием
Private Sub Tree_AfterLabelEdit(Cancel As Integer, NewString As String) ' После редактирования

' События мышки при работе с узлами дерева
Private Sub Tree_NodeClick(ByVal node As node) ' Выбор узла
Private Sub Tree_NodeCheck(ByVal node As node) ' Установка флажка
Private Sub Tree_Expand(ByVal node As node) ' Расширение узла
Private Sub Tree_Collapse(ByVal node As node) ' Сворачивание узла

' События при управлении левой кнопкой мыши
Private Sub Tree_Click() ' Одно нажатие
Private Sub Tree_DblClick() ' Двойное нажатие

' События клавиатуры
Private Sub Tree_KeyUp(KeyCode As Integer, ByVal Shift As Integer)
Private Sub Tree_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
Private Sub Tree_KeyPress(KeyAscii As Integer)

' События типа DragDrop. Возможны только при настройках TreeView: OLEDragMode = ccOLEDragAutomatic и OLEDropMode = ccOLEDropManual

' Событие мышки, а также OLEStartDrag используем для определения выбранного узла для перемещения.
Public Sub MouseDown(Button As Integer, Shift As Integer, x As Long, y As Long)

' 1 dragdrop. Начало перемещения. Используется для настройки режимов перемещения или копирования.
Private Sub Tree_OLEStartDrag(Data As DataObject, AllowedEffects As Long)

' 2 dragdrop. Изменение координат мыши x и y. Используется для изменения режимов dragdrop. Для работы с узлами используем DropHighlight и HitTest(X, y)
Private Sub Tree_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)

' 3 dragdrop. Событие срабатывает после OLEDragOver. Используем для определения режима перемещения
Private Sub Tree_OLEGiveFeedback(Effect As Long, DefaultCursors As Boolean)
...
' 4 dragdrop.  Последние событие до завершения перемещения. Используем для определения конечного узла перемещения
Private Sub Tree_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

' 5 dragdrop.  Конец перемещения. Используем для управления узлами (перемещением, удалением, копированием) выбранными до и после перемещения
Private Sub Tree_OLECompleteDrag(Effect As Long)

' Функция сообщающая о получении событий
Private Function funPrintProgress(myMsg As String)
RaiseEvent progress(myMsg) ' Генерируем событие для узла
End Function

' Главная функция загрузки узлов из таблицы
Public Function Load(strSQL As String) As Boolean
Dim myУзел As String, myКлюч As String, idx As Long
Dim rst As ADODB.Recordset
On Error GoTo 999

' Загрузка дерева
Set rst = New ADODB.Recordset
rst.Open strSQL, Application.CurrentProject.Connection
Me.Tree.Nodes.Clear
Do Until rst.EOF
' Создание узла и его ключей
myУзел = "la_" & rst!Relative
myКлюч = "la_" & rst!Key
If Not IsNull(rst!Relative) Then
idx = Me.Tree.Nodes.Add(myУзел, tvwChild, myКлюч).Index
Else
idx = Me.Tree.Nodes.Add(, , myКлюч).Index
End If
' Изменение нового узла
With Me.Tree.Nodes(idx)
.Text = Nz(rst!Text)
.Selected = True
End With
rst.MoveNext
Loop

' Настраиваем класс
With Me.Tree
' Разрешаем операцию DragDrop
.OLEDragMode = ccOLEDragAutomatic
.OLEDropMode = ccOLEDropManual

' Стили дерева
.Style = tvwTreelinesPlusMinusText
.LineStyle = tvwRootLines ' Использование корневого узла
.Indentation = 300 ' Длина штриха узла
.Checkboxes = True ' Показываем флажки
End With

Load = True

998:
rst.Close
Set rst = Nothing
Err.Clear
Exit Function
999:
Load = False
MsgBox Err.Description
On Error Resume Next
Resume 998
End Function
   Ответ 2. Элемент TreeView входит в поставку Windows (98-2000) или Office (97-2000), но точно не проверял. Если у Вас установлены эти программы (по умолчанию), то проблем с ним быть не должно.
Вопрос 292(22.03.2001) У меня возникла странная ситуация с Access 2000, а именно: на моей домашней машине при программировании я не обнаружил в типах величин Database. То есть, при написании процедуры для какого либо события в форме (допустим для нажатия кнопки), мне необходимо описать переменную dbs как объект-базу. Обычно я пишу следующее:
dim dbs as database
При написании данной строки программы после ввода слова as Visual Basic выдает окно-список с возможными типами величин для данной переменной. Среди всех этих типов я не нахожу тип Database-его просто нет. Соответственно, если я все же пишу данную переменную под тип database и запускаю программу, на данной строке возникает следующая ошибка:
Compille error
User-defined type not defined
Здесь же можно добавить, что исчез еще и тип Databases. В то же время на этой же моей домашней машине есть базы данных, написанные мною так же в Access 2000, но на другой машине. Назовем эти базы так: База1-состоит из таблиц и форм и База2-состоит только из таблиц. Так вот, для Базы1, где есть формы такой проблемы нет. Там все нормально работает, при добавлении, изменении и даже при создании внутри базы новой формы, все типы величин присутствуют, тип database работает и в меню описания данных присутствует, а вот в Базе2, где не было форм, проблема осталась та же. Ситуация абсолютно замороченная с моей точки зрения, но все же может что-нибудь посоветуете?
   Ответ. Прекрасный вопрос. Детально описана проблема настройки ссылок. Прежде всего он будет полезен для тех, кто только что перешел на Access 2000. Часто "новички" при переходе от Access 97 к 2000 забывают установить ссылки на DAO (там находится объект database). По умолчанию, при создании новой базы данных, создается ссылка на ADO, а DAO нет. Для исправления ошибки в редакторе VBA (Tools-References...) установите ссылку на Microsoft DAO 3.6 Object Library.
Вопрос 294(22.03.2001) Ошибочная ситуация при попытке присвоения значения "" переменной String в переменную Long через функцию CLNG. Возникает ошибка, выполнение программы останавливается. Обработчик аварийных событий на это никак не реагирует, не позволяя тем самым автоматизировать обработку ошибки. Вот пример кода:
   Dim s As String, l As Long
   s = Null2Str(Me.God.Value)
   On Error GoTo ConvErr
      l = CLng(s)
   On Error GoTo 0
Посоветуйте что-нибудь. Может это зависит от каких-то настроек среды? Или я столкнулся с плохой версией MSOFFICE?
  Ответ. Вот небольшая программа для проверки обработчика ошибок. Запустите ее. Если сообщение "-555, Проверка ошибки" появиться на экране, то настройка среды Access у Вас правильная.
Public Function funTestError()
On Error GoTo 999
Err.Raise -555, , "Проверка ошибки"
Exit Function
999
MsgBox Err.Number & ", " & Err.Description
End Function
  P.S. Возможно, что ошибок нет в вашем коде, но тогда используйте Debug.Print для проверки данных внутри программы..
Вопрос 299(27.03.2001) Вопрос по dbf. Импорт как и связывание трудностей не вызывает. Проблема в том, что при построении запроса не учитывается регистр букв. Например, есть такие коды в справочнике 142Ю  и  142ю. Есть остатки (напр. 142ю - 100, 142Ю  -  200). При построении запроса (наименование  -  кол-во) получаю
             142ю  -  100
             142ю  -  200
             142Ю  -  100
             142Ю  -  200.
  Ответ. Надо проверять структуру Вашего запроса. Регистр букв может и не учитываться при сравнении строк. Попробуйте использовать в запросах функцию StrComp(MyStr1, MyStr2, 0) с разными режимами сравнивания. Другой вариант заключается в переводе полей в числа и в сравнении их.
Вопрос 302(28.03.2001) Как документ распечатать на принтере под Access, Word или Excel.
  Ответ. Не достаточно точный вопрос. У каждого офисного приложения есть команда "Печать". Ищите ее в разделе Файл. Есть также примеры по клиентам автоматизации. Для Access можно открыть отчет и сразу послать его на печать.
Вопрос 309(3.04.2001) При внесении изменений в отчеты, меняются параметры страницы на значение 25,4мм (значение по умолчанию), где можно изменить это значение, либо каким программным способом это значение можно поменять.
  Ответ. В Access 2000 возможна потеря настроек отчета. Решение ищите в статье 8 данной подписки.
Вопрос 316(12.04.2001) Как установить "полное" имя контрола в субформе в виде: Forms!NameOfMainForm!NameOfSubform.Form.NameOfСоntrol и возможно ли это вообще?
   Ответ. Можно установить имя для любого объекта в базе данных. Обращения к подчиненной форме есть в примерах и справке. Например, [Form_Пример 03].fun1... Ниже приводится 3 примера, хотя можно придумать и другие
      Application.Forms(0).Controls(8).Visible = False '1 пример
      Application.Forms.Item(0).Controls.Item(8).Visible = False '2 пример
      Application.Forms("Массивы Access").Controls("Линия1").Visible = False '3 пример
Вопрос 320(16.04.2001) В подчиненном отчете есть флажок "Оплата в гривнах", а в главном - надпись"USD", которое должно быть невидимым, если флажок установлен. При попытке проверить условие с помощью If...Then (например If [Подчиненный_отчет].Report![Оплата в гривнах] = True Then [USD].Visible = False) возникает ошибка "выражение не содержит значения" Возможно ли, вообще, ссылаться на значения флажка.
   Инна Соколова . Ссылка на значение флажка возможна, только наоборот - из подчиненного отчета в главный. Это можно сделать в процедуре на свойство "форматирование". И еще надо уточнить, на какое значение ссылаться. Для этого можно просто вывести это значение с помощью msgbox.
  Виктор Конюков . При обработке событий отчета желательно научиться использовать ссылки таким образом: Me.Section(acDetail).Controls("Дата")
Вопрос 322(18.04.2001) При установлении связи access 2000 - dbf ( с memo полями -dbt) связь устанавливается, но таблицу открыть нельзя. Если memo поля пустые, то можно! SR-1 и ODBC установлены. В чем может быть дело?
   Ответ. Если часто работаете с dbase, то советую изучить ODBC драйверы (dbf) других поставщиков (например, Borland). У Microsoft он имеет некоторые ограничения, детально не изучал, но могу сказать, что ODBC драйверы используют api-интерфейс. И здесь не мало ошибок можно спрятать. С другой стороны, есть в Access 2000 возможность использовать более современные способы связи, например, OLE DB.
Вопрос 324(20.04.2001) Добрый день, у меня вот какой вопрос возник можно ли скомпилировать Access приложение так чтобы оно работало потом как exe файл на другом компьютере, даже если на нём сам Access не установлен ???
  Ответ. Невозможно. Известно 2 обходных маневра по которому идут разработчики
   • конвертируют программу в Visual Basic. Программа называется AccessToVB;
   • покупают Microsoft Office 2000 Developer. Это специальный выпуск Office, предназначенный для разработчиков, создающих и внедряющих такие предложения. В этот продукт входит приложение Access Run Time, которое Вы можете распространять без лицензионной оплаты. Используя мастер упаковки и развертывания (Package and Deployment Wizard), Вы сможете создать "дистрибутив" и распространять свою программу даже на те компьютеры, где нет Office 2000 и Access. Недостаток такого распространения то, что у Вас увеличивается размер программы.
Вопрос 327(20.04.2001) Возможно - ли динамически менять источник данных для подчиненной формы. Все перепробовал, да и в справке ничего нет.
   Ответ. Можно. Примеры на эту тему есть на сайте, в справке и т.п. В классе подчиненной формы создайте функцию общего доступа, т.е. Public {Me.RecordSource=}, и применяйте ее когда хотите.
Вопрос 343(03.05.2001) Ecli netrudno, podskajite pojalusta kak v  FORM CAPTON-pisat na nacionalnom iasike (russkii y menia poluchaetcia), kogda meniau v DESKTOP-e meniau MESSAGE BOX-e posle perepagrusk vosstanovlivaetsia.
  Ответ. Для ввода каких-либо знаков отличных от стандартной кодировки можно воспользоваться клавишей Alt. Удерживая ALT наберите на расширенной клавиатуре 0169 и отпустите ALT. В результате Вы получите символ ©. Чтобы полностью ответить на Ваш вопрос надо еще знать какие наборы символов установлены у Вас.
Вопрос 344(03.05.2001) У меня часто появляется сообщение о недостатке памяти при работе с созданной в Access 2000 базой. После закрытия приложения ресурсы ОЗУ системы не восстанавливаются. ОЗУ у меня 64 МГ, но та же проблема возникла на машине со 128 МГ ОЗУ, куда я скопировал свою базу. Access ставили по-хорошему: сначала
на отформатированный диск - Windows 98, потом - Office 2000. В учебнике Джона Вейскоса вообще сказано, что достаточно 32 МГ ОЗУ. Пенечек у меня - 366-й. Но я каждый раз вынужден перегружать тачку для продолжения работы. Да и база простенькая, всего 1 МГ, пустая почти. Создал даже новый пользовательский интерфейс без локалки, оптимизирую базу, и ничего не помогает. Диск не переполнен.
   Ответ. Проверяйте офис и программный код. Выяснено на практике, что  64 МБ достаточно для работы Access 2000 как в сети так и на одном компьютере. Читайте также решение аналогичных проблем на сайте. Для проявления ошибок создайте пустую базу данных и закачать туда формы и другие объекты.
Вопрос 345(03.05.2001) Есть необходимость сформировать отчет в котором первый лист отличается от всех последующих, хотя источник записей у них один. Лист этот отличается внешним видом, для формирования которого заголовка, верхнего колонтитула и области данных отчета не достаточно (нижний колонтитул задачи не решает.
  Ответ. Создайте подчиненный отчет и добавьте его в основной. Пример создания подчиненного отчета есть на сайте в файле la_report.mdb (N3)
Вопрос 346(03.05.2001) Есть ли какая-либо возможность работать с Access2000 только через VB-приложение, не позволяя пользователю лазить в MDB-file, просматривать оттуда таблицы таблицы и создавать запросы? У меня несколько сотен пользователей распределяемого VB-Access приложения. Возможности перейти к технологии клиент-сервер нет по политическим мотивам. Обязательно находятся "умельцы" уничтожающие данные напрямую из MDB-file при его прямом просмотре. Бэкап при этом они часто уничтожают тоже. Объяснить им что-либо не представляется возможным из-за крайней тупости местных жителей и их неспособности к IT-технологиям (действо происходит в Канаде).
    Ответ. Во первых, можно посоветовать поставить на mdb файл пароль и ограничить доступ к объектам базы данных через применение системных файлов *.mdw, но в этом случае придется переписывать весь код. Но с другой стороны можно попробовать защитить mdb файл без установки пароля и привиле��ий доступа.
   1 способ. Подробно описан в примере 8 файла la_prot.mdb. Сущность его - при открытии базы данных надо погасить важные таблицы (запросы) и их поля, а вместо этого подсунуть пользователям "мусор", состоящий из не нужных таблиц. После открытия базы данных пользователь не сможет увидеть объекты, но даже если он догадается открыть таблицу, то там не будет полей. Вот примеры кода:
Application.SetOption "Show Hidden Objects", False ' Настраиваем базу
Application.SetHiddenAttribute acTable, tdf.Name, True ' Гасим таблицу
fld.Properties("ColumnHidden") = True ' Гасим поле таблицы
   2 способ. Он подробно описан в примере 9 файла la_prot.mdb с примерами для защиты таблиц и модулей. С помощью этого способа можно закрыть доступ к любому объекту. Сначала Вы защищаете программу от кнопки Shift. После этого создаете фоновую программу. Запускаете ее через макрос AutoExec или невидимую форму, которая будет проверять загрузку таблиц,  модулей и т.п. и обрабатывать эти события так, как Вам нужно. В этом случае хотя пользователь и будет видеть объекты базы данных, он не сможет их изменить. Вот пример кода для защиты таблиц и запросов
While (FlagExit) ' Замкнутый цикл с проверкой
For Each tbl In Application.CodeData.AllTables
If tbl.IsLoaded Then
DoCmd.Close acTable, tbl.Name ' Закрываем таблицу
'Application.Quit acQuitSaveNone ' или выходим из базы
End If
Next tbl
   Далее для надежности скомбинируйте оба способа для защиты базы данных. Советую также, применить в модуле специальный запрос и "схватить за руку" хулиганов, а потом программным путем "разобраться" с ними. Вот этот запрос: Set rst = CurrentProject.Connection.OpenSchema(-1, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}"). Обрабатывая его поля, Вы сможете "вытащить" имя компьютера, пользователя и другую информацию (смотрите пример 10 файла la_prot.mdb).
   P.S. Если Ваш канадский босс пожертвует немного средств, то по краткосрочному контракту можно и посложнее сделать защиту.
Вопрос 347(07.05.2001) Столкнулся с такой нехорошей ситуацией: оператор Like в запросе с аргументами "г*", "е*", "к*" не выдает записей, начинающихся с этих букв :-(  (Ассess 2000, без SR, равно как и с SR1 и с SR1а) Так кстати происходит и при попытке установить фильтр с этими условиями ... Пожалуйста подскажите как победить эту ситуацию (или хотя бы обойти - выбрать записи, начинающиеся с г, е, к)
   Ответ. В примере 3 файла la_form (контекстный поиск) оператор Like с данными аргументами работает. Исключение составляет только то, что при поиске не учитывается регистр букв (к=К). Для точного сравнивания можно использовать бинарное сравнивание в запросах. Смотрите функцию StrComp.
Вопрос 349(07.05.2001) Помоги пожалуйста решить такую проблему.
Access-2000 перестал "видеть" JPEG - файлы. Переустановка ОФИСА полностью - успеха не принесла. Речь идет о базе данных, в которой на экран выводятся изображения рисунков. BMP показывает, JPEG - нет. В WINDOWS GPEG зарегистрирован. Пробовали в офисе сначала убрать JPEG фильтр ( при установке) , затем снова поставить, все равно не помогло. Что делать?
    Ответ автора. Кормилкин Юрий. Раньше регистрация JPEG была нормальной и файлы открывлись в ACCESS хорошо. Но потом менялся Windows'98 (на SE) и после этого файлы JPEG перестали читаться. (Хотя по двойному щелчку в проводнике они попадали в INTERNET EXPLORER так же, как и BMP). Далее дважды переустановка OFFICE результатов не принесла, была даже попытка переустановить поддержку JPEG формата в ACCESS (вначале их специально убрал, затем поставил опять ), но удача была не на моей стороне.  Наконец, все решилось повторной установкой Windows 98SE.
Вопрос 351(14.05.2001) Как в элементе Календарь MSCAL.Calendar.7 сделать дату текущую при открытии, а то совсем неудобно переводить дату постоянно...
   Ответ. В примере 6 la_activex.mdb подробно описаны события для календаря, а также показано несколько способов настройки его данных на любую дату.

Добавить комментарий

Loading