Разработка баз данныхРазработка баз данных

 Программирование  Программы  Ссылки  Обратная связь
     
. . .
. . .
startpage.htm Новости
about.htm О сайте
fileformat.htm I. Выбор технологии
clientserver.htm Преимущества клиент-серверной технологи
prepare.htm Переход от MDB к ADP
upsizing.htm Инструменты переноса данных
setupserver.htm Выбор версии и установка сервера
selectclient.htm Выбор версии MSAccess
formsreports.htm II. Формы, Отчеты MSAccess
queries.htm Запросы / ADO
inputparameters.htm Передача входных параметров
data_drivers.htm Библиотеки доступа к данным
forms.htm Формы MSAccess
requery.htm Обновление данных в форме
updatableform.htm Обновляемость данных в форме
dialogform.htm Остановка кода пока открыта форма
formsaverecord.htm Сохранить текущую запись
formgotorecord.htm Переход по записям формы
sumform.htm Итоги в формах
serverfiltersample.htm Пример серверного фильтра
formerror.htm Причина Ошибки #Error
menubarevent.htm Перехват нажатия на кнопку меню
woconditionalformat.htm Раскраска строк ленточной формы без условного форматирования
currrec.htm Выделение цветом текущей записи
subform.htm Подчиненные Формы
textboxenter.htm Ввод перевода строки
twimagelistbug.htm treview + imagelist + подч. форма
reports.htm Отчеты, общие рекомендации
report_input_parameters.htm Входные параметры
vbaprog.htm III. Программирование VBA
dbpic.htm Картинки в базе данных
binbmp.htm Двоичные данные картинки в поле таблицы базы данных
piclink.htm Хранение ссылок на файлы
picjpg.htm Бинарное содержимое JPG, Gif файла в бинарном поле базы данных
playsound.htm Воспроизведение звуков
tv.htm Функции для тривью
restartaccess.htm Перезапуск Аксесса
publicvariables.htm Передача и хранение параметров и настроек
collectionfunctions.htm Коллекция полезных функций
datepicker.htm Всплывающий календарик
menuhummer.htm Меню и тулбары
padeg.htm Склонение по падежам
comborowsource.htm Источник данных для поля со списком
filedialog.htm Диалог выбора файла / папки
sendmapi.htm Отправка почты (4 способа) + архивация
autoupdateclient.htm Автоматическое обновление клиентской части
licenses.htm  Устранение проблем с регистрацией компонентов
uncommented.htm Без коментариев
filetime.htm Время и дата файла
reportsample.htm Пример настраивомого отчета
adpformfilter.htm Серверный Фильтр by GEO
tempmdb.htm ADP: Временный MDB для временных таблиц
mutex.htm Запрет запуска нескольких копий приложения
translit.htm Транслитерация всего проекта.
updateident.htm Изменение счетчика
webinterface.htm IV WEB
accessinternet.htm Работа с аксесс через интернет
webupdate.htm Обновление приложения аксесс через интернет
msiecom.htm Программное управление веббраузером
sqlserver.htm MS SQL
mssqltransfer2.htm Перенос/копирование баз
mssqlperm.htm Adp проверка прав пользователя перед открытием формы или управление доступностью полей формы
mssqlcrossdatabase.htm  Межбазовые разрешения
tsqlcollection.htm T-sql коллекция
similarity.htm Сортировка по созвучности
esp.htm расширенные хранимые процедуры
mssqloptimizing.htm Оптимизация быстродействия
    

Коллекция полезных функций

 
Альтернатива DLookUp

 
 
Public Function SqlLookUp(sql)  
Dim ar  
On Error Resume Next  
ar = CurrentProject.connection.Execute(sql).GetRows  
SqlLookUp = ar(0, 0)  
End Function  
 
Вариант 2  
Public Function SqlLookUp(sql)  
On Error Resume Next  
SqlLookUp = CurrentProject.Connection.Execute(sql).Fields(0)  
End Function  
 
 
Вызов функции из вычисляемого поля:  
= SqlLookUp(" select a + b + c from mytable where id=" & [formID] )  
 
Функция возвратит первое значение (первая строка и первое поле) из набора записей определяемого параметром SQL  
 
 

Функция максимизации формы 

 
 
