LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 24. Запросы на выборку

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         23.02.2001
Сайт:         http://www.leadersoft.ru
Слоган:     Если база Вам нужна, в LeaderSoft зайди сперва.
Комментарий: 
      Мы разрабатываем по заказам клиентов различные программы, используя Microsoft Access. Базы данных разрабатываются "с нуля" или, используя готовые решения (Склад, Касса, Банк и т.п.), что позволяет достаточно гибко решать финансовые вопросы по оплате услуг за разработку. Для регистрации заказа заполните форму: Регистрация заказа на разработку


Описание: в рассылке рассказывается о запросах на выборку из одной таблицы, даются ответы на вопросы по подписке.
Новые бизнес программы
   "Морские тарифы" Программа  предназначена  для быстрого  просмотра  и анализа коммерческой стоимости  перевозки  из  одного  пункта в  другой. В  справочники  пользователь  вносит  морские порты (PORTS), условия перевозки груза (TERMS OF SHIPMENT),стоимость (тариф)  доставки  груза  до определенного  пункта на  авто (ONCARRIGE  TRUCK) и по ж/д  (ONCARRIGE RAIL)  и  морские  тарифы  по экспорту  и по  импорту (FREIGHT) Затем  кнопкой TARIFFS  вызывается  форма  в  которой  есть 2 "окошка"  в них  из справочника  выбираются порты  назначения. В  форме видны  ставки   перевозок  из  одного  порта  в другой  с  общей суммой расчетов.
  "Товарно-транспортная накладная на перевозку" Товарно-транспортная накладная применяется в программах по перевозкам. Вы можете использовать ее для создания специальных аналитических и торговых программ в автомобильном и контейнерном  бизнесе.

Бесплатные коды для Access 2000:
    Добавлены новые программы в открытых кодах:
   • Файл la_query.mdb. 1. Проводник запросов. Включает более 20 запросов на выборку.
   • Файл la_prot.mdb. 5. Бинарный вид файла базы данных 6. Определяем тип файлов: mde или mdb

Access 2000. Урок 6. Запросы на выборку из таблицы
    Самыми распространенными и простыми запросами SQL в базе данных являются запросы на выборку. Отличают их по ключевому слову SELECT[1]. Эти запросы применяют тогда, когда необходимо отобрать часть записей из одной или нескольких таблиц. Наиболее часто запросы применяют в формах, списках и модулях. Вот несколько примеров на данную тему.
 1. Форма.  Me.RecordSource = "SELECT * FROM [Данные]" (явное указание запроса)
 2. Список. Me.ПолеСоСписком1.RowSource = запросSQL (запрос считывается из базы данных).
 3. Модуль. Set rst = dbs.OpenRecordset(strSQL) (запрос берется из текстовой переменной, где strSQL="SELECT * FROM [Пример 05]")
     Ниже приводятся запросы на выборку для одной таблицы. Естественно, что эти примеры лучше изучать на практике. Для этого скачайте программу: la_query.mdb. Запустите пример 1 и,  изменяя содержание запроса, например, добавляя ключевые слова, Вы будете видеть результат в списке формы. Если запрос будет неправильным, то список будет пустой. А теперь изучите запросы.
