Quantcast
Channel: SQL.ru: Microsoft Access
Viewing all 3060 articles
Browse latest View live

ComboBox: как вернуть 0 если в нем ни одна запись не выбрана и 1 если выбрана?

$
0
0
Народ, доброго всем времени суток! Понимаю, вопрос может быть уже не по стажу, но чего-то я в тупике... Как вытащить состояние Combobox: выбрано в нем что-то или нет?.

Скажу сразу:

If IsNull(Me.Список1.value) = true then ....


не подходит...

Передать cancel=true обратно в событие формы

$
0
0
Всем добрый день. Решил на форму на before_update поставить обычное предупреждение для пользователя, о том нужно ли сохранять или нет данные если они изменились при переходе на другую запись

Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Error_Handler 'обработчик ошибок
'====================================

If MsgBox("В форму внесены изменения, сохранить?", vbYesNo + vbExclamation + vbDefaultButton1, "Предупреждение") = vbNo Then
     Cancel = True
     Me.Undo
End If

'======================
Exit_Sub: 'обработчик ошибок
     On Error Resume Next
     Exit Sub
Error_Handler:
     If Err.Number = 0 Then
          Resume Next
     Else
          Call prcОбработкаОшибок(Err.Number, Err.Description, Err.Source, Erl)
     End If
     Resume Exit_Sub
     Resume
End Sub


Чтобы не "лепить" то же самое для каждой формы решил что надо вынести в публичную процедуру в модуль, а из события просто вызывать процедуру

Public Sub prcКонтрольИзмененийФормы(frmName As String)
Dim frm As Form

Set frm = Forms(frmName)


If MsgBox("В форму внесеные измнения, сохранить?", vbYesNo + vbExclamation + vbDefaultButton1, "Предупреждение") = vbNo Then
   'Cancel = True КАК ВОТ ЭТУ СТРОКУ ПЕРЕДАТЬ ОБРАТНО В СОБЫТИЕ ФОРМЫ, чтобы отменить UPDATE
   frm.Undo
End If

End Sub


Не пойму как Cancel = True передать обратно в событие формы, чтобы отменить UPDATE. Заранее благодарю за подсказку

Можно ли определить объем ОЗУ установленный на компьютере

$
0
0
Доброго времени суток.
Нужно ненавязчиво собрать статистику по конфигурации компьютеров пользователей программы.
Главное - объем ОЗУ установленного на компьютере. При этом может быть вариант, когда установлено 8 ГБ, а ОС - 32-х разрядная.
Второе - разрядность ОС.
Третье (наименование ОС) я уже нашел как сделать.
ОС всегда Windows. Access 2010 и 2016.
Заранее благодарен.

Не сохраняется ширина столбцов в табличной форме

$
0
0
Народ, доброго всем времени суток! Короче, есть табличная форма. Открываю ее в режиме конструктора, вношу какое-нибудь изменение, например, смещаю поле какое-нибудь (чтобы инициировать вопрос на сохранение изменений при последующем закрытии), затем переключаюсь из режима конструктора в режим таблицы, настраиваю желаемую ширину полей, закрываю форму, сохраняю изменения. Раньше (в А-2003, А-2010) у меня это прокатывало на ура... А тут (в А-2016) открываю эту форму снова, а там шиш! Все поля опять ширины, какой Аксессу угодно, но только не той, что нужно мне. Программно мне не хотелось бы их настраивать, да и надобности нет особо. Как эти долбаные столбцы один раз руками настроить по ширине, гарантированно сохранить и забыть к чертям?
Заранее спасибо.

Проблемы с сжатием и восстановлением MDB-файла на сетевом хранилище

$
0
0
Народ, доброго всем времени суток! В состав домашней сети приобрел сетевое хранилище (ZyXEL NAS 326). Подключил, настроил, работает... Переложил все домашние файлы, включая проекты Access на него. И тут возникла проблема...:(:( Аксесс позволяет открывать файлы MDB, вносить данные в таблицы, изменять структуру таблиц, создавать запросы, формы, отчеты... Ну, в общем все, как обычно, за исключением одного НО: при попытке сжать и восстановить базу (штатными средствами) возникает ошибка, которая приведена на картинке... Не знаю, о каких таких полных правах интересуется Аксесс? Посмотрел права на файл... Вроде чтение - есть, запись - есть (ну, раз уж формы и отчеты можно создавать в файле и они успешно сохраняются)...
Стоит перенести файл на локальный компьютер - все работает: сжимается и восстанавливается... Стоит только вернуть его назад, опять - двадцать пять...:(:(

Фильтрация значений в элементе "список"

$
0
0
Добрый день уважаемые форумчане!
В Accessе я новичок и ни как не могу разобраться с элементом "Список"
Суть проблемы:

Имеется таблица "сотрудники" которую мы собственно и заполняем. Столбец "организация" выбирается из соответствующей таблицы.
Задача:
1. в форме "сотрудники" необходимо чтобы в списке выводились ФИО людей со значением "Да" в столбце "обучение" (это у меня получилось вроде), а также, люди должны фильтроваться в зависимости от выбранной организации в раскрывающемся списке формы.
2. Можно ли вывести на кнопку элемент "вложение". Получается сделать только в виде скрепки или ярлыка файла...а нужно именно кнопкой. Заранее спасибо

Добавление записи в базу данных Access, используя ADO и SQL

$
0
0
Добры день форумчане. Пытаюсь формировать небольшую базёнку в Access из источников *.CSV.
При попытке воспроизвести SQL-запрос выдаёт синтаксическую ошибку. Причём дело не в длине запроса. У меня подобный же сборник работает с другими подобными источниками и длина SQL-запроса порой превышает 1000 символов. А здесь вроде всё тоже самое, но ни в какую. Теряюсь в догадка в чем же всё таки дело?

отловить ошибку runtime

$
0
0
добрый день знатокам и начинающим. заинтересовал один момент с обработкой ошибок
использую обычный обработчик ошибок

On Error GoTo Error_Handler 'обработчик ошибок
'====================================

'вставляем код процедуры

'======================
Exit_Sub: 'обработчик ошибок
     On Error Resume Next
     Exit Sub
Error_Handler:
     On Error Resume Next
     If Err.Number = 0 Then
          Resume Next
     Else
          Call prcОбработкаОшибок(Err.Number, Err.Description, Err.Source, Erl)
     End If
     Resume Exit_Sub
     Resume


Все хорошо работает, но есть проблем с ошибками типа: Run-Time error '-2147217900 (80040e14)': Лишняя скобка ) в выражении запроса '[ПользовательКод]=cint('" & varUsrKod "'))', то есть ошибка в SQL-запросе для ADO.open. Обработчик перехватывает данную ошибку, но ни описания, ни кода ошибки не дает. Есть какая-либо возможность качественно обработать такие ошибки, то есть получить в msgbox то самое описание, которое дает штатное окно ошибок, чтобы не забивать голову что же случилось и почему не делается то, что надо?

Заранее благодарю за подсказку

Максимум из значений в строке(диапазона значений в строке)

$
0
0
Добрый день.
Есть запрос, результатом которого является таблица см рисунок.
Заголовки столбцов:
Дни месяца
Рабочие дни,
Код предприятия,
Кол-во,
HOUR1- электропотребление в первый час суток
....
HOUR24- электропотребление в последний час суток


Необходимо последним столбцом посчитать максимальное потребление из диапазона MAX(HOUR1:HOUR24)
1)за каждые сутки
2) только за рабочие сутки


Неужели в Access нет функции расчета максимума из строчного диапазона?
Весь день думаю, никак. За любые идеи заранее спасибо.

Снова XML парсинг, маленький вопрос

$
0
0
Друзья, подскажите по такому вопросу.
Вытаскиваю часть данных из XML, используя @class='com.nokia.srbts.tnl:IPADDRESSV4'. Т.к.
этот класс встречается несколько раз, то мне нужно знать, чему равен distName у него (см.картинку). По нему я понимаю к чему относится localIpAddr.
Можно конечно искать по @distName, но в нем меняются значения IPIF. Тогда надо знать сколько значений и каких в IPIF, для того чтобы загнать в переменную и пройтись в цикле. На мой взгляд - это будет не правильно.
В парсинге я несилён. Все наработки с этого форума.

Что дописать в коде, чтобы увидеть, чему равен distName?
И ещё. Знак любого символа какой в данном случае? Например попытался сделать так и не прокатило:
@distName='MRBTS-605775/TNLSVC-1/TNL-1/IPNO-1/IPIF-*/IPADDRESSV4-1']/p[@name='localIpAddr']
Думаю вопрос мой на поверхности лежит. Спасибо.

+
Private Sub Кнопка73_Click()
Dim strFileName As String, strNumBS As String, strSBTS As String
Dim objXmlDoc As Object ' MSXML2.DOMDocument
Dim objXmlSingleNode As Object 'MSXML2.IXMLDOMNode
Dim objXmlChildNode As Object 'MSXML2.IXMLDOMNode
Dim OAMIP$, DN$

On Error GoTo HandleErrors

strFileName = "c:test\test.XML"

If Len(strFileName) = 0 Then Exit Sub
If Len(Dir$(strFileName)) = 0 Then Exit Sub
'strNumBS = Split(Dir$(strFileName), "_")(2)
Set objXmlDoc = CreateObject("MSXML2.DOMDocument")

    With objXmlDoc
        .async = False
            If Not .Load(strFileName) Then
                MsgBox "Oops!!", vbCritical
                GoTo ExitHere
            End If
        Set objXmlSingleNode = .selectSingleNode("/raml/cmData/managedObject")
    End With
    If Not objXmlSingleNode Is Nothing Then
        With objXmlSingleNode
            Debug.Print .Attributes.getNamedItem("distName").Text
            Debug.Print .selectSingleNode("p[@name='btsName']").Text
            DN = .Attributes.getNamedItem("distName").Text
        End With
        
      
        
    End If
' получим IP адреса

    strNodes = "/raml/cmData/managedObject[@class='com.nokia.srbts.tnl:IPADDRESSV4']/p[@name='localIpAddr']"
    'strNodes = "/raml/cmData/managedObject[@distName='MRBTS-605775/TNLSVC-1/TNL-1/IPNO-1/IPIF-1/IPADDRESSV4-1']/p[@name='localIpAddr']"
    For Each objXmlSingleNode In objXmlDoc.selectNodes(strNodes)
        OAMIP = objXmlSingleNode.Text
        Debug.Print "OAMIP = " & OAMIP
    Next

    
ExitHere:
    Set objXmlDoc = Nothing
    Exit Sub
HandleErrors:
    Debug.Print Err.Number; vbTab; Err.description
    Resume ExitHere

End Sub

SQL-запрос для формы поиска и обработка логических операторов

$
0
0
автор
Ганов Александр (перенесено отсюда)
как вариант использовать "+", который превратит отсутствующий параметр в "нулевую строку", в том случае если какой-то параметр запроса не был использован пользователем
разобрался с "+".


все ОК. можно хоть "стопицот" условий сделать. одного пока не пойму как сделать:

strSQL = "SELECT *" _
          & "FROM [Работы] " _
          & "WHERE " & "([Название] like '*" + [fldНазвание].Value + "*') AND " _
                              & "([ДатаЗапуска] >=" + IIf(IsNull([fldДатаЗапускаНачало].Value) = False, Format([fldДатаЗапускаНачало].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаЗапуска] <=" + IIf(IsNull([fldДатаЗапускаКонец].Value) = False, Format([fldДатаЗапускаКонец].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаСоздания] >=" + IIf(IsNull([fldДатаБазаНачало].Value) = False, Format([fldДатаБазаНачало].Value, "General Number"), Null) & ") AND " _
                              & "([ДатаСоздания] <=" + IIf(IsNull([fldДатаБазаКонец].Value) = False, Format([fldДатаБазаКонец].Value, "General Number"), Null) & ") AND"

Не могу понять одно как справиться с AND. если их внести под скобку в начале каждой строки начиная со второй строки Where, то если нет строки условия, то и AND не будет, но тогда если нет первого условия Where ([Название]), то строка Where начнется сразу с AND, что вызовет ошибку. В таком моем варианте все работает, но при отсутствии каждого условия остается AND, я их убрал после формирования строки циклом, но понимаю, что это корявое решение.
'обрезаем AND в конце строки
For i = 1 To 5
     If Right(strSQL, 4) = " AND" Then strSQL = Left(strSQL, Len(strSQL) - 4)
     If Right(strSQL, 5) = " AND " Then strSQL = Left(strSQL, Len(strSQL) - 5)
     If Right(strSQL, 6) = " AND )" Then strSQL = Left(strSQL, Len(strSQL) - 6)
Next i


Может быть у кого-то есть пример "правильной" реализации таких запросов. Заранее благодарствую

Как сделать в списке некоторые строки неактивными

$
0
0
Здравствуйте!

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

Bookmark

$
0
0
Не понимаю этот Bookmark, как его использовать. Это код из одной из тем форума. Что с ним делать, куда его поставить?
Много сказано про Bookmark и в то же время ничего. Принцип неясен.

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

Public Sub SetFormRecord(frm As Form, Optional strCriteria As String, Optional blToFirst As Boolean = False)
'Производит поиск записи по заданным критериям в форме(подчиненной форме)
'и ставит фокус на найденную запись - если она найдена (после удаления например)
'если искомое не найдено - переход на Первую или Последнюю запись в зависимости
'от аргумента blToFirst (по умолчанию переход на последнюю запись)
'------------------------------------------------------------------------------
On Error GoTo SetFormRecordErr
    With frm
        .RecordsetClone.FindFirst strCriteria
        If .RecordsetClone.NoMatch Then
            If blToFirst = False Then
                .RecordsetClone.MoveLast
            Else
                .RecordsetClone.MoveFirst
            End If
        End If
        .Bookmark = .RecordsetClone.Bookmark
    End With
SetFormRecordBye:
    On Error Resume Next
    Set frm = Nothing
    Exit Sub
SetFormRecordErr:
    Err.Clear
    Resume SetFormRecordBye
End Sub

Обновление формы (Access & SQL)

$
0
0
Медленно работает код при закрытии окна. Замечено, что задержка происходит из-за обновления формы
Forms![all_list]![all_list_subform].Form.Requery

Private Sub cmd_close_Click()
Dim MyID As Long
MyID = Me!id
    p = "proc_add_number @idpat=" & Me.id_pat _
        & " , @code = " & Me.code _
        & " , @idclin = '" & Me.id_clin _
        & " , @mark = " & Me.mark
        Call PROC("sproc_add_number", p, 0)
    If CurrentProject.AllForms("all_list").IsLoaded Then
         Forms![all_list]![all_list_subform].Form.Requery
         Forms![all_list]![all_list_subform].Form.Recordset.FindFirst "[id_pat] = " & MyID
    End If
    DoCmd.close acForm, "add_number"
End Sub


Не подскажете ли, чем заменить Forms![all_list]![all_list_subform].Form.Requery, чтобы только конкретные поля в записи обновились бы.

Хотелось заменить на
         [Forms]![all_list]![all_list_subform].[Form]![code].Requery
         [Forms]![all_list]![all_list_subform].[Form]![id_clin].Requery

Но никаких изменений не происходит.

Как сделать запуск формы, по достижении определённой даты и времени.

$
0
0
И снова здравствуйте!
Появилась новая задумка, для облегчения работы персонала, помогите, пожалуйста в её реализации.

Задумка такая, есть таблица, есть форма, есть работники (которые постоянно всё забывают, а с учетом объёма даже и не пытаются запоминать. То есть у нашей организации есть такая функция, чтобы человек не расторгал договор он его приостанавливает, платя чисто символическую сумму, но зато в любой момент может возобновить, но некоторые граждане изначально желают чтобы ДД возобновлялось в определённый срок, то есть осенью , к примеру в октябре приостановили, а весной 1 мая чтобы не идти в контору а договор автоматом возобновлялся, но персонал не может это уследить по этому и нужна помощь)

Так вот в таблице есть поле (дата) в которое вписывается дата прекращения приостановки действия договора(ДД) нужно чтобы по достижение нужной даты (а лучше за 2-3 дня до данной даты часов 10.00 и 15.00, за 1 день в 10.00 и 15.00, и в данный день с 10.00 еже частно), выскакивало окно напоминания.

Ну как то так, если это не возможно, прошу так же отписать, по поводу "закатывания губы".

Импорт текстового файла

$
0
0
Приветствую всех!
Покопал форум, но так ничего и уяснил. Имеется текстовый файл примерно такого вида:
+
Version 400
Charset "WindowsCyrillic"
Delimiter ","
CoordSys NonEarth Units "m" Bounds (-10000000, -10000000) (10000000, 10000000)
Columns 1
КАДАСТРОВЫЙНОМЕР Char(50)
Data

Region 3
13
4411510.56 947688.07
4411630.9 947661.04
4411571.64 947474
4411541.87 947295.16
4411230.31 947334.78
4410406.2 947441.69
4410163.43 947480.81
4410375.6 947963.26
4410737.22 947900.11
4411092.54 947832.54
4411348.68 947803.48
4411515.55 947756
4411510.56 947688.07
8
4411508.12 947752.78
4411348.19 947796.5
4411053.53 947834.71
4411049.6 947733.87
4411328.09 947708.27
4411331.64 947645.63
4411483.69 947632.63
4411508.12 947752.78
5
4410204.15 947547.37
4410207.51 947551.35
4410203.53 947554.71
4410200.17 947550.73
4410204.15 947547.37
Pen (2,2,255)
Brush (1,0,16777215)
Center 4410897.16 947629.21

Мне, собственно, нужны только строки вида: "4411510.56 947688.07"

выбрать только те слова , которые на английском

$
0
0
Привет всем, есть один вопрос:
Есть набор строк в таблице ,где в середине каждого русского предложения стоит слово на английском языке.
В описание товара на русском в середину вставлено название торговой марки на английском.
Есть ли способ на VBA вывести только эти слова на английском языке, а русские скрыть/убрать?

Как открыть базу данных ACCESS 97 есть логин и пароль

$
0
0
Имеется база данных "СКД GATE":

Gate.mdw
config.mdb
nEvBuf.mdb
nEvPat.mdb
SrvSetup.mdb

---------------------

Доступ к базе данных выполняется с помощью программы MS Access 97
Для этого необходимо с помощью администратора рабочих групп MS-Access присоединиться к файлу рабочей группы GATE.mdw
Для входа в MS Access введите:

Имя: "gate"
Пароль: "gate"

------------------------

Нужно открыть базу данных чтобы экспортировать информацию из одной таблицы.
Пробовал даже через Access 97 - Не получается!

Как с помощью администратора рабочих групп присоединиться к файлу рабочей группы Gate.mdw ?

Не могу разобраться, помогите, пожалуйста с кодом.

$
0
0
Ругается на переменную.

Нужно проверить свойства запроса [З_Приостанов] (если пусто до игнорировать запуск формы, ну и соответственно...)
но при запуске ругается на строчку -
 Set rw1 = CurrentDb.OpenRecordset("select * from [З_Приостанов] where Код=" & Me.Код)

а именно "rw1 = "



Private Sub Form_Timer()
    If Time() = "11:42:00" Then
      Dim rw1 As String
      Set rw1 = CurrentDb.OpenRecordset("select * from [З_Приостанов] where Код=" & Me.Код)
      Do Until rw1.EOF
           If IsNull(rw1!Код) Then End If
             Else
             DoCmd.OpenForm "Ф_Оконч_Прост"
      rw1.MoveNext
           End If
      Loop
   End If
End Sub


Что не так?

Создание на лету переменной класса формы с типом взятым из значение другой переменной

$
0
0
Имеется неизвестное количество форм, отображающих каждая свои данные. Управление ими одинаково и стандартизовано, и сделано через класс, в котором объявляется переменная:
Private WithEvents myForm As Form

Фактическое создание формы происходит через:
Set myForm = New Form_Someform1

Писать руками Н-нное количество SELECT...CASE для каждой формы и не забывать добавлять туда новые или удалять не нужные нет никакого желания.
Поэтому возникла мысль делать это налету:
Private WithEvents myForm As Form
Public Sub ClassInit(FormName As Sting)
Set myForm = New FormName
End Sub

Но конструкция: Set myForm = New FormName не является корректной и необходимо какое-то решение, чтобы создавать нужные формы не плодя SELECT...CASE или управляющий класс под каждую форму.
Viewing all 3060 articles
Browse latest View live