Преимущество перед классическим способом   
работает быстрее если фома уже максимизирована  
не вызывает предергивания экрана.  
 
 
Declare Function IsZoomed Lib "user32" (ByVal hwnd As Long) As Long  
 
Sub FormMaximize()  
On Error Resume Next  
    If Not IsZoomed(Screen.ActiveForm.hwnd) Then  
        Echo False  
        DoCmd.Maximize  
        Echo True  
    End If  
End Sub  
 
Вызов из события загрузка формы:  
 
Call FormMaximize()  
 
 

 
 

Переоткрытие формы или отчета:

 
 
Если отчет вызывается из  формы, которая впоследствии остается открытой,  
в случае если открываемая форма или отчет не были закрыты, то в случае повторного вызова можно обнаружить, что критерии отбора данных изменены,  
а данные в открываемом отчете - старые. Во избежание такого эффекта используем для открытия следующие функции:    
 
Public Sub Reload_form(FRM_NAME As String, Optional WM As AcWindowMode = acWindowNormal, Optional openarg As String)  
If CurrentProject.AllForms(FRM_NAME).IsLoaded Then DoCmd.Close acForm, FRM_NAME  
DoCmd.OpenForm FRM_NAME, , , , , WM, openarg  
End Sub  
 
 
Public Sub Reload_Report(REP_NAME As String, Optional View As Access.AcView = acViewPreview, Optional ARGS As String)  
 'openargs в отчетах начиная с Acc 2002  
 If CurrentProject.AllReports(REP_NAME).IsLoaded Then DoCmd.Close acReport, REP_NAME  
 DoCmd.OpenReport REP_NAME, View, , , , ARGS  
End Sub  
 
 
 
 

   

Функции сохранения значения контрола на форме в реестр и извлечения из него

 
 
Сохранение в реестр:  
 
Public Sub SetRegistry(Ctl As Control)  
Call SaveSetting(Left(CurrentProject.NAME, Len(CurrentProject.NAME) - 4), Ctl.Parent.NAME, Ctl.NAME, Ctl.value)  
End Sub  
 
Извлечение из реестра:  
 
Public Sub GetRegistry(Ctl As Control, Optional DefaultValue)  
Dim v1  
v1 = GetSetting(Left(CurrentProject.NAME, Len(CurrentProject.NAME) - 4), Ctl.Parent.NAME, Ctl.NAME)  
If v1 = "" Then Ctl.value = DefaultValue Else Ctl.value = v1  
End Sub  
 
Сохранение в реестр обычно помещается в событие выгрузка формы  
 
Call SetRegistry(me.Поле1)  
 
Извлечение из реестра   
обычно в событии загрузка формы  
Второй параметр опционален и может содержать значение по умолчанию на тот случай, если в реестре ничего нет (первая загрузка)  
 
Call GetRegistry(me.ПолеДаты)  
или  
Call GetRegistry(me.ПолеДаты, date())  
 

 
 

Курс валют ЦБРФ


 
 
Функция получения курса из таблицы с автозакачкой в случае необходимости:  
Для работы данной функции необходимы подключенные в Ссылках референсы на библиотеки   
MS ADO 2.6  
MS XML 2.0  
и нижеприведенные вспомогательные функции.  
 
Option Explicit  
Private Error_load_xml As Boolean  
Public Selected_retry_abort_ignore 'нет соединения- повторить прервать игнорировать  
 
 
Public Function Get_Course_USD(onDate As Date)  
Dim tm  
Dim Srv_date As Date  
Dim LAST_course_date As Date  
'запросить с сервера текущую дату  
tm = CurrentProject.Connection.Execute("select getdate() as serv_date ").GetRows  
Srv_date = tm(0, 0)  
'запросить с сервера дату последнего курса доллара  
tm = CurrentProject.Connection.Execute("SELECT TOP 1 DATE_VALute AS last_date from dbo.VALUTe  ORDER BY DATE_VALute DESC").GetRows  
LAST_course_date = tm(0, 0)  
'если есть недостающие данные то добавить из интернета курсы доллара за этот диапазон  
If Int(LAST_course_date) < Int(Srv_date) Then  
   Call Course_2_table(LAST_course_date, Srv_date)  
