-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4

Invalid link!








Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://www.sql.ru/forum/actualtopics.aspx?bid=4.
Данный дневник сформирован из открытого RSS-источника по адресу http://www.sql.ru/forum/actualrss.aspx?id=4, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Запрос для вывода самого часто встречающегося Поля2 для Поля1

Вторник, 19 Марта 2019 г. 23:22 + в цитатник
Есть Access 2010 и куча данных в нём. Смысл запроса. Есть таблица с номерами реестров операций (pifile) и названиями организаций (org), по которым эти операции проходят. Нужно для каждого реестра найти самую часто встречающуюся организацию. В результате нужен список соответствий - Реестр-Организация. Если самых часто встречающихся организаций несколько, то реестр в итоговый запрос выводить не нужно.

Сначала создала запрос, группирующий пары Реестр-Организация и подсчитывающий, сколько таких пар получилось. Назвала его A:
Select pifile, org, count(pifile) as [counted]
From table
Group by pifile, org

Дальше пытаюсь найти самые часто встречающиеся организации для реестров и отбросить повторяющиеся реестры
Select B.pifile, B.maxcount, A.org
From
   (Select pifile, max(counted) as [maxcount]
   From A
   Group by pifile) as B
Inner Join A on B.pifile=A.pifile And B.maxcount=A.counted
Group by B.pifile, B.maxcount, A.org  //по чему группировала точно не помню, но вряд ли мне удалось бы сделать группировку по-другому
Having Count(B.pifile)=1

Без группировки и Having Count(B.pifile)=1 в итоговую таблицу попадало много записей с повторяющимися номерами реестров. Когда это добавила, повторов стало меньше.
Откуда они вообще берутся, и можно ли как-то их убрать (если самых повторяющихся организаций по реестру больше одной, то она не нужна)?

https://www.sql.ru/forum/1310398/zapros-dlya-vyvoda-samogo-chasto-vstrechaushhegosya-polya2-dlya-polya1


Access Runtime как изменить timeout для запросов

Вторник, 19 Марта 2019 г. 15:44 + в цитатник
Есть запросы к SQL Server больше 30 секунд. Как в Access Runtime изменить время ожидания ответа на запрос к серверу?

https://www.sql.ru/forum/1310377/access-runtime-kak-izmenit-timeout-dlya-zaprosov


Нужна помощь в коде

Вторник, 19 Марта 2019 г. 15:11 + в цитатник
в отдельной базе всё работает как по маслу, только внесу к себе начинает ругаться на
 Dim rs As Recordset

+
Option Compare Database
Option Explicit

Private Sub btnLoad_Click()
Dim strPicFile As String
Dim strFilter As String
Dim rs As Recordset
    'Зададим параметры и вызовем диалог открытия файла
    strFilter = ahtAddFilterItem(strFilter, "Картинки GIF и JPEG", "*.GIF; *.JPG")
    strPicFile = ahtCommonFileOpenSave(Filter:=strFilter, OpenFile:=True, _
                    DialogTitle:="Выберите картинку...", _
                    flags:=ahtOFN_HIDEREADONLY)
    If strPicFile = "" Then Exit Sub 'Если файл не выбран - выходим из процедуры
    Me.txtPictureType = GetExt(strPicFile) 'Расширение файла картинки запомним в поле PictureType
    DoCmd.RunCommand acCmdSaveRecord 'Сохраним запись, что важно, если она новая
    Set rs = Me.RecordsetClone 'Для дальнейшей работы нужен набор записей
    rs.Bookmark = Me.Bookmark 'Встаём на текущую запись формы
    rs.Edit
      Call ReadBLOB(strPicFile, rs, "Picture") 'Пишем картинку из файла в поле Picture
    rs.Update
    'Пишем картинку обратно из поля Picture во временный файл в текущем каталоге базы
    Call WriteBLOB(rs, "Picture", GetPath(CurrentDb.Name) & "temp" & GetExt(strPicFile))
    'Выводим картинку из этого временного файла в форму
    Me.imgPicture.Picture = GetPath(CurrentDb.Name) & "temp" & GetExt(strPicFile)

End Sub

Private Sub Form_Current()
Dim strPicFile As String
Dim rs As Recordset
  Set rs = Me.RecordsetClone 'Для дальнейшей работы нужен набор записей
  If IsNull(Me!ID) Then 'Если запись новая, то очищаем картинку на форме
    Me.imgPicture.Picture = ""
  Else
    rs.Bookmark = Me.Bookmark 'Встаём на текущую запись формы
    strPicFile = GetPath(CurrentDb.Name) & "temp" & Me!PictureType 'Получаем координаты временного файла
    Call WriteBLOB(rs, "Picture", strPicFile) 'Пишем картинку из поля Picture во временный файл
    Me.imgPicture.Picture = strPicFile 'Выводим картинку из этого временного файла в форму
  End If
End Sub

Весь код прилагается

https://www.sql.ru/forum/1310375/nuzhna-pomoshh-v-kode


Outlook?

Понедельник, 18 Марта 2019 г. 12:54 + в цитатник
Появилась необходимость из базы рассылать сообщения и получать(и обрабатывать) ответы....
Типа:
Адресат
Тема
текст
вложение

в ответ хотелось бы получить
Тема
согласовано/не согласовано
Комментарий

В зависимости от согласовано/не согласовано должны выполняться некие действия...

Как это лучше сделать? Через модель Outlook? или еще какие способы есть? Все нужные адресаты в локальной сети....

https://www.sql.ru/forum/1310312/outlook


Базы данных Access: Сформировать запрос

Воскресенье, 17 Марта 2019 г. 20:58 + в цитатник
Есть некая база данных студентов в Access 2016. Необходимо сформировать запрос на выборку, который отобразит всех студентов, у которых нет ни одной оценки "2". Если есть хотя бы одна двойка - студента в результатах запроса в принципе не должно быть. Как это сделать? Помогите!!!

https://www.sql.ru/forum/1310291/bazy-dannyh-access-sformirovat-zapros


что нужно prc? особенность Access

Воскресенье, 17 Марта 2019 г. 10:28 + в цитатник
всем знатокам и любителям vba добрый день.
заинтересовал вот какой момент, может кто сталкивался в практике

есть глобальная функция fncКл1113000000000000000000, которая считает 5 параметров и возвращает их в виде одномерного массива, эти данные опять же в виде массива передаются в приватную процедуру prcЗаполнитьКлючевыеПоля, которая заполняет нужные поля на форме. Все работает, вопрос больше из интереса.
Если записать вот так
РасчетДанных:
'----------------------
Select Case [fldТарифКлассификатор].Value
     Case "1113000000000000000000"
          arrКлючевыеПоля = fncКл1113000000000000000000([fldВкладСрок].Value, [fldСтавкаМакс].Value)
          prcЗаполнитьКлючевыеПоля(arrКлючевыеПоля)
End Select

то все отличное работает, а если вот так
РасчетДанных:
'----------------------
Select Case [fldТарифКлассификатор].Value
     Case "1113000000000000000000"
          prcЗаполнитьКлючевыеПоля (fncКл1113000000000000000000([fldВкладСрок].Value, [fldСтавкаМакс].Value))
End Select
то система выдает ошибку: type mismatch: array or user-defined type expected.
По мне так эта та же самая запись, то есть система сначала считает функцию, а потом передает ее в качестве аргумента уже в процедуру. Или я в синтаксисе косячу где-то, что vba ругается?
Заранее благодарствую за ответы

https://www.sql.ru/forum/1310280/chto-nuzhno-prc-osobennost-access


Как удалить записи в нескольких таблицах одной кнопкой

Суббота, 16 Марта 2019 г. 21:41 + в цитатник
Здравствуйте.
Есть 4 таблицы данные из них берутся через запрос в форму.

Как удалить из формы нажатием одной кнопки сразу с 4 таблиц текущую строку?

https://www.sql.ru/forum/1310273/kak-udalit-zapisi-v-neskolkih-tablicah-odnoy-knopkoy


Drop table, import table

Суббота, 16 Марта 2019 г. 21:06 + в цитатник
Доброго здравия,
сижу над диллемой, как бы сделать полное обновление таблицы из одной mdb в другую через стандартный ADO?

Т.е. есть одна машина на которой редактируются данные. И есть другая машина, на которую нужно синхронизировать данные.
Построчно перебирать, что там изменилось не очень охота.

А как лучше экспортировать полностью таблицу с данными с источника, чтобы корректно импортировать в новую бд, предварительно дропнув там существующую таблицу?

https://www.sql.ru/forum/1310270/drop-table-import-table


AOIndex' не является индексом данной таблицы

Пятница, 15 Марта 2019 г. 23:14 + в цитатник
При "сжатии и восстановлении" базы вылетает окно с надписью " 'AOIndex' не является индексом данной таблицы " как это исправить???

https://www.sql.ru/forum/1310258/aoindex-ne-yavlyaetsya-indeksom-dannoy-tablicy


Автофильтрующийся комбобокс

Пятница, 15 Марта 2019 г. 12:38 + в цитатник
Список фильтруется по мере ввода данных.
Удобно использовать на более менее длинных списках.
Класс взят как есть из рабочего проекта. Делалось под свои задачи, но пока особых проблем за ним не замечал. Последний раз дорабатывалось когда понадобилось расширить функционал на простые списки.
Во время написания поста нашел похожую тему: https://www.sql.ru/forum/277809/filtraciya-combobox-po-mere-vneseniya-dannyh-ado?mid=2510813#2510813
В общем,- может кому пригодится и моя поделка на эту тему..
Конструктивная критика приветствуется.
Option Compare Database
Option Explicit
'=========================
Private Const c_strModule As String = "clsAutoFilteredCombo"
'=========================
' Описание      : Класс для работы с автофильтрующимися комбобоксами.
' Версия        : 1.0.3.435244168
' Дата          : 28.02.2019 10:00:12
' Автор         : iKaRus_VLZ (KashRus@gmail.com)
' Примечания    : работает с .RowSourceType="Table/Query" и "Value List" (с оговорками, см. p_FilterList)
' v.1.0.3       : добавлена возможность фильтровать списки "Value List"
' v.1.0.2       : добавлена SelectItem для принудительного выбора значения списка по коду
'=========================
' Пример использования:
'=========================
'' объявляем класс с событиями
'Dim WithEvents lst As clsAutoFilteredCombo
'' инициализируем селектор записей
'Private Sub Form_Open(Cancel As Integer)
'' lstMyList - имя контрола комбобокса на форме
'    Set lst = New clsAutoFilteredCombo: lst.Init lstMyList
'End Sub
'' обработка выбора в списке
'Private Sub lst_ItemSelected(Key As Variant)
'' Key - ключ списка (значение связанного столбца списка)
'' здесь можно сделать переход по записи или иное действие с ключом
'End Sub
'=========================
Public Event ItemSelected(Key As Variant) ' событие при выборе значения в ComboBox
Private WithEvents mCombo As Access.ComboBox
Private strListSource As String ' источник данных ComboBox
Private strListFilter As String ' имя поля источника отображаемого в ComboBox
Private bytColVis As Byte       ' номер первой видимой колонки в ComboBox
Private aPos() As Integer       ' позиции элементов в строке strListSource для "Value List"
Private bolJustEnter As Boolean
Private Const c_strListDelim = ";"
Private Const c_strCustomProc = "[Event Procedure]"
Public Sub Init(Combo As Access.ComboBox)
    Set mCombo = Combo
    Call p_GetListParams
    With mCombo
        .OnChange = c_strCustomProc
        .OnEnter = c_strCustomProc
        .OnKeyPress = c_strCustomProc
        .OnMouseUp = c_strCustomProc
        .AfterUpdate = c_strCustomProc
        .OnNotInList = c_strCustomProc
'        Select Case .RowSourceType
'        Case "Table/Query":
'        Case "Value List":
'        Case "Field List":  ' не предусмотрено
'        End Select
    End With
End Sub
Private Sub Class_Terminate()
    Set mCombo = Nothing: Erase aPos
End Sub
Public Sub SelectItem(Key)
' выбор в списке элемента по ключу
    With mCombo
        .RowSource = p_GetSource(vbNullString) ' сброс фильтра
        .Value = Key
    End With
End Sub
Private Sub mCombo_Change()
' получаем строку фильтра и вызываем фильтрацию списка
Dim strFilter As String
    With mCombo
        strFilter = Left$(Nz(.Text, vbNullString), .SelStart)
        If Len(strFilter) > 0 Then
            .RowSource = p_GetSource(strFilter): .Dropdown
        ElseIf Len(.Text) = 0 Then
            .RowSource = p_GetSource(vbNullString)
        End If
    End With
End Sub
Private Sub mCombo_AfterUpdate()
' меняем значение контрола на выбранное в списке
    With mCombo
' если есть разница между автовыбором в поле и выделением в списке
' выбирается то что выделено в списке
        If .ListIndex < 0 Then Exit Sub
        Dim varValue As Variant: varValue = .ItemData(IIf(.Text <> .Column(1, 0), .ListIndex, 0))
        .Value = varValue: RaiseEvent ItemSelected(varValue) ' здесь переход к записи с ID=.Value
    End With
End Sub
Private Sub mCombo_KeyPress(KeyAscii As Integer)
' при нажатии ВВОД переход на следующее поле
    If KeyAscii = 13 Then SendKeys "{TAB}"
End Sub
Private Sub mCombo_Enter(): bolJustEnter = True: End Sub
Private Sub mCombo_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
' если осуществлен вход в поле щелчком мыши - курсор в начало и выделяем содержимое
    With mCombo
        If bolJustEnter And .SelStart > 0 And Not IsNull(.Value) Then
            .SelStart = 0:      .SelLength = Len(.Text)
            .RowSource = p_GetSource(vbNullString)
        End If
    End With
    bolJustEnter = False
End Sub
Private Sub mCombo_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    mCombo.Undo
End Sub
Private Sub p_GetListParams()
Dim aCol() As String, i As Long, iMax As Long
Dim rst As DAO.Recordset
    With mCombo
' получаем номер отображаемой колонки
        aCol = Split(.ColumnWidths, c_strListDelim): i = LBound(aCol): iMax = UBound(aCol)
        Do While i <= iMax
            If Len(aCol(i)) = 0 Then Exit Do
            If CLng(aCol(i)) > 0 Then Exit Do
            i = i + 1
        Loop
        bytColVis = i
        If .ColumnCount <= i Then .ColumnCount = i + 1
' получаем источник данных списка и необходимые вспомогательные данные
        strListSource = Trim$(.RowSource)
        Select Case .RowSourceType
        Case "Table/Query"
    ' для запроса получаем имя первого отображаемого в списке поля
            If Right$(strListSource, 1) = ";" Then strListSource = Left$(strListSource, Len(strListSource) - 1)
            Set rst = CurrentDb.OpenRecordset(strListSource, dbOpenForwardOnly)
            strListFilter = rst.Fields(bytColVis).name
            rst.Close: Set rst = Nothing
        Case "Value List"
    ' для списка формируем массив с позициями разделителей элементов списка
            Dim n As Long: n = 0
            i = 1: iMax = Len(strListSource)
            Do While i <= iMax
                i = InStr(i, strListSource, c_strListDelim)
                If i = 0 Then Exit Do Else i = i + 1
                ReDim Preserve aPos(n): aPos(n) = i: n = n + 1
            Loop
        Case "Field List"
    ' не предусмотрено
        End Select
    End With
End Sub
Private Function p_GetSource(strFilter As String) As String
' получаем значение для RowSourse с учетом заданного фильтра
Const c_strProcedure = "p_GetSource"
Dim Result As String

    Result = strListSource
    On Error GoTo HandleError
    strFilter = Trim(strFilter)
    If Len(strFilter) = 0 Then GoTo HandleExit
    Select Case mCombo.RowSourceType
    Case "Table/Query": Result = p_FilterQuery(strFilter)
    Case "Value List":  Result = p_FilterList(strFilter)
    Case "Field List":  Result = strListSource ' не предусмотрено
    End Select
HandleExit:
    p_GetSource = Result
    Exit Function
HandleError:
    Result = strListSource
    Err.Clear
    Resume HandleExit
End Function
Private Function p_FilterQuery(FilterString As String) As String
' создает запрос с заданным фильтром и возвращает результат
Const c_strProcedure = "p_FilterQuery"
' отбор значений при помощи LIKE
' строки содержащие символы: *, ?, # и т.п. могут отработать некорректно
    p_FilterQuery = sqlSelectAll & "(" & strListSource & ")" & sqlWhere & strListFilter & sqlLike & """*" & FilterString & "*"""
End Function
Private Function p_FilterList(FilterString As String) As String
' создает список с разделителями отфильтрованный заданный строкой и возвращает результат
Const c_strProcedure = "p_FilterList"
' !!! необходимо оптимизировать !!!

' отбор по списку при помощи InStr
' не учитывает наличие кавычек у текстовых значений, также не проверяет символ разделителя списка
' строки поиска содержащие кавычки или разделитель могут отработать некорректно
' при необходимости несложно доработать
Dim Result As String
    On Error GoTo HandleError
    Result = strListSource
    If Len(FilterString) = 0 Then GoTo HandleExit
Dim i As Long, iMax As Long ', iMin As Long
Dim s As Long, sMax As Long, sBeg As Long, sEnd As Long
Dim r As Long, cMax As Long
    Result = vbNullString
    cMax = mCombo.ColumnCount
    s = 1: sMax = Len(strListSource)
    i = LBound(aPos): iMax = UBound(aPos) ': iMin = iMin
    Do While s <= sMax
        s = InStr(s, strListSource, FilterString): If s = 0 Then Exit Do
    ' совпадение найдено - проверяем в какой колонке
        Do While i <= iMax
            If s < aPos(i) Then Exit Do
            i = i + 1
        Loop
        ' индекс следующего анализируемого символа - первый символ колонки следующей после той в которой найдено совпадение
        If i <= iMax Then s = aPos(i) Else s = sMax + 1
    ' если это видимая колонка добавляем всю строку в результат
        If i Mod cMax = bytColVis Then ' If (i - iMin) Mod cMax = bytColVis Then ' если iMin<>0
            ' получаем первый и последний символ строки r
            ' в aPos отсутствует нижняя (1) и верхняя  (sMax) границы строки
            r = i \ cMax     ' номер строки списка в которой найдено совпадение
'            r = (i - iMin) \ cMax    ' если iMin<>0
            If r = 0 Then sBeg = 1 Else sBeg = aPos(r * cMax - 1)
            If ((r + 1) * cMax - 1) > iMax Then sEnd = sMax Else sEnd = aPos((r + 1) * cMax - 1) - Len(c_strListDelim) - 1
            Result = Result & c_strListDelim & Mid$(strListSource, sBeg, sEnd - sBeg + 1)
        End If
    Loop
    If Left(Result, Len(c_strListDelim)) = c_strListDelim Then Result = Mid$(Result, Len(c_strListDelim) + 1)
HandleExit:
    p_FilterList = Result
    Exit Function
HandleError:
    Result = strListSource
    Err.Clear: Resume HandleExit
End Function

https://www.sql.ru/forum/1310230/avtofiltruushhiysya-komboboks


Запуск таблицы всплывающим окном

Пятница, 15 Марта 2019 г. 09:53 + в цитатник
Здравствуйте.
Как всегда есть форма, в форме есть кнопка запуска формы (но можно и таблицы).
Проблема когда я делаю запустить таблицу то не могу сделать её "всплывающем окном" т.к. окно акцесса скрыто и основная форма видна как-бы отдельной программой.
Если делаю в виде формы то тогда не вижу все строки талицы и не могу удалять строки.

https://www.sql.ru/forum/1310218/zapusk-tablicy-vsplyvaushhim-oknom


Прокрутить ленточную форму

Четверг, 14 Марта 2019 г. 23:59 + в цитатник
Здравствуйте.
Имеется ленточная форма со списком сотрудников и их данными (доступ к полям закрыт).
В примечании формы имеются те же поля для коррекции данных текущей записи.

Но сделал (зачем-то) я так, что примечание "появляется", когда пользователь нажмет кнопку "Коррекция".
Зачем? - ну для того, чтобы на экране было больше записей, когда просматриваешь форму...
Но, если запись находится внизу окна, то "появляющееся" примечание может "закрыть" текущую запись.

Как слагка прокрутить форму, чтобы текущая запись вышла из-за примечания формы?

https://www.sql.ru/forum/1310205/prokrutit-lentochnuu-formu


DoCmd.OpenForm и Me

Четверг, 14 Марта 2019 г. 22:53 + в цитатник
Есть Форма1.
В неё вводятся данные и делаются вычисления, после чего нажимается Кнопка1, и открывается Форма2, куда попадают результаты вычислений.
Проблема в том, что после выполнения DoCmd.OpenForm "Форма2" обращаться через Me. к элементам Формы1 уже нельзя.
Как можно из этого выкрутиться, кроме использования Forms("Форма1").Controls("Поле1") и т.п.?

https://www.sql.ru/forum/1310203/docmd-openform-i-me


Закрыть повисшую задачу/открытый файл Excel

Среда, 13 Марта 2019 г. 14:34 + в цитатник
Уважаемый форум,

Пошерстил в инете, но вразумительного ничего не нашел.
Задача простая: при подвисании Экселя необходимо закрыть подвисший файл в манагере задач из Access VBA. Пока нашел только
taskkill /F /IM excel.exe
. Но встает задача определения ВСЕХ открытых экземпляров Excel независимо от имени открытого файла. Как это сделать?

Другими словами: необходимо проверить, есть ли открытые задачи Excel и закрыть их taskkill-ом. Спасибо!

https://www.sql.ru/forum/1310136/zakryt-povisshuu-zadachu-otkrytyy-fayl-excel


Запись 4 - Хочу увидеть чудеса

Среда, 13 Марта 2019 г. 13:02 + в цитатник
Здравствуйте!
---------------

И так,
На Главной форме располагается Комбобокс и Главная пдч.
При выборе записи в Комбобоксе,
информация отображается в Главной пдч.

Высота Главной пдч на Главной форме
зависит от содержимого Поля1(мемо в таблице). на Главной пдч.
---------------
Использую такой модуль.
Option Compare Database
Option Explicit

Private Declare Function apiGetDC Lib "user32" Alias "GetDC" (ByVal hWnd As Long) As Long
Private Declare Function apiDeleteDC Lib "gdi32" Alias "DeleteDC" (ByVal hdc As Long) As Long
Private Declare Function apiDeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal obj As Long) As Long

Private Declare Function apiCreateFont Lib "gdi32" Alias "CreateFontA" _
    (ByVal LH As Long, _
    ByVal LW1 As Long, _
    ByVal LE As Long, _
    ByVal LO As Long, _
    ByVal LW As Long, _
    ByVal LI As Long, _
    ByVal LU As Long, _
    ByVal LS As Long, _
    ByVal LC As Long, _
    ByVal LOP As Long, _
    ByVal LCP As Long, _
    ByVal LQ As Long, _
    ByVal LPAF As Long, _
    ByVal LFN As String) As Long

Private Declare Function apiCreateIC Lib "gdi32" Alias "CreateICA" _
    (ByVal DriverName As String, _
    ByVal DeviceName As String, _
    ByVal Output As String, _
    InitData As Any) As Long

Private Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
    (ByVal hdc As Long, _
    ByVal Index As Long) As Long

Private Declare Function apiSelectObject Lib "gdi32" Alias "SelectObject" _
    (ByVal hdc As Long, _
    ByVal obj As Long) As Long

Private Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _
    (ByVal hWnd As Long, _
    ByVal hdc As Long) As Long

Private Declare Function apiMulDiv Lib "kernel32" Alias "MulDiv" _
    (ByVal Number As Long, _
    ByVal Numerator As Long, _
    ByVal Denumerator As Long) As Long
    
Private Declare Function apiDrawText Lib "user32" Alias "DrawTextA" _
    (ByVal hdc As Long, _
    ByVal str As String, _
    ByVal Count As Long, _
    Rect As Rect, _
    ByVal Format As Long) As Long

Private Const PixelsLog = 90
Private Const Twips = 1440

Private Const DT_Top = &H0
Private Const DT_Left = &H0
Private Const DT_WordBreak = &H10
Private Const DT_CalcRect = &H400

Private Type Rect
Top As Long
Left As Long
Right As Long
Bottom As Long
End Type

Public Function CanGrow(ctl As Control) As Integer
Dim Rect As Rect
Dim hWnd As Long
Dim hdc As Long
Dim Ydpi As Long
Dim FontNew As Long
Dim FontOld As Long
Dim FontHeight As Long
Dim Ret As Long
Dim Ic As Long
    If IsNull(ctl.FontSize) Then
    Exit Function
    End If
    If TypeOf ctl Is TextBox Then
    If Len(ctl & vbNullString) = 0 Then
    Exit Function
    End If
    End If
    If TypeOf ctl Is Label Then
    If Len(ctl.Caption & vbNullString) = 0 Then
    Exit Function
    End If
    End If
hWnd = ctl.Parent.hWnd
    If hWnd = 0 Then
    Exit Function
    End If
hdc = apiGetDC(hWnd)
Ret = 0
Ic = apiCreateIC("Display", vbNullString, vbNullString, vbNullString)
    If Ic <> 0 Then
    Ydpi = apiGetDeviceCaps(Ic, PixelsLog)
    apiDeleteDC (Ic)
    Else
    Ydpi = 120
    End If
FontHeight = apiMulDiv(ctl.FontSize, Ydpi, 72)
    With ctl
    FontNew = apiCreateFont(-FontHeight, 0, 0, 0, .FontWeight, .FontItalic, .FontUnderline, 0, 0, 0, 0, 0, 0, .FontName)
    End With
FontOld = apiSelectObject(hdc, FontNew)
    With Rect
    .Top = 0
    .Left = 0
    .Right = ctl.Width / (Twips / Ydpi)
    .Bottom = 0
    If TypeOf ctl Is TextBox Then
    Ret = apiDrawText(hdc, ctl, -1, Rect, DT_WordBreak + DT_CalcRect + DT_Top + DT_Left)
    End If
    If TypeOf ctl Is Label Then
    Ret = apiDrawText(hdc, ctl.Caption, -1, Rect, DT_WordBreak + DT_CalcRect + DT_Top + DT_Left)
    End If
    Ret = apiSelectObject(hdc, FontOld)
    apiDeleteObject (FontNew)
    Ret = apiReleaseDC(hWnd, hdc)
    .Bottom = .Bottom * (Twips / Ydpi)
    ctl.Height = .Bottom + (.Bottom * 0.005) + 31
    End With
CanGrow = ctl.Height
End Function


Но работает он не совсем корректно.
При разном количестве текста, то добавляет пустую строку,
то в данном случае урезает последнюю строку.
И текст отображается не весь.
------------------------------------------
Как сделать,
Чтобы все строки текста правильно отображались
в Главной пдч на Главной форме?

Архив мдб

https://www.sql.ru/forum/1310128/zapis-4-hochu-uvidet-chudesa


Стандартный поиск в форме в режиме диалога не работает

Вторник, 12 Марта 2019 г. 11:53 + в цитатник
При помощи конструктора создал кнопку "Поиск" на форме.

Если форму открыть в обычном режиме, то всё работает. А если форму открыть в режиме диалога, то поиск не запускается. Пишет "Команда или макрокоманда "Найти" в данное время недоступна"

Кто как выходил из этого положения?


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?

https://www.sql.ru/forum/1310082/standartnyy-poisk-v-forme-v-rezhime-dialoga-ne-rabotaet


Сравнение двух таблиц и проверка показателей

Пятница, 08 Марта 2019 г. 02:43 + в цитатник
Добрый час! Уважаемые коллеги подскажите как сделать?

Имеются две таблицы, в них три одинаковых поля (Поле 1, Поле 2 , Поле Количество), а также в 1 -й таблице есть поле индикатор

Таблица 1 (Поле 1, Поле 2 , Поле Количество, Поле Индикатор)
Таблица 2 (Поле 1, Поле 2 , Поле Количество)

Необходимо сравнить две таблицы и в случае необходимости изменить Поле индикатор первой таблицы.
1. Значение поля 1 и поля 2 должны просто совпадать
2. Сравниваем значение полей Количество, если Таблица 1.Количество > Таблица 2.Количество, то в поле Таблица 1. Индикатор записать значение 1.

https://www.sql.ru/forum/1309994/sravnenie-dvuh-tablic-i-proverka-pokazateley


Сравнение двух таблиц и проверка показателей

Пятница, 08 Марта 2019 г. 02:37 + в цитатник
Добрый час! Уважаемые коллеги подскажите как сделать?

Имеются две таблицы, в них три одинаковых поля (Поле 1, Поле 2 , Поле Количество).

Таблица 1 (Поле 1, Поле 2 , Поле Количество, Поле Индикатор)
Таблица 2 (Поле 1, Поле 2 , Поле Количество)


Необходимо сравнить две таблицы и в случае необходимости изменить Поле индикатор первой таблицы.
1. Значение поля 1 и поля 2 должны просто совпадать
2. Сравниваем значение полей Количество, если Таблица 1.Количество > Таблица 2.Количество, то в поле Таблица 1. Индикатор записать значение 1.

https://www.sql.ru/forum/1309993/sravnenie-dvuh-tablic-i-proverka-pokazateley


Преобразование типа данных.

Четверг, 07 Марта 2019 г. 14:53 + в цитатник
В запросе выводится значение поля [Экз_летн] путем расчета в построителе выражений
Экз_летн: [Всего часов] & "/" & [Зачетных_единиц]

Выглядит это: 185/2,5

Далее на основе этого запроса строится другой запрос и в построителе выражений применяется ссылка [Экз_летн]
2 семестр: IIf([Экз_летн]=0;Null;" Экз" & [Экз_летн]) 

Должно выглядеть: Экз182/2,5
Выглядит: Экз

Если в первом запросе мы оставляем только
[Всего часов]

То во втором все выводится нормально: Экз182
Как заставить показать составное выражение из первого запроса во втором.

Я уже пробовал преобразовывать в строку через Cstr, выдает ошибку.

https://www.sql.ru/forum/1309979/preobrazovanie-tipa-dannyh


После Delphi не понимаю как работать с Access - формы, связанные формы

Среда, 06 Марта 2019 г. 16:46 + в цитатник
На Delphi делал просто:
таблица1 (TTable) (хранит адреса)
к ней "подвязан" Запрос1, и по "клику" в Таблице1 он обновлялся (хранит оборудование)
К Запрос1 "подвязан" Запрос2, который обновлялся по "клику" в Таблица1 и Запрос1 (хранит комплектующие оборудования)
То есть: "тыкаю" в адрес, сразу вижу ВСЕ оборудование на этом адресе, и комплектующие одного из оборудования. Ну и три кнопки, которые вызывают соответствующие формы по вводу данных и INSERT-ом заполняющие соответствующие таблицы.

На Acces создал таблицы, в "подчиненых" ключи заполняю "Мастером подстановки".
В режиме таблицы - заполнил.
Одиночные формы - создал без проблем.
Начинаю вязать большее число таблиц - сразу же "затык": "головная" таблица Адрес - в виде полей, а не таблица - не видно все записи в ней, неудобно "перемещаться".
Пытаюсь преобразовать элемент - нет таблицы! В Список и Выпадающий список - дает пустой прямоугольник...
Во вложении -в паинте нарисовал что хочу. По "умолчанию" - адреса показываются как два поля, а хочу - в виде таблицы

https://www.sql.ru/forum/1309945/posle-delphi-ne-ponimau-kak-rabotat-s-access-formy-svyazannye-formy



Поиск сообщений в rss_sql_ru_access_programming
Страницы: 353 ... 338 337 [336] 335 334 ..
.. 1 Календарь