Название SQL - запрос
Выборка без указания таблиц SELECT "Ура!", "Вперед!" as Лозунг
Выборка всех записей из таблицы SELECT * FROM [Данные]
Выборка всех записей из колонки SELECT ALL [Книга] FROM [Данные]
Выборка 1 поля с указанием источника SELECT [T5].КурсUSD From [Данные] AS [T5];
Выборка с условием для разных полей SELECT * FROM [Данные] WHERE [Дата]=#11/15/2000# and ([Книга]='Война и Мир') and ([СуммаРуб]=500);
Выборка с вычислением результата SELECT *, "USD=" & Format([СуммаРуб]/[КурсUSD],"0.00") as [СуммаUSD] FROM [Данные];
Выборка с сортировкой /вверх, вниз/ SELECT * FROM [Данные] ORDER BY [СуммаРуб] ASC, [КурсUSD] DESC;
Выборка 1 записи SELECT TOP 1 * FROM [Данные];
Выборка 25 % записей SELECT TOP 25 PERCENT * FROM [Данные] ORDER BY КурсUSD DESC;
Выборка уникальных записей /книг/ SELECT DISTINCT [Книга] FROM [Данные];
Выборка максимального числа SELECT Max(КурсUSD) as MaxUSD From [Данные];
Выборка среднего числа SELECT Avg(КурсUSD) as Средний From [Данные];
Выборка минимального числа SELECT Min(КурсUSD) as Минимальный From [Данные];
Выборка первого числа SELECT First(КурсUSD) as Первый From [Данные];
Выборка последнего числа SELECT Last(КурсUSD) as Последний From [Данные];
Выборка суммы SELECT Sum(СуммаРуб) as Сумма From [Данные];
Выборка c подсчетом строк SELECT Count(КурсUSD) as Кол_во From [Данные];
Выборка из закрытой таблицы SELECT * FROM [Данные] WITH OWNERACCESS OPTION
Выборка c группировкой SELECT First(Книга) as Книги, avg(СуммаРуб) as [Средняя Цена] FROM [Данные] GROUP BY Книга
Выборка после группировки SELECT First(Книга) as Книги, Avg(СуммаРуб) as [Средняя Цена] FROM [Данные] GROUP BY Книга HAVING Avg(СуммаРуб)>350
    При разработке запросов Вам потребуются много разных слов, например, *, ALL, AS, FROM, ASC, DESC, TOP, PERCENT, DISTINCT, MAX, MIN, SUM, AVG, FIRST, LAST, COUNT, ORDER BY, WITH OWNERACCESS OPTION,GROUP BY, HAVING. Описание их дано в словаре и в справочной системе.
    Домашнее задание. Попробуйте составить работающий запрос с использованием всех этих слов. Если сможете, то значит Вы отлично знаете тему.
Словарь
  • [1] SELECT  (выбрать) - выбирает столбцы для запроса
  • [2] FROM (из) - слово определяет имя таблицы или запроса
  • [3] *, ALL (все) - слова определяют вариант отбора записей
  • [4] TOP (верх), PERCENT (процент) - слова необходимы для получения нескольких записей из таблиц
  • [5] AS (как) - слово используется для нового названия поля или таблицы
  • [6] DISTINCT (отличающийся) - слово применяется для отбора только уникальных записей из колонки
  • [7] WHERE (где) - слово для отбора записей по условному выражению
  • [8] ORDER BY, ASC, DESC - слова используются для сортировки записей по возрастанию и убыванию
  • [9] GROUP BY, HAVING - первые слова используются для группировки, а третье для отбора записей уже после вычислений (HAVING аналог WHERE)
  • [10] MAX, MIN, FIRST, LAST - функции группировки для получения максимального, минимального, первого и последнего числа в выборке.
  • [11] SUM, AVG - функции группировки, которые вычисляют сумму, среднее значение и количество записей запроса
  • [12] WITH OWNERACCESS OPTION - используется для получения записей из таблицы, которая создана другим пользователем и защищена от просмотра

Ответы на вопросы
   Сегодня на вопросы отвечают профессионалы: Макеев Игорь (http://home.tula.net/mebelmassiv) и Малютин Николай. И так, если Вы отвечаете за внедрение и разработку программ, то возьмите на заметку их адреса. Возможно Вам потребуется быстро и профессионально разработать базу данных, то обратитесь к ним. От себя могу добавить, что Вы получите не только качественную, но и надежную, не требующую переработки, структуру базы данных.
   Вопросы Вы можете задавать по email:
. На некоторые вопросы есть ответы, они выйдут в следующем номере рассылки в этом месяце.
 
Вопрос 177(15.01.2000) Пожалуйста, помогите советом. В Office 97 Acsess 97 содержал шаблоны баз для создания каталогов книг, видеокассет и т.п. для дома, а в Office 2000 Acsess 2000 я такого не нашёл. Подскажите как быть, где достать подобные русские шаблоны, есть ли они в настройках Acsess 2000 и как их вытащить оттуда.
   Ответ 1. Игорь В. Макеев (http://home.tula.net/mebelmassiv) А если сконвертировать из Office 97?
   Ответ 2. Виктор Конюков. Чтобы вытащить мастер из Access 97 в Access 2000 придется "поломать голову". Сам я этого не делал, т.к. особой нужды в этом не было. Поэтому гарантировать, что у Вас все получится не могу. А теперь о технологии сохранения мастеров в реестре Access.
    Откройте раздел Form Wizard. В нем описаны все мастера форм, которые вызываются из Access. Аналогично существуют разделы для таблиц, отчетов и встроенных в них элементов управления. Вот так описаны параметры формы:
  • Bitmap - путь к файлу bmp (рисунок на форме мастера)
  • BitmapID - индентификатор изображения в файле Msaccess.exe
  • Datasource Required - источник данных для мастера
  • Description - описание мастера
  • Function - имя функции для активизации мастера
  • Index - позиция мастера в списке мастеров
  • InternalID - указатель того, что мастер встроен в Access
  • Library  - определяет путь к библиотечной базе данных (acwzmain.mde)
  Скопировать библиотечные файлы из Access 97 у Вас получиться. Прописать в реестре все параметры тоже несложно. Но как можно можно вытащить информацию из mde (или есть ли его замена) сказать сложно.
Вопрос 182(23.01.2000) Имеются две таблицы (фирмы и телефоны), связь один-ко-многим. Необходимо добавлять информацию в обе таблицы через SQL-запрос. С добавлением данных в таблицу о фирмах сложностей нет, некоторые трудности связаны со второй таблицей (различное количество записей, которые нужно добавлять). Я вижу здесь два варианта:
1) При заполнении формы данные о телефонах заносятся во временную таблицу. После выполнения запроса на добавление, записи из временной таблицы удаляются. Временная таблица храниться постоянно.
2) Временная таблица создается при заполнении формы и удаляется после выполнения запроса.
Т.е. в первом способе - удаляются только временные записи, во втором - временная таблица.
Вопрос:
Правильно ли я рассуждаю. Если да то какой способ лучше. Есть ли более изящный и грамотный способ (я думаю, что есть).
P.S. Я пробовал оба способа. И в том, и в другом случае база достаточно быстро увеличивается в размере.
   Ответ 1. Игорь В. Макеев Вынести временные таблицы в отдельную базу-шаблон и в начале работы копировать ее, использовать копию, которую после удалять.
   Ответ 2. Виктор Конюков. Иногда во временной базе данных в записях ставят флажок (bool или date & time), который после сеанса редактирования очищают запросом на обновление, но все записи никогда не удаляют. Вообще для таких простых действий создавать временную таблицу слишком расточительно. Многие после сеанса автоматически архивируют базу, и если она разрушилась, то восстанавливают ее из копии.
   Ответ 3. Анатолий Лящук. Как вариант можно разнести код и данные по разным mdb файлам. В файле с таблицами (фирмы и телефоны) хранить только эти таблицы, а в файле с програмой (формы, модули etc) создавать временные таблицы. Поскольку этот файл будет иметь разумный размер, то после окончания работы его можно компактировать. Но лучшим решением мне кажеться вообще не создавать временных таблиц, а попытаться обойтись массивом и лист-боксом.
Вопрос 183(23.01.2000) Необходимо, чтобы в поле отчета (в том случае, если данные не удовлетворяют какому-либо условию), менялся цвет фона. Я воспользовался примером 19 в La_form1 - однако ничего не выходит. Суть проблемы: если значение в поле отчета (к примеру, название города) не совпадает с МОСКВА и при этом не совпадает с КРАСНОДАР, а также, если поле пустое (Null) - фон должен стать серым. Как это можно сделать? Пример моей безграмотно составленного условия:
.FormatConditions.Add acFieldValue, acNotEqual, "МОСКВА" And "КРАСНОДАР".
   Ответ 1. Малютин Николай Вообще-то конструкция с And здесь не применима, используйте два фильтра (FormatConditions.Add acFieldValue, acEqual, "МОСКВА" ). Хотя в отчетах подобное не проходит - надо либо использовать средства конструктора, либо формировать отчет "вручную"
   Ответ 2. Михаил Белодед, ICQ#13794939
Я бы это решил так:
Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
If Me![оц] = 2 Then
Me![оц].BackColor = RGB(255, 0, 0)
ElseIf Me![оц] = 5 Then
Me![оц].BackColor = RGB(0, 255, 0)
Else
Me![оц].BackColor = RGB(0, 0, 255)
End If
End Sub
     P.S. Правда есть одно замечание: до тех пор, пока я в конструкторе для этого поля не прописал цвет, отличный от других полей, модуль выполнялся (я пошагово проверял), но цвет в отчете был белым! А как только поменял в конструкторе - все сразу заработало.
Вопрос 184(23.01.2000) Вопрос состоит в автоматическом создании резервной копии базы данных, не прерывая работы пользователей. Если таблицы и остальные элементы управления находятся в одной базе, то просто импортируются таблицы в другую базу. Но подобной механизм не работает, если таблицы в одной базе, а элементы управления в другой. Просто скопировать базу в резервную нельзя так, как "файл открыт". Отдельного сервера нет, поэтому необходим механизм создания рез. копии из клиентской части.
   Ответ. Игорь В. Макеев Используй для копирования API:
Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Вопрос 186(25.01.2000) Имею 2 строки в таблице (строк может быть и больше). Первые поля в строках одинаковые (числовые). Остальные текстовые. Можно ли эти  строки объединить в одну строку, чтобы данные, начиная со 2-го поля были объединены. т.е. первая строка дополнена второй?
   Ответ. Игорь В. Макеев В общем случае, ответ можно. Для более конкретного и подходящего ответа нужно хотя бы знать, куда потом пойдет эта строка? Иначе можно посоветовать открыть рекордсет и последовательно перебрать все записи.
Вопрос 188(25.01.2000) У меня есть таблица, состоящая из пяти полей, в Поле1 - буквенный код, например IDHT, необходимо разложить этот код следующим образом: в Поле2 должна быть буква I, в Поле3 - D, в Поле4 - H и в Поле5 - T.
   Ответ. Малютин Николай. Выполните после ввода данных в первое поле запрос на обновление:
Private Sub Form_AfterUpdate()
Call TableUpdate
End Sub
Private Sub TableUpdate()
Dim strSQL As String
strSQL = "UPDATE Таблица1 SET Таблица1.[1] = Left([Таблица1]![All],1)" & _
", Таблица1.[2] = Mid(Left([Таблица1]![All] & '    ',4),2,1), " & _
"Таблица1.[3] = Mid(Left([Таблица1]![All] & '    ',4),3,1), " & _
"Таблица1.[4] = Mid(Left([Таблица1]![All] & '    ',4),4,1)"
'данные добавляются пробелами до 4-х  символов
DoCmd.RunSQL strSQL
Me.Requery
DoCmd.GoToRecord , , acNewRec
End Sub
Вопрос 208(31.01.2000) Мне необходимо использовать следующую строку:DoCmd.RunSQL "SELECT * FROM [имя таблицы];" Однако Access2000 отвечает:"Run-time Error 2342 Для макрокоманды ЗапускЗапроса SQL требуется аргумент состоящий из инструкции SQL " Если эту строку заменить на: DoCmd.RunSQL "SELECT * FROM [имя таблицы] INTO [имя любой другой таблицы];" тогда всё ОК, но выходит несколько окон предупреждающих о том что столько-то записей будет помешено в новую таблицу и т.д., а мне это не надо.
   Ответ. Малютин Николай Да нет, Access понимает инструкцию запроса, но не знает что делать с результатами, ведь во втором случае у вас это четко указано. Измените конструкцию на "запрос на обновление" . А чтобы не выскакивали предупреждения - в "Сервис-Параметры-Правка и поиск" сбросьте флажки.
Вопрос 210(01.02.2000) Скажите пожалуйста, как можно из одной базы вызвать функцию из другой базы.  Причем эта функция использует таблицы во второй базе.
   Ответ 1. Игорь В. Макеев Например, подключить вторую базу в ссылках. Но следует учесть, что доступ к таблицам базы, содержащей функцию должен вестись через CodeDb (подробности в хелпе). Т.е. в подключаемой базе должно быть примерно так:
Dim rs As Recordset
Set rs = CodeDb.OpenRecordset("select field from table")
...
  Ответ 2. Виктор Конюков. Внимательно прочитайте "Лекции по Access", например, 3с
Вопрос 213(01.02.2000) Как сделать так, чтобы после обновления ленточной формы, активной оставалась та же запись, которая была активной и до обновления?
   Ответ 1. Игорь В. Макеев Например, запомнить ее ключ, а после requery найти ее в RecordsetClone по этому ключу и присвоить bookmark рекордсета, bookmark'у формы.
   Ответ 2. Виктор Конюков. Пример есть в формах: la_form.mdb или la_form1.mdb
Вопрос 214(05.02.2000) Скажите, пожалуйста, как я могу подцепить к базе созданной в Access 97 таблицы из базы Access 2000?
   Ответ. Игорь В. Макеев Из окна БД, не знаю, по-моему никак, а из кода можно подключив, в ссылках DAO 3.6 и далее как обычно:
 Dim db As DAO.Database, rs As DAO.Recordset
 Set db = DAO.DBEngine.OpenDatabase("C:\Мои документы\Access\2000\db1.mdb")
 Set rs = db.OpenRecordset("select * from tblTable")
Вопрос 220(06.02.2000) Я проверяю текстовое поле на пустоту так:
Dim s As TextBox
Set s = Me.txtMyPole 'txtMyPole это обычное текстовое поле
s.SetFocus
If s.Text = "" Then MsgBox ("Field 'txtMyPole' empty"): s = Nothing:
Существует ли другой способ? более простой
   Ответ 1. Игорь В. Макеев Может быть подойдет If IsNull(Me.Поле1) Or Trim(Me.Поле1) = "" Then MsgBox "Заполните поле"
   Ответ 2. Виктор Конюков. Есть специальная функция: nz.
Вопрос 225(06.02.2000) Я работаю с Access уже  некоторое время. Для себя и для отдела сделал некоторое количество баз данных. Теперь у меня огромное желание посмотреть и попробовать в работе Access 2000. Могу ли я безболезненно установить у себя на компьютере этот софт не трогая старый Access'97?
   Ответ 1. Игорь В. Макеев Да. Не обновляя, в другой каталог.
   Ответ 2. Виктор Конюков. При установке Access 2000 и Access 97 файлы старых и новых библиотек (dll) записываются в общую папку: SYSTEM. Таким образом, если Вам необходимо обеспечить работоспособность баз данных разных версий, то надо хорошо представлять, как подключаются и работают ссылки в базах данных. Иначе при конвертации, например, из Access 2000 в Access 97 база данных будет работать на Вашем компьютере, а там, где стоит только Access 97 - нет.
Вопрос 227(07.02.2000) Как отловить событие закрытия MS Access, чтобы занести в базу запись типа "Завершение сеанса в чч:мм"?
   Ответ. Игорь В. Макеев1. Сделать невидимую форму, открывать ее при запуске приложения, а по событию ее закрытия исполнять необходимый код. 2. Запретить кнопку закрытия в заголовке самого MSA и повесить закрывающий код на свою кнопку.
Вопрос 229(08.02.2000) Хотелось отфильтровать в форме данные по месяцу из выпадающего списка "Поле1": Есть поле "Дата" типа Дата-время. Испробовал варианты фильтров для формы: (Month(Таблица1.Дата)) = ([Поле1]) (Month(Таблица1.Дата)) = (Forms!Поле1) (Month(Таблица1.Дата)) = (Val ([Forms]![Поле1].SelText)) Значения для "Поле1" брал из списка или из отдельного запроса. При любых вариантах попытка включить фильтр приводит к появлению окошка, предлагающего ввести параметр "Поле1" или "Forms!Поле1" или
"[Forms]![Поле1].SelText". Если же в правой части равенства поставить какое-то фиксированное значение, 1, 2 и т. д., то фильтр работает. Что делать?
    Ответ. Игорь В. Макеев Me.Filter = "Month(Таблица1.Дата) = " & Me.Поле1
 Me.FilterOn = True
Вопрос 232(12.02.2000) Меня зовут Андрей и мне нужна квалифицированная помощь по MS Access. Суть проблемы заключается в следующем…Есть Форма, в ней – ПолеСоСписком. ИсточникСтрок для ПоляСоСписком – Запрос. Хотелось бы знать код VBA для следующего события: в Форме нажимается Кнопка, для которой установлена процедура обработки ее нажатия. Процедура должна изменить УсловиеОтбора в Запросе, из которого ПолеСоСписком берет значения, т.е. необходимо изменить SQL код в Запросе. Ну, а как это сделать, надеюсь, Вы мне поможете. P.S. Эта информация мне необходима не для коммерческих целей
   Ответ. Игорь В. Макеев 1. Если запрос сохраненный:
 Dim q As QueryDef
 Set q = CurrentDb.QueryDefs("Запрос2")
 q.SQL = "select * from tbl where id = 1"
 q.Close
 Set q = Nothing
 Me.ПолеСоСписком3.Requery
2. Если нет, программно формируем условие сразу в RowSource поля со списком.
Вопрос 233(12.02.2000) Очень интересно узнать - легко ли сломать MDE-файл. Я считала, что такой защиты достаточно, но после того как передала свою разработку в стороннюю фирму для  того, чтобы они ее просто посмотрели, они говорят, что вскрыли этот файл и изменяют его под себя самостоятельно. Что, естественно, меня сильно не обрадовало. Заранее благодарна за подсказку.
   Ответ 1. У меня нет корректных литературных слов, чтобы выразить мое мнение по поводу этой фирмы и поведению ее сотрудников.
   Ответ 2. Наверное такая программа существует, т.к. я несколько раз слышал о ее существовании из разных источников, но сам с ней не работал. Но, чтобы как-то Вас успокоить попытаюсь кратко рассказать о том, как работают современные компиляторы (читал однажды книгу "Как самому создать компилятор ?").
   На 1 этапе компилятор удаляет лишние пробелы и комментарии в Вашей программе.
   На 2 этапе происходит разбор текста и конвертация программы в ассемблерный вид.
   На 3 этапе он оптимизируют код, т.е. заменяет повторяющиеся строчки кода на собственные выражения, и тем самым уменьшает объем выполняемой программы.
   И так, отсюда следует, что полностью восстановить вашу программу и логику, конечно, не удастся. А если программа сложная, то и переделка кодов под свои невозможна, все равно структура программы сохраниться. Но лучше, прежде чем работать с сомнительными организациями запомните несколько правил:
  • во первых, "застолбите" программу, т.е. дайте описание того, что она может. Даже, если Вы опубликовали ее только в Интернете и не защитили текст в РосАПО, все равно будете считаться ее автором;
  • во вторых, прежде, чем передать mde - файл, вставьте в него побольше "мусора", т.е программ, которые не имеют ничего общего с вашим кодом;
  • в третьих, напишите часть программ на VB и сохраните их в DLL. Вызов функций из VBA осуществляется аналогично api интерфейсу (смотрите la_api.mdb);
  • в четвертых, если каждый раз вызывая свою dll-функцию делать в ней проверку на тип файла (смотрите пример 6 файла la_prot.mdb), то можно написать алгоритм, который будет вредить в хулиганам.
  • в пятых, лучше сделать документацию по программе и рассылать ее, чем рабочую версию файла.
Вопрос 235(13.02.2000) U menia ystanovleno WINDOWS2000Me posle insstaliacii Ofiice97 vce paketi rabotaiut krome Access97, oshibka pri zapuske Access "net Licenzii dlia Acces na ety Machin" pajalycta obisnite chto eto znachit?
   Ответ. Игорь В. Макеев Добавить в реестр:
[HKEY_CLASSES_ROOT\Licenses\8CC49940-3146-11CF-97A1-00AA00424A9F\Retail]
@="yubcdcprktpjtapmmfdacmupasbhscddncgp"
А на сайте MS, по-моему, есть патч на это дело.
Вопрос 236(13.02.2000) Давно ищу курсы по Аccess97-2000. Интересуют краткосрочное обучение - до недели. Кто проходил подобное - посоветуйте, или рекомендуйте, пожалуйста.
  Ответ. Чтобы минимально изучить базу данных Access 97 или 2000 на уровне пользователя нужно полгода. Если кто-то знает способ, как это можно сделать за 5 дней, пусть напишет. Рекомендации опубликую.
  От себя добавлю, что Билл Гейтс планирует в новой версии Word и Access (10-11) применить систему распознавания речи. Выглядит это примерно так. Вы диктуете текст. Компьютер понимает, проверяет и исправляет ваши фразы или программы, а затем записывает их в файл на диске. При таком идеальном способе работы с базой данных, ее вообще изучать не придется.
Вопрос 238(14.02.2000) Надеюсь, что Вам будет не очень затруднительно помочь мне решить следующий вопрос: В базе данных мне требуется организовать поиск по ключевому слову в тексте файлов расположенных в определенной
директории. Результат поиска возвращается в список. Как написать модуль? Буду рад если поможете! P.S.  Я  занимаюсь вопросами информационного права. Поэтому, если у Вас возникнет  юридический  вопрос  по  защите  программ  для  ЭВМ или баз данных, то я могу оказать Вам ответную консультацию.
   Ответ. Игорь В. Макеев  Читаем Help по FileSearch из библиотеки MS Office Object Library.
Используем примерно так:
  Dim i As Long
 Me.ПолеСоСписком3.RowSource = ""
 With Application.FileSearch
.NewSearch
.LookIn = "C:\Мои документы\word"
.TextOrProperty = "то, что ищем"
.FileType = msoFileTypeWordDocuments
.SearchSubFolders = True
.MatchTextExactly = False
If .Execute(msoSortByFileName) > 0 Then
For i = 1 To .FoundFiles.Count
Me.ПолеСоСписком3.RowSource = Me.ПолеСоСписком3.RowSource & .FoundFiles(i) & ";"
Next i
Else
MsgBox "Not found"
End If
 End With
Вопрос 240(16.02.2000) Я уже достаточно давно занимаюсь Access. До этого программировал на Borland Pascal for Windows и Delphi, немного знаю Visual C++. И вот недавно мне попался заказ на Access, в котором меня попросили изменить внешний вид окна.
(Окно должно быть примерно как в Norton Utilites for Windows, т.е. должна быть изменена рамка окна, все кнопки, заголовок и полосы прокрутки). Как я понял мне необходимо создать свой класс окна и изменить в нем стили. Но как и с помощью каких функций API это сделать я не знаю. Если вам не сложно пошлите мне программку на BPW или Delphi, которая это делает. Или на крайний случай просто список функций API, который мне надо применять. P.S. Зарание спасибо. P.P.S. Огромное спасибо за создание раздела работа на вашем сайте. С помощью
него я наконец-то нашел хорошую работу.
   Ответ. Подробно, как можно изменить стиль окна, написал Малютин Николай в примере N3 файла: la_graphics.mdb (модуль "Открытие")
   P.S. Я так понял, что Вы нашли работу в России по ссылке "Работа". Это, конечно, хорошо. Но многим будет интересно также знать, как найти работу по контракту за рубежом с помощью ссылки "Job". У меня был один звонок от посреднической фирмы в Москве, представляющей немецкую фирму, но больше контактов не было. Так вот, если ссылка "Job" кому-то помогла, черкните пару строк, буду очень признателен.
Вопрос 242(16.02.2000) Мы решили на удачу обратиться к Вам. Спасибо за вашу базу "Валюта" - мы ее используем в работе. Может быть Вы нам подскажете как выйти из положения.. Из-за некорректного (что ввели не знаем) ввода данных в подчиненную таблицу, таблица не открывается, не экспортируется, не открывается в конструкторе, не позволяет себя импортировать. В ней много данных, введенных с большим трудом (300 строк на 5 столбцах). Нам важно восстановить данные. Пустая таблица взамен "битой" устанавливается. Работаем в Access-2000.
    Ответ. Попробуйте: AccessRecovery  с сайта http://www.officerecovery.com/access/
Предложено: Игорь Каминский, E-Mail:  master@jugra.wsnet.ru, ICQ: 1955144 (Взято из FAQ)