End If  
'запросить курс из таблицы на дату  
tm = CurrentProject.Connection.Execute("select dbo.get_course_finctrl (" & Clng(onDate)- 2 & ") as c_usd ").GetRows  
Get_Course_USD = tm(0, 0)  
If onDate > Srv_date Then  
'если дата сервера > даты запроса  
'сообщение о некорректности операции  
If Selected_retry_abort_ignore <> vbAbort Then MsgBox "Курс доллара на запрашиваемую дату неизвестен, будет использовано последнее известное значение"  
End If  
End Function  
 
Вспомогательные функции:  
1. Функция загрузки курса доллара в таблицу на сервере за период времени  
 
Private Sub Course_2_table(Datefrom As Date, Dateto As Date)  
Dim nodelist, iIndex  
Dim xmlNode As MSXML.IXMLDOMNode  
Dim node_attr As MSXML.IXMLDOMAttribute  
Dim rst As New ADODB.Recordset  
Dim conn As New ADODB.Connection  
 
 
Set nodelist = xmldoc(Datefrom, Dateto).selectNodes("*/Record")  
If Error_load_xml Then Exit Sub  
 
conn.Open CurrentProject.Connection.ConnectionString  
conn.BeginTrans  
conn.Execute ("delete from valute where date_valute between " & clng(Datefrom)-2 & " and " & clng(Dateto)-2)  
 
 
rst.Open "select * from dbo.valute where idvalute = 0 ", conn, adOpenDynamic, adLockOptimistic  
 
For iIndex = 0 To nodelist.length - 1  
      Set xmlNode = nodelist.Item(iIndex).cloneNode(True)  
      Set node_attr = xmlNode.Attributes(0)  
 
      rst.AddNew  
      rst!USD = Replace(Replace(xmlNode.childNodes(1).Text, ",", ".", 1, , vbBinaryCompare), Chr(160), "", 1, , vbBinaryCompare)   
'        Это значение  
      rst!Date_valute = node_attr.value ' Это дата  
      rst.Update  
Next  
conn.CommitTrans  
rst.Close  
Set rst = Nothing  
conn.Close  
Set conn = Nothing  
End Sub  
 
 
2. Функция для закачки курса из интернет  
 
Private Function xmldoc(Datefrom As Date, Dateto As Date)  
Dim url_request  
' Создаем экземпляр объекта - XML парзера  
Set xmldoc = CreateObject("Msxml.DOMDocument")  
xmldoc.async = False  
'запрос к серверу центробанка в принятом формате на получение xml документа , разумно вынести даты как переменные а процедуру преобразовать в функцию  
url_request = "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=" & Format(Datefrom, "dd.mm.yyyy") & "&date_req2=" & Format(Dateto, "dd.mm.yyyy") & "&VAL_NM_RQ=R01235"  
' загружаем документ по url  
rl:  
If Not xmldoc.Load(url_request) = True Then  
Error_load_xml = True  
Selected_retry_abort_ignore = MsgBox("Невозможно установить связь с сервером Центробанка для получения курса доллара, возможно отсутствует соединение с Интернет", vbAbortRetryIgnore)  
If Selected_retry_abort_ignore = vbRetry Then GoTo rl:  
 
Exit Function  
End If  
Selected_retry_abort_ignore = 0  
Error_load_xml = False  
End Function  
 
Описание структуры таблицы в которую будут помещены данные

Название   Тип      размер    прочее

id       int      4      not null, identity   Primary key   
NumCode   int       4         
CharCode   nvarchar   255         
Nominal   int       4         
Name       nvarchar   255         
Value       real       4         
date       datetime   8         


Скрипт таблицы:

CREATE TABLE [dbo].[Valute] (
[NumCode] [int] NULL ,
[CharCode] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
[Nominal] [int] NULL ,
[Name] [nvarchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
[Value] [real] NULL ,
[date] [datetime] NULL ,
[id] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]

Подсказка для новичков:
Для создания таблицы достаточно скопировать данный скрипт в Query analyzer , подключенный к вашей базе или в новую хранимую процедуру в Аксессе (между AS и RETURN )и выполнить его.
 
. . .
. . .
© 2000 - 2009 Алексей Козин эта вебстраница является зеркалом сайта www.msdatabase.ru Рейтинг@Mail.ru
Hosted by uCoz