Запрос для вывода самого часто встречающегося Поля2 для Поля1 |
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
|
Access Runtime как изменить timeout для запросов |
https://www.sql.ru/forum/1310377/access-runtime-kak-izmenit-timeout-dlya-zaprosov
|
Нужна помощь в коде |
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 |
|
Outlook? |
|
Базы данных Access: Сформировать запрос |
https://www.sql.ru/forum/1310291/bazy-dannyh-access-sformirovat-zapros
|
что нужно prc? особенность Access |
РасчетДанных: '---------------------- 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.
https://www.sql.ru/forum/1310280/chto-nuzhno-prc-osobennost-access
|
Как удалить записи в нескольких таблицах одной кнопкой |
https://www.sql.ru/forum/1310273/kak-udalit-zapisi-v-neskolkih-tablicah-odnoy-knopkoy
|
Drop table, import table |
|
AOIndex' не является индексом данной таблицы |
https://www.sql.ru/forum/1310258/aoindex-ne-yavlyaetsya-indeksom-dannoy-tablicy
|
Автофильтрующийся комбобокс |
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
|
Запуск таблицы всплывающим окном |
https://www.sql.ru/forum/1310218/zapusk-tablicy-vsplyvaushhim-oknom
|
Прокрутить ленточную форму |
|
DoCmd.OpenForm и Me |
|
Закрыть повисшую задачу/открытый файл Excel |
taskkill /F /IM excel.exe. Но встает задача определения ВСЕХ открытых экземпляров Excel независимо от имени открытого файла. Как это сделать?
https://www.sql.ru/forum/1310136/zakryt-povisshuu-zadachu-otkrytyy-fayl-excel
|
Запись 4 - Хочу увидеть чудеса |
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
|
Стандартный поиск в форме в режиме диалога не работает |
https://www.sql.ru/forum/1310082/standartnyy-poisk-v-forme-v-rezhime-dialoga-ne-rabotaet
|
Сравнение двух таблиц и проверка показателей |
https://www.sql.ru/forum/1309994/sravnenie-dvuh-tablic-i-proverka-pokazateley
|
Сравнение двух таблиц и проверка показателей |
https://www.sql.ru/forum/1309993/sravnenie-dvuh-tablic-i-proverka-pokazateley
|
Преобразование типа данных. |
Экз_летн: [Всего часов] & "/" & [Зачетных_единиц]
2 семестр: IIf([Экз_летн]=0;Null;" Экз" & [Экз_летн])
[Всего часов]
|
После Delphi не понимаю как работать с Access - формы, связанные формы |
https://www.sql.ru/forum/1309945/posle-delphi-ne-ponimau-kak-rabotat-s-access-formy-svyazannye-formy
|