Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Access 2000 - программирование и готовые решения


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Выпуск 17а. Новые вопросы по Access.

Введение.
    
Ответы на некоторые вопросы будут даны в ближайшее время на сайте: www.liac.nm.ru. Вы можете также принять участие в их решении. Ваши реквизиты будут указаны. После получения достаточных ответов они будут разосланы подписчикам.

Продолжение вопросов

Вопрос 11.   ACCESS 2000 работает в 2-х режимах: - старом с провайдером Microsoft.Jet.OLEDB.4.0 - и новом, с каким либо из провайдером сервера  При этом в первом случае, ACCESS автоматически подключается к провайдеру Jet, а во втором, в диалоге можно выбрать провайдера сервера. Если возникает необходимость основную часть БД держать на сервере, а небольшую часть в формате *.mdb на клиенте (в основном tmp таблицы или, возможно, прибегнуть к обработке информации из MS Servera возможностями SQL Jet). Как организовать одновременную работу проекта ACCESS с готовыми формами от разных провайдеров?
 
Вопрос 12. 1. Я интересовался у Вас размерами форм на мониторах с разным разрешением. Как определить разрешение экрана и текущие координаты и размеры форм я понял. Но что с этим делать дальше? Неужели необходимо пересчитать координаты и размеры всех элементов формы? К примеру, при разрешении 600*800 кнопка "Выход" находится в правом нижнем углу, а при 480*640 вылазит за пределы экрана. Если пересчитать только её координаты, то она залезет на другой объект.
 
Вопрос 13. 2. Как с помощью VBA создать таблицу с полем счетчика?
 
Вопрос 14. Access как правило предлагает создать автоматически - в виде поля типа "Счетчик". Со временем в этом поле оказываются значения самые разные. Каким образом можно обновить это поле (вариант - внести запись с заданным значением в поле "Счетчик") ?
 
Вопрос 15. В своих примерах Вы часто используете библиотеки Виндов. Где можно получить информацию о них, об их объектах и свойствах? Меня заинтересовал TreeView (и не только).
 
Вопрос 16. Как можно программным способом прочитать все поля (в т.ч. и списки) одной формы и данные внести в другую?
 
Вопрос 17. При выводе на принтер отчета из Access ([Файл] -> Печать) появляется диалог "Печать", где в соответствующих окошках можно выбрать диапазон страниц для печати с ... по ... Проблема состоит в том, что на разных компьютерах максимальное количество цифр, которое можно ввести в эти окошки колеблется от трех до пяти. На компьютере с Win95 можно ввести пятизначное число (max 99999), с WinNT 4.0 на одной машине три цифры, на другой четыре, под Win 2000 на каждой из двух проверенных машин по четыре цифры. Получается, что страницу с номером > 100000 вообще нельзя вывести на печать, а на некоторых машинах страницу > 1000. От чего это зависит? Полная переустановка офиса не меняет ситуации. Модель и драйвер принтера, структура отчета не влияют на это ограничение (были проверены 5 разных принтеров с различными драйверами). Конфигурации компьютера (размер памяти и ЖД) тоже не влияет на это.
 
Вопрос 18. Подскажите пожалуйста, как в Access-2000 управлять шириной и высотой окна? Насколько я понимаю ширина формы (me.width) и ширина окна - разные вещи? Хотел бы менять размеры окон и элементов в зависимости от разного разрешения экрана, но что-то не выходит. При убавлении me.with она действительно убавляется (я это контролирую по ее значению, выводя на экран) , а ширина окна так прежней и остается.
 
Вопрос 19. У меня есть проблема... Руководству по зарез необходимо иметь график на котором в положительной (сверху) части отражаются средства фирмы, в отрицательной части (внизу с минусом) отражаются задолженности, и где то скачущую из плюса в минус и обратно сальдирующую линию. Проблема в сальдирующей линии. Она должна быть в положительной части синей, а в отрицательной - красной. Есть ли у Вас мысли как можно это реализовать (хотя бы в Excel).
 
Вопрос 20. Добрый день! Работает следующая конфигурация: центральный склад (Access 97, Windows NT 4 (workstation)) - 2 компьютера. Розничная продажа: Access 97, Windows 98 - 2 компьютера. Данные находятся в двух файлах MDB на компьютере склада. Все 4 MDE файла (два складских и два розничных) завязаны на таблицы обоих MDB файлов. Потоки данных большие, работает система 3 месяца и в 2-х таблицах склада уже по 15000 записей. Один раз столкнулись с проблемой ошибки в одной конкретной таблице в MDB файле розницы. Но основная проблема следующая: 1-2 раза в неделю при обращении к файлу MDB склада возникает ошибка "Нераспознаваемый формат базы данных". Лечится командой "Восстановить" из меню Access. Формализовать ситуацию не удалось (конкретные обстоятельства появления ошибки не установлены). ЛВС по TCP/IP. Архитектура "Звезда". Центральный сервер сети: Win 2000. Все базы лежат на локальных дисках. Если вы сталкивались с такой проблемой, пожалуйста, помогите добрым советом.
 
Вопрос 21. Добрый день. Очень нужна Ваша помощь! Возникла проблема с программной установкой параметров принтера по умолчанию (номер лотка) без использования диалога печати в Access'2000. В VB 6 при помощи констант объекта Printer.PaperBin можно добится изменения лотка. Возможно ли решение данной проблемы в Access?
 
Вопрос 22. Очень хочется, при создании программным путем запросов (да и вообще чего угодно), добиваться эффекта поставленного флажка "скрытый" в свойствах запроса, к сожалению в свойствах запроса как документа, я этого не нашел.
 
Вопрос 23. Добрый день, я пытаюсь сделать простую базу в Access и у меня такой вопрос: В таблице есть дата оплаты и сумма оплаты в рублях, в другой таблице перечень курсов по датам, мне нужно получить сумму в валюте... к сожалению я не знакома с VBA, можно ли решить мою проблему с помощью запроса?
 
Вопрос 24. У меня проблема! не могу связать акцесную базу с фаилом FoxPro .dbf, т.к. в списке выбора типа связываемой таблицы нет FoxPro, а есть Dbase, но он не подходит. Как быть в этом случае?
 
Вопрос 25. Если связываемая БД FoxPro лежит на сервере, как сделать к ней доступ, т.е. связать с ней, она ругается в Access 97, что там нет доступа т.к. таблица FoxPro используется другим?
 -
Вопрос 26. Разрабатывая в Access'97 задачи по Учету банковских операций и по Учету контрольно - измерительных приборов (КИП) столкнулась с трудностью создания отчета (на основе перекрестного запроса) с динамически меняющейся шириной границы (в зависимости от данных, входящих в заданный пользователем период). Например, в моем отчете - "Журнал-ордер" количество корреспондирующих счетов (заголовки столбцов) в каждый период различно, а общее их кол-во велико их полное размещение в "шапке" отчета не целесообразно (60 с лишним колонок! по числу счетов). Пока что я поменяла местами заголовки столбцов и строк (соответственно - дни месяца и счета). Отчет стал компактнее, однако не всем моим пользователям удобен такой вариант. Очень нужно создать "плавающую границу" в отчете. Посоветуйте, пожалуйста, как это реализовать программно?
 
Вопрос 27. Помогите, пожалуйста, понять, есть ли возможность из приложения Access отправить Outlook Task Request?
 
Вопрос 28. У меня возникла одна маленькая проблема как увязать Word и Access, а именно Существует поле гиперссылки куда ссылка на файл, находящийся на жестком диске. Как можно максимально упростить задачу добавления гиперссылки в поле? Скажем в форме где находится поле гипессылки есть другое поле данные которого равны названию папки на жестком диске, скажем данные "Импульс" , Папка на жестком диске "D:\Temp\Импульс". Есть также другое поле, поле с датой. Можно ли сделать так чтобы при нажатии на поле гиперссылки Открывался Word и Создавался бы файл в данном случае в папке "Импульс" с названием из поле дата скажем 22-июн-99г. Но это идеальный вариант, если такое сложно описывать, то хотя бы просто упростить задачу добавления гиперссылки
 -
Вопрос 29. Здравствуйте, после всех полученных мною рассылок и у меня созрел такой вопрос, очень бы хотелось, чтобы в то время, когда идет расчет отчета, то показывался бы индикатор загрузки, ну я так считаю, что с отчетом его связать сложно, ведь когда открывается отчет, то все формы становятся невидимыми, и как Dialog тоже не откроешь. Как тогда быть? Или хотя бы как это сделать в форме и сопоставить с Recordset, желательно на примере.
-
Вопрос 30. У меня проблема - создала форму с кнопками, для них написала код. Потом удалила эту форму - а в проекте в списке форм она осталась, и теперь не знаю, как её можно удалить. Копалась в help-е, бесполезно :(
 -
Вопрос 31. Есть таблицы по направлениям (предприятия, персонал, реквизиты, характеристики оборудования, данные конструкций и т.п.) расположены в разных mdb файлах. Мастером подстановок из связанных таблиц заполняются требуемые поля в таблицах. Конструкторы инструментов (запросы, формы, отчеты, макросы) для решения отдельных задач (планирование, отчетность, анализ и т.п.) выделены в отдельные mdb файлы. Все это хранится на сервере. Рабочие станции работают в локальной сети, в т.ч. и в терминальном режиме. При открытой связанной таблице любой станцией значительно замедляется работа конструкторов на других станциях, использующих эту же (эти же) таблицу. В Access 97 этого не наблюдается. В чем дело ? Что можно предпринять ?
 
Вопрос 32. Как сделать так, чтобы в таблице выделялись не все даты, а только те, которые отвечают специально заданному условию. Например. синим: Date()<= значение <= Date()+2 красным: значение < Date()
 
Вопрос 33. Опять все то же поле "дата/время". Маска ввода в форме: "##.##.##" При переносе файла базы данных на другой компьютер разделители в маске почему-то меняются "##:##:##" Поскольку в системных настройках в качестве разделителя используются точки, при вводе данных в это поле выдается сообщение об ошибке. Т.е. mde-файл создать нельзя, потому что приходится править маски во всех формах. Не встречались ли Вы с такой проблемой, и можно ли ее каким-либо образом решить?
 
Вопрос 34. На кнопочку в форме у меня повешена такая процедура: (переменной присваивается результат выполнения запроса - дело в том, что все запросы, которые возвращают числа, я храню в таблице как текстовые строки, т.к. запросов очень много, около 4-х тысяч и так с ними удобнее работать)
txtSQLNew = "SELECT Count(Статистика.КодБольного) AS Актив FROM Статистика;"
txtAliasSelected = "Актив"
vntResult = CurrentDb.OpenRecordset(txtSQLNew)(txtAliasSelected)
MsgBox "Результат выполнения запроса: " & vntResult
Все работает. Вопрос: а если результат запроса не число, а набор записей, то как его показать при нажатии на эту кнопочку "одним махом", хотя бы виде таблицы? Т.е., например, взамен первой строки вставить вот эту:
txtSQLNew = "SELECT Статистика.КодБольного AS Актив FROM Статистика WHERE Статистика.ПолБольного = "М";"
И далее.... показать сразу все отобранные записи.
Вопрос 35. Скажите, можно ли импортировать данные из базы данных CLARION (*.dat). Если можно, то как это сделать?
 
Вопрос 36. Я работаю в Access 97. При реплицировании БД в таблицах автоматически создаются новые поля. После импортирования таблиц из реплицированной базы в обычную в новой БД в таблицах визуально этих полей не видно, но фактически они просматриваются в окне отладки при выполнении моего модуля. На программном уровне пытаюсь их удалить с помощью применения метода Delete объекта TableDef, но выводится ошибка: "3280 - Can't delete the field that is part of an index or is needed by the system". Как удалить данные поля?
 
Вопрос 37. Не хочу Вас сильно утруждать, поэтому сразу к вопросу: как напечатать один отчёт два раза на одном листе? Это гарантийный талон, нужна печать с обоих сторон.
 
Вопрос 38. Просьба помогите решить проблему. Есть в форме несколько списков. При выборе в первом должен формироваться второй, условие значение из первого. Однако во втором списке появляется одно значение(хотя должно быть несколько значений)
Private Sub Список8_AfterUpdate()
Dim rst As Recordset ' ***
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [littel dog] WHERE [idbreed]=" & Me.Список8.Value)
If rst.RecordCount <> 0 Then
With rst
Me.Список10.RowSource = rst!POMET
End With
Else
MsgBox ("Пусто")
End If
rst.Close
End Sub
 
Вопрос 39. Спасибо за ответ по присоединению DBF файлов, но тут возникла следующая проблема: Что делать, если этот DBF файл проиндексирован, как подсоединить индексный файл ?
 
Вопрос 40. Я очень надеюсь, что Вы сможете ответить на интересующий меня вопрос. А состоит он в следующем: во время написания программы, которая генирирует запросы, мне очень не хочется привязывать параметр запроса к определенной форме, но к сожалению при дальнейшем использовании, т.е. при открытии формы, использующей этот запрос, мне не удается установить значение параметра программным путем, т.к. выводится диалог на задание параметра, и никакие установки параметров запроса в семействе Parameters не помогают. Интересна прежде всего идея, если это вообще возможно, так как во-первых во встроенной справке я ничего толкового не нашел, в во-вторых отсутствие Office 2000.
 
Вопрос 41. Если у Вас есть возможность, прошу посоветовать: КТО виноват и ЧТО делать? Ситуация: Есть складская программа под DOS. Из нее периодически делается экспорт в текстовые файлы. Access97 с периодом в 20сек ищет эти файлы и печатает к ним отчет. База данных для программы под Access лежит на WinNT Server4.0 (используется совместно с выгружаемыми файлами для формирования отчета). Для печати отчета применяется Docmd.OpenReport. Работа происходит так: Пользователи запускают программу под Access (и больше к ней не возвращаются), запускают складскую программу (полноэкранный режим, DOS) и работают в ней, а Access тем временем печатает отчеты к файлам, которые они выгружают. Проблема:
    Если работа происходит на рабочей станции Win98 - все работает нормально, но если работа происходит на NT (Ws или Ser) то иногда (частоту и связь с действиями пользователей установить не удается) в момент вывода отчета на печать посредством DoCmd.OpenReport возникает ошибка: "Использован метод DoCmd для запуска макрокоманды в Visual Basic, но затем в диалоговом окне была нажата кнопка Отмена. Например,..." ну и соответственно этот отчет не печатается. Такое впечатление, что NT как-то отменяет печать отчета. Вы не встречались с подобной проблемой?
 
Вопрос 42. У меня возникла такая проблема - необходимо динамично выделять цветами различные строки в ленточной форме. Самостоятельный поиск решения (по крайней мере средствами Access 97) не принес положительных результатов. Одно решение этой проблемы я обнаружил на сайте Microsoft. Автор предлагает использовать прозрачный фон у полей с данными + поле OLE (с битмапом) связанное по "нужному" алгоритму через запрос. (файл прилагается) Однако в моем случае этот вариант неприемлем ввиду того что при удалении записи удаляется и запись в таблице где хранятся битмапы, т.е. полностью удаляется цвет раскраски. Отслеживать все удаления записей и соответствующее восстановление битмапов на мой взгляд слишком громоздко и некрасиво. Организовать присвоение полю значение OLE так же не получилось, так как VBA не поддерживает работу с бинарными потоками.
 
Вопрос 43. Можно ли заставить отчет печататься на всех принтерах и без уведомления о том, что он был якобы отформатирован для другого принтера???
 
Вопрос 44. Используя ваш курс лекции для изучения программирования под Access столкнулся с такой проблемой: ? при вызове функции funImportModule программа останавливается на первой строке функции и высвечивается msgbox " ошибка компиляции, метод или компонент не найден" на строке: .VBE.ActiveVBProject.VBComponents.Import sFullPath ? А можно ли в VisialBasic создать пустой модуль и заполнять его с помощью AddFromFile ?
 
Вопрос 45. Хотел автоматизировать процесс создания mde файла. Для
этого я хочу создать файл сценария *.bat. Вот как он выглядит для сжатия базы данных:
"C:\Program Files\Microsoft Office\Office\Msaccess.exe"  filename.mdb /Compact filename.mdb
Какой параметр командной строки использовать для создания mde файла?
Вопрос 46. Помогите пожалуйста решить небольшую проблему.
Я хочу открыть объект Recordset на основе инструкции SQL:
Private Sub GetSumSalling()
Dim MyRst As ADODB.Recordset
Set MyRst = New ADODB.Recordset
MyRst.Open "SELECT Sum([qryGoodsSaling].[SumOfQuantity]) AS SUMALL FROM qryGoodsSaling", CurrentProject.Connection
Debug.Print MyRst!SUMALL
MyRst.Close
Set MyRst = Nothin
'Похоже что Access ругается на то, что подчиненный запрос ссылается на данные ActiveX 'элемента подчиненной формы subFrm. Может существует какое-то альтернативное решение ? Я решил свою проблему следующим образом:
Dim dbs As Database
Dim rst As Recordset
Set dbs = CurrentDb()
Dim qdf As QueryDef
Set qdf = dbs.QueryDefs("qryQV")
qdf.Parameters("[Forms]![frmGoodsMain]![Item Number]") = _
[Forms]![frmGoodsMain]![Item Number]
qdf.Parameters("[Forms]![frmGoodsMain]![subFrm].[Form]![ocxDateStart]") = _
[Forms]![frmGoodsMain]![subFrm].[Form]![ocxDateStart]
qdf.Parameters("[Forms]![frmGoodsMain]![subFrm].[Form]![ocxDateEnd]") = _
[Forms]![frmGoodsMain]![subFrm].[Form]![ocxDateEnd]
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
MsgBox rst!SUMALL
rst.Close
dbs.Close
 
Вопрос 47. Я разрабатываю базу, чем-то похожую на microsoft'совский Борей. Но заказчику необходима функция проверки времени и, если она соответствует некоторому условию (интервалу с 10:00 до 12:00), то будет выполняться некоторая подпрограмма. Конечно, я понимаю, что это мало относится к созданию баз данных, но всё же надеюсь, что Вы мне подскажите, как это можно сделать и написать.
 
Вопрос 48. Можно ли в контекстное меню поля формы ACCESS 97 ДОБАВИТЬ свой пункт меню, НЕ удаляя стандартные пункты ?
 
Вопрос 49. При выполнении DoCmd.Maximize форма занимает все окно Access. Я несколько поторопился, в настоящее время решил задачу ( несколько коряво ), но может быть есть еще метод? Сначала необходимо создать две строки меню: "MyMenu" и "MyMenu1". При этом первая созданная строка ("MyMenu") - пустая, а вторая - в зависимости от задач. На вкладке "НАСТРОЙКА" строка меню "MyMenu" будет находиться выше, чем "MyMenu1" , именно в ней и появляется кнопка "Восстановить окно" 2. В модуле формы добавляем код:
Dim lngStart_Width As Long
Dim lngStart_Height As Long
'для запоминания стартовых значений
Private Sub Form_Load()
lngStart_Width = Me.WindowWidth 'запоминаем стартовые значения ( какими были при конструировании
lngStart_Height = Me.WindowHeight
DoCmd.Maximize 'разворачиваем форму
Application.CommandBars("MyMenu").Enabled = False 'выключаем строку меню, где находится кнопка "восстановить окно"
End Sub
'теперь форма занимает все окно Access при этом автоматически отслеживается его размер и отсутствуют полосы прокрутки, т. е. форму можно использовать в качестве фона приложения с возможностью произвольного редактирования. (Примеры описаны в Ваших рассылках)
Для динамического изменения размеров элементов фоновой формы (рисунки, т.п.) добавим :
Private Sub Form_Resize()
Dim lngN_Width As Single
lngN_Width = Me.WindowWidth / lngStart_Width
Me.Pic1.Width = Me.Picture1.Width * (Me.WindowWidth / lngStart_Width)
Me.Pic1.Height = Me.Picture1.Height * (Me.WindowWidth / lngStart_Width)
lngStart_Width = Me.WindowWidth
lngStart_Height = Me.WindowHeight
End Sub
Алгоритм изменения размеров элементов зависит от фантазии. К сожалению я забыл как устраняется "мерцание" формы при загрузке. Естественно, в форме отсутствуют граница, кнопки и т.п.
 
Вопрос 50. Подскажите, пожалуйста, как в вычисляемом поле запроса "Access" избавиться от 15 - 18 знаков после запятой? В вычисляемом поле перемножаются данные из поля с "длинным целым" (пробовал изменить на "целое") на данные из поля с "плавающей точкой (4 байт)" (пробовал и на 8 байт).
 
Вопрос 51. Как создать архив в созданной базе данных, например, за предыдущие месяцы? А за текущий месяц информация оставалась бы. Архив нужен для того, чтобы можно было посмотреть информацию за предыдущие месяцы.
 
Вопрос 52. Подскажите, пожалуйста, ответ на давно мучающий меня вопрос. Как сделать чтобы заголовки столбцов (PIVOT) перекрестного запроса выбирались бы из формы пользователем, или бы из отдельной таблицы, в которую бы пользователь их заносил?
 
Вопрос 54. Подскажите пожалуйста, как снять защиту с файла, созданного под ACCESS 2000.
 
Вопрос 55. Как в Access вывести отчет (Report) в *.prn файл БЕЗ помощи пользователя (программными средствами)? Вручную печать в файл проходит нормально.
 
Вопрос 56. В одном из прошлых выпусков рассылки Вы упомянули о том, что Вам в программе "Склад и Реализация" удалось реализовать постоянную скорость доступа к данным в течение года. Насколько я понимаю, в данном случае скорость обработки данных не зависит от их объема, чего в случае работы с большими (по числу записей) таблицами быть НЕ МОЖЕТ. Объясните, пожалуйста, в общих чертах, как Вам удалось добиться такого результата, или пришлите ссылки на ресурсы Internet. Если Вы решили разбивать большие (по количеству записей) таблицы на несколько одинаковых небольших таблицах, тогда поясните, как Вы реализовали скоординированный доступ к этим таблицам.
 
Copyright © 10.10.2000 Виктор Конюков,  (Web: www.liac.nm.ru, Email: LiderAccess.bigfoot.com)


http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное