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

 Программирование  Программы  Ссылки  Обратная связь
     
. . .
. . .
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 Оптимизация быстродействия
    

Без коментариев

 
В данном разделе интересные решения и куски кода,  
которые жалко потерять но и проверить до конца на  
предмет наличия "подводных камней" и подробно описать  
тонкости нет времени.  
Вероятно их будет сложно понять непосвященным.  
Именно поэтому я несколько отдалил этот раздел.  
 
 
 


Защитить Word документ используемый в качестве отчета от измененеий
1 . WRD.Protect Type:=wdAllowOnlyFormFields
2. Password :="Пароль"
 
 
 
 
Скачать с FTP
Запустить из коммандной строки или через Shell программно.  
ftp -i -s:FTP_SCR.TXT  
 
FTP_SCR.TXT:  
open 000.000.000.000  
логин  
пасворд  
binary  
get /путь_там путь здесь  
rem например get /swop/tar.tar.gz c:/tar.tar.gz  
quit  
 
 
Макросы в Аксесс могут начать выдавать ошибки (MDB, ADP)
Хотя на другом компьютере программа работает   
Например:  
Функция RunCode может не находить имя функции.  
 
Причина:  
На компьютере не установлен MSJET SP8 (в комплекте MDAC 2.8 не поставляется, в состав Аксесса и сервис-паков не входит)  
Загрузить можно только отдельно : http://support.microsoft.com/default.aspx?scid=kb;en-us;829558  
 
Поиск процесса приложения (загружен ли MSWORD) by baike2000
 
 
Const TH32CS_SNAPHEAPLIST As Long = 1 ' включить список куч в снапшот
Const TH32CS_SNAPPROCESS As Long = 2 ' включить списко процессов
Const TH32CS_SNAPTHREAD As Long = 4 ' включить список тредов
Const TH32CS_SNAPMODULE As Long = 8 ' включить список модулей
Const TH32CS_SNAPALL As Long = 1 Or 2 Or 4 Or 8 ' в снапшот будет включено все
Const TH32CS_INHERIT As Long = &H80000000 ' снапшот может наследоваться
Type PROCESSENTRY32
size As Long ' размер структур - нужно установить до вызова
usage As Long ' ссылок на процесс - живет, пока не равно нулю
processid As Long ' PID
defaultHeapID As Long ' ID кучи процесса по умолчанию
moduleID As Long ' MID :))
threads As Long ' количество запущенных процессом тредов
parentProcessID As Long ' PID процесса, создавшего наш процесс
priClassBase As Long ' базовый приоритет тредов
flags As Long ' зарезервировано
exeFile As String * 255 ' лучшее напоследок - полный путь к процессам!
End Type

Declare Function CreateToolhelp32Snapshot Lib "Kernel32.dll" (ByVal dwFlag As Long, ByVal processid As Long) As Long
Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Boolean
Declare Function Process32First Lib "Kernel32.dll" (ByVal hSnapShot As Long, ByRef Procentry32 As PROCESSENTRY32) As Boolean
Declare Function Process32Next Lib "Kernel32.dll" (ByVal hSnapShot As Long, ByRef Procentry32 As PROCESSENTRY32) As Boolean
Function FindProcess(strProcess As String) As Boolean
Dim flag As Boolean, hSnap As Long
Dim Procentry As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(2, 0)
flag = False
Procentry.size = 291
If Process32First(hSnap, Procentry) Then
If InStr(UCase(Procentry.exeFile), UCase(strProcess)) <> 0
Then flag = True
While (Not flag) And (Process32Next(hSnap, Procentry))
   If InStr(UCase(Procentry.exeFile), UCase(strProcess)) <> 0 Then
    flag = True
   End If
Wend
End If
CloseHandle hSnap
FindProcess = flag
End Function

Private Sub IsProcess()
If FindProcess("WINWORD.EXE") Then MsgBox "Найден" Else MsgBox "Не найден" End Sub   



Динамическое изменение размеров формы    
src: http://www.msaccess.ru/UserInterfase_Dinamic_Scr.html  
 
Option Compare Database  
Option Explicit  
 
Private Declare Function apiGetSys Lib "user32" _  
Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long  
 
Private Const SM_CXSCREEN = 0  
Private Const SM_CYSCREEN = 1  
Private Const SM_CXVSCROLL = 2  
Private Const SM_CYHSCROLL = 3  
Private Const SM_CYCAPTION = 4  
Private Const SM_CXBORDER = 5  
Private Const SM_CYBORDER = 6  
Private Const SM_CXDLGFRAME = 7  
Private Const SM_CYDLGFRAME = 8  
Private Const SM_CYVTHUMB = 9  
Private Const SM_CXHTHUMB = 10  
Private Const SM_CXICON = 11  
Private Const SM_CYICON = 12  
Private Const SM_CXCURSOR = 13  
Private Const SM_CYCURSOR = 14  
Private Const SM_CYMENU = 15  
Private Const SM_CXFULLSCREEN = 16  
Private Const SM_CYFULLSCREEN = 17  
Private Const SM_CYKANJIWINDOW = 18  
Private Const SM_MOUSEPRESENT = 19  
Private Const SM_CYVSCROLL = 20  
Private Const SM_CXHSCROLL = 21  
Private Const SM_DEBUG = 22  
Private Const SM_SWAPBUTTON = 23  
Private Const SM_RESERVED1 = 24  
Private Const SM_RESERVED2 = 25  
Private Const SM_RESERVED3 = 26  
Private Const SM_RESERVED4 = 27  
Private Const SM_CXMIN = 28  
Private Const SM_CYMIN = 29  
Private Const SM_CXSIZE = 30  
Private Const SM_CYSIZE = 31  
Private Const SM_CXFRAME = 32  
Private Const SM_CYFRAME = 33  
Private Const SM_CXMINTRACK = 34  
Private Const SM_CYMINTRACK = 35  
Private Const SM_CXDOUBLECLK = 36  
Private Const SM_CYDOUBLECLK = 37  
Private Const SM_CXICONSPACING = 38  
Private Const SM_CYICONSPACING = 39  
Private Const SM_MENUDROPALIGNMENT = 40  
Private Const SM_PENWINDOWS = 41  
Private Const SM_DBCSENABLED = 42  
Private Const SM_CMOUSEBUTTONS = 43  
Private Const SM_CMETRICS = 44  
 
Function fGetSysStuff(strWhat As String) As String  
Dim strRet As String  
Select Case LCase(strWhat)  
Case "resolution": strRet = apiGetSys(SM_CXSCREEN) & "*" _  
& apiGetSys(SM_CYSCREEN)  
Case "windowsize": strRet = apiGetSys(SM_CXFULLSCREEN) & "*" _  
& apiGetSys(SM_CYFULLSCREEN)  
End Select  
fGetSysStuff = strRet  
End Function  
 
Sub ТрансформироватьФорму(frm As Form, var_РазрешениеЭкранаНаКотороеНастроенаФорма As String)  
 
Dim КоэффициентТрансформации As Double  
If fGetSysStuff("resolution") <> var_РазрешениеЭкранаНаКотороеНастроенаФорма Then  
КоэффициентТрансформации = NSA_SCR_КоэффициэнтТрансформации(var_РазрешениеЭкранаНаКотороеНастроенаФорма, fGetSysStuff("resolution"))  
Call Динамически_ТрансформироватьФорму(frm, КоэффициентТрансформации)  
End If  
End Sub  
 
 
Sub Динамически_ТрансформироватьФорму(frm As Form, var_КоэффициэнтТрансформации As Double)  
On Error GoTo Err_Динамически_ТрансформироватьФорму  
 
Dim ctr As Control  
Dim i As Variant  
Dim j As Variant  
Dim var_ШиринаФормы As Double  
Dim var_FormName As String  
Dim ЕстьЛиЗаголовокФормы As Boolean  
Dim ЕстьЛиПримечаниеФормы As Boolean  
Dim ЕстьЛиВерхнийКолонтитулФормы As Boolean  
Dim ЕстьЛиНижнийКолонтитулФормы As Boolean  
 
Dim ВысотаОбластиДанных As Double  
Dim ВысотаЗаголовкаФормы As Double  
Dim ВысотаПримечанияФормы As Double  
Dim ВысотаВерхнегоКолонтитулаФормы As Double  
Dim ВысотаНижнегоКолонтитулаФормы As Double  
Dim Max  
Dim Size  
 
var_FormName = frm.Name  
var_ШиринаФормы = frm.Width  
 
ВысотаОбластиДанных = frm.Section(0).Height  
 
 
ЕстьЛиЗаголовокФормы = False  
On Error GoTo МеткаНетЗаголовкаФормы  
ВысотаЗаголовкаФормы = frm.Section(1).Height  
ЕстьЛиЗаголовокФормы = True  
GoTo ПроверкаПримечанияФормы  
МеткаНетЗаголовкаФормы:  
Resume ПроверкаПримечанияФормы  
 
ПроверкаПримечанияФормы:  
ЕстьЛиПримечаниеФормы = False  
On Error GoTo МеткаНетПримечанияФормы  
ВысотаПримечанияФормы = frm.Section(2).Height  
ЕстьЛиПримечаниеФормы = True  
GoTo ПроверкаВерхнегоКолонтитулаФормы  
МеткаНетПримечанияФормы:  
Resume ПроверкаВерхнегоКолонтитулаФормы  
 
ПроверкаВерхнегоКолонтитулаФормы:  
ЕстьЛиВерхнийКолонтитулФормы = False  
On Error GoTo МеткаНетВерхнегоКолонтитулаФормы  
ВысотаВерхнегоКолонтитулаФормы = frm.Section(3).Height  
ЕстьЛиВерхнийКолонтитулФормы = True  
GoTo ПроверкаНижнегоКолонтитулаФормы  
МеткаНетВерхнегоКолонтитулаФормы:  
Resume ПроверкаНижнегоКолонтитулаФормы:  
 
ПроверкаНижнегоКолонтитулаФормы:  
ЕстьЛиНижнийКолонтитулФормы = False  
On Error GoTo МеткаНетНижнегоКолонтитулаФормы  
ВысотаНижнегоКолонтитулаФормы = frm.Section(3).Height  
ЕстьЛиНижнийКолонтитулФормы = True  
GoTo ОконченаПроверка  
МеткаНетНижнегоКолонтитулаФормы:  
Resume ОконченаПроверка  
 
ОконченаПроверка:  
On Error GoTo Err_Динамически_ТрансформироватьФорму  
 
Dim КолЭлУпр As Long  
КолЭлУпр = frm.Controls.Count  
 
ReDim МассивЭлементов(1 To 7, 0 To КолЭлУпр - 1) As Double  
Dim kolWkl As Long  
kolWkl = 0  
 
For i = 0 To КолЭлУпр - 1  
 
Set ctr = frm.Controls(i)  
 
If ctr.ControlType = acPage Then  
 
МассивЭлементов(1, kolWkl) = i  
МассивЭлементов(2, kolWkl) = ctr.Top  
МассивЭлементов(3, kolWkl) = ctr.Left  
МассивЭлементов(4, kolWkl) = ctr.Width  
МассивЭлементов(5, kolWkl) = ctr.Height  
МассивЭлементов(6, kolWkl) = 0  
For Each j In ctr.Properties  
 
If j.Name = "FontSize" Then  
МассивЭлементов(6, kolWkl) = -1  
МассивЭлементов(7, kolWkl) = ctr.FontSize  
Exit For  
End If  
 
Next j  
kolWkl = kolWkl + 1  
 
End If  
 
Next i  
 
For i = 0 To КолЭлУпр - 1  
 
Set ctr = frm.Controls(i)  
 
If ctr.ControlType = acTabCtl Then  
 
МассивЭлементов(1, kolWkl) = i  
МассивЭлементов(2, kolWkl) = ctr.Top  
МассивЭлементов(3, kolWkl) = ctr.Left  
МассивЭлементов(4, kolWkl) = ctr.Width  
МассивЭлементов(5, kolWkl) = ctr.Height  
МассивЭлементов(6, kolWkl) = 0  
For Each j In ctr.Properties  
 
If j.Name = "FontSize" Then  
МассивЭлементов(6, kolWkl) = -1  
МассивЭлементов(7, kolWkl) = ctr.FontSize  
Exit For  
End If  
 
Next j  
kolWkl = kolWkl + 1  
 
End If  
 
Next i  
 
For i = 0 To КолЭлУпр - 1  
 
Set ctr = frm.Controls(i)  
 
If ctr.ControlType <> acTabCtl And ctr.ControlType <> acPage Then  
 
МассивЭлементов(1, kolWkl) = i  
МассивЭлементов(2, kolWkl) = ctr.Top  
МассивЭлементов(3, kolWkl) = ctr.Left  
МассивЭлементов(4, kolWkl) = ctr.Width  
МассивЭлементов(5, kolWkl) = ctr.Height  
МассивЭлементов(6, kolWkl) = 0  
For Each j In ctr.Properties  
 
If j.Name = "FontSize" Then  
МассивЭлементов(6, kolWkl) = -1  
МассивЭлементов(7, kolWkl) = ctr.FontSize  
Exit For  
End If  
 
Next j  
kolWkl = kolWkl + 1  
 
End If  
 
Next i  
 
On Error Resume Next  
 
frm.Width = var_ШиринаФормы + var_ШиринаФормы * var_КоэффициэнтТрансформации  
frm.Section(0).Height = ВысотаОбластиДанных + ВысотаОбластиДанных * var_КоэффициэнтТрансформации  
 
If ЕстьЛиЗаголовокФормы Then  
frm.Section(1).Height = ВысотаЗаголовкаФормы + ВысотаЗаголовкаФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиПримечаниеФормы Then  
frm.Section(2).Height = ВысотаПримечанияФормы + ВысотаПримечанияФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиВерхнийКолонтитулФормы Then  
frm.Section(3).Height = ВысотаВерхнегоКолонтитулаФормы + ВысотаВерхнегоКолонтитулаФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиНижнийКолонтитулФормы Then  
frm.Section(4).Height = ВысотаНижнегоКолонтитулаФормы + ВысотаНижнегоКолонтитулаФормы * var_КоэффициэнтТрансформации  
End If  
 
For i = КолЭлУпр - 1 To 0 Step -1  
 
Set ctr = frm.Controls(МассивЭлементов(1, i))  
 
'От верхнего края  
ctr.Top = МассивЭлементов(2, i) + МассивЭлементов(2, i) * var_КоэффициэнтТрансформации  
'От левого края  
ctr.Left = МассивЭлементов(3, i) + МассивЭлементов(3, i) * var_КоэффициэнтТрансформации  
'Ширина  
ctr.Width = МассивЭлементов(4, i) + МассивЭлементов(4, i) * var_КоэффициэнтТрансформации  
'Высота  
ctr.Height = МассивЭлементов(5, i) + МассивЭлементов(5, i) * var_КоэффициэнтТрансформации  
If ctr.Top > Max Then  
Max = ctr.Top  
Size = ctr.Height  
End If  
If МассивЭлементов(6, i) = -1 Then  
ctr.FontSize = МассивЭлементов(7, i) + МассивЭлементов(7, i) * var_КоэффициэнтТрансформации  
If var_КоэффициэнтТрансформации = -0.2 Then ctr.FontName = "SmallFonts"  
End If  
Next i  
 
frm.Width = var_ШиринаФормы + var_ШиринаФормы * var_КоэффициэнтТрансформации  
frm.Section(0).Height = ВысотаОбластиДанных + ВысотаОбластиДанных * var_КоэффициэнтТрансформации  
 
If ЕстьЛиЗаголовокФормы Then  
frm.Section(1).Height = ВысотаЗаголовкаФормы + ВысотаЗаголовкаФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиПримечаниеФормы Then  
frm.Section(2).Height = ВысотаПримечанияФормы + ВысотаПримечанияФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиВерхнийКолонтитулФормы Then  
frm.Section(3).Height = ВысотаВерхнегоКолонтитулаФормы + ВысотаВерхнегоКолонтитулаФормы * var_КоэффициэнтТрансформации  
End If  
 
If ЕстьЛиНижнийКолонтитулФормы Then  
frm.Section(4).Height = ВысотаНижнегоКолонтитулаФормы + ВысотаНижнегоКолонтитулаФормы * var_КоэффициэнтТрансформации  
End If  
 
frm.InsideWidth = frm.Width  
frm.InsideHeight = Max + 1.5 * Size  
DoCmd.MoveSize (apiGetSys(SM_CXSCREEN) * 20 - frm.InsideWidth) / 16, (apiGetSys(SM_CYSCREEN) * 20 - frm.InsideHeight) / 16  
 
Exit_Динамически_ТрансформироватьФорму:  
Exit Sub  
 
Err_Динамически_ТрансформироватьФорму:  
MsgBox Err.Description  
Resume Exit_Динамически_ТрансформироватьФорму  
 
End Sub  
 
 
Function NSA_SCR_КоэффициэнтТрансформации(var_ИсходныйРазмерЭкрана As String, var_КонечныйРазмерЭкрана As String) As Double  
 
On Error GoTo Err_NSA_SCR_КоэффициэнтТрансформации  
 
'Функция возвращает коэффициэнт увеличения (или уменьшения) размеров и позиций элементов управления  
'в формах для преобразования из одного размера экрана в другой.  
'Возможные варианты размеров экрана:  
' "640*480"  
' "800*600"  
' "1024*768"  
' "1280*1024"  
 
Dim a As Double  
 
Select Case var_ИсходныйРазмерЭкрана  
Case "640*480"  
Select Case var_КонечныйРазмерЭкрана  
Case "640*480"  
a = 0  
Case "800*600"  
a = 0.25  
Case "1024*768"  
a = 0.6  
Case "1280*1024"  
a = 1  
Case Else  
a = 0  
End Select  
Case "800*600"  
Select Case var_КонечныйРазмерЭкрана  
Case "640*480"  
a = -0.2  
Case "800*600"  
a = 0  
Case "1024*768"  
a = 0.28  
Case "1280*1024"  
a = 0.6  
Case Else  
a = 0  
End Select  
Case "1024*768"  
Select Case var_КонечныйРазмерЭкрана  
Case "640*480"  
a = -0.375  
Case "800*600"  
a = -0.21875  
Case "1024*768"  
a = 0  
Case "1280*1024"  
a = 0.25  
Case Else  
a = 0  
End Select  
Case "1280*1024"  
Select Case var_КонечныйРазмерЭкрана  
Case "640*480"  
a = -0.5  
Case "800*600"  
a = -0.375  
Case "1024*768"  
a = -0.2  
Case "1280*1024"  
a = 0  
Case Else  
a = 0  
End Select  
Case Else  
a = 0  
End Select  
 
NSA_SCR_КоэффициэнтТрансформации = a  
 
Exit_NSA_SCR_КоэффициэнтТрансформации:  
Exit Function  
 
Err_NSA_SCR_КоэффициэнтТрансформации:  
MsgBox Err.Description  
Resume Exit_NSA_SCR_КоэффициэнтТрансформации  
 
End Function  

проверено 1024-> 640 работает реально уменьшает. только подформы разумеется не трогает и шрифт становится безумно мелким... но это уже кое что .
 
 
 
. . .
. . .
© 2000 - 2009 Алексей Козин эта вебстраница является зеркалом сайта www.msdatabase.ru Рейтинг@Mail.ru
Hosted by uCoz