Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» VBA for Access

Автор: dneprcomp
Дата сообщения: 17.02.2010 03:42
Anton T

И не будет работать. У тебя же нет формы с именем frm. Как же оно рабoтать должно, если такого объекта нет?
Мой код надо было использовать в модуле. В Sub fFilForm. На change контролов поставь только вызов sub с передачей всех параметров.

На будущее, старайся избегать кирилицы в коде, в названиях объектoв и в названиях полей и таблиц базы данных. Не у всех может показывать нормально. И не всегда может работать нормально. Даже если неправильно будет работать один из ста компьютеров, это не значит, что именно он не попадется первым. И будешь гадать, отчего не работает.

[more=Код]
Код:
Sub fFilForm(strFiltr As String, strSql As String, strSql1 As String, frm As Form, strFieldName As String)

On Error GoTo Err_

Dim strTemp as String

If frm.Поле1 <> "" Then
strTemp = "WHERE [Ф] LIKE '" & strFiltr & "*'"
End If

If frm.Поле3 <> "" Then
If InStr(strTemp, "WHERE") > 0 Then
strTemp = strTemp & " AND [И] LIKE '" & strFiltr & "*'"
Else
strTemp = "WHERE [И] LIKE '" & strFiltr & "*'"
End If
End If

If frm.Поле5 <> "" Then
If InStr(strFiltr, "WHERE") > 0 Then
strTemp = strTemp & " AND [О] LIKE '" & strFiltr & "*'"
Else
strTemp = "WHERE [О] LIKE '" & strFiltr & "*'"
End If
End If

frm.RecordSource = strSql & strTemp & " " & strSql1 & ";"

Exit_:

Exit Sub

Err_:

MsgBox Err.Description
Err.Clear

End Sub
Автор: Anton T
Дата сообщения: 17.02.2010 11:25
dneprcomp
Кириллицы уже избегал. Форма есть называется Form_ClientForm. В коде был frm As Form заменен на frm As Form_ClientForm, запустил и снова ошибка выдает: Type mismatch, переезжает желтую строку: Call fFilForm(strFiltr, strSql, strSql1, Me.Subfrm.Form)
Автор: dneprcomp
Дата сообщения: 17.02.2010 16:20
Anton T

Передаешь не те параметры по типу.
Попробуй уйти от передачи формы как параметра
При вызове sub strFiltr1 соответствует значение Поле1 и т.д.
[more=Код]
Код:
Sub fFilForm(strFiltr1 As String, strFiltr3 As String, strFiltr5 As String, strSql As String, strSql1 As String)

On Error GoTo Err_

Dim strTemp as String

If strFiltr1 <> "" Then
strTemp = "WHERE [Ф] LIKE '" & strFiltr1 & "*'"
End If

If strFiltr3 <> "" Then
If InStr(strTemp, "WHERE") > 0 Then
strTemp = strTemp & " AND [И] LIKE '" & strFiltr3 & "*'"
Else
strTemp = "WHERE [И] LIKE '" & strFiltr3 & "*'"
End If
End If

If strFiltr5 <> "" Then
If InStr(strFiltr, "WHERE") > 0 Then
strTemp = strTemp & " AND [О] LIKE '" & strFiltr5 & "*'"
Else
strTemp = "WHERE [О] LIKE '" & strFiltr5 & "*'"
End If
End If

Form_ClientForm.RecordSource = strSql & strTemp & " " & strSql1 & ";"

Exit_:

Exit Sub

Err_:

MsgBox Err.Description
Err.Clear

End Sub
Автор: dzjundzja88
Дата сообщения: 18.02.2010 21:20
Подскажите пожалуйста, в Access 2007 как с помощью VBA с поля формы данные записать в таблицу?
Автор: Anton T
Дата сообщения: 19.02.2010 10:34
dzjundzja88
ой извиняюсь, думал я выложил этот код это ексел, а ты просил аксесс...
Автор: Oyger
Дата сообщения: 26.02.2010 13:47
А по моему вопросу кто-нибудь может что предложить?
Ссылка

Добавлено:
Ура!!!
Все решил! Всем, кто ломал голову (если такие нашлись /улыбается/) - спасибо.
Первоначально думал объеденять с помощью 2-х рекордсетов и дополнительной таблицы. Долго и муторно.
А сделал намного проще:
Создаем публичную функцию (Public Function) и используем ее в запросе.

Кому надо - могу привести детальный пример с полным описанием и примером кода...

Еще раз - всем спасибо!
Автор: Oyger
Дата сообщения: 17.03.2010 16:51
Народ честной!
Помощи вашей прошу, ибо не силен я еще в access'е:
Есть форма. На форме есть группа. В группе есть переключатели.
Как обратится к значению переключателя?
Если на форме создать переключатели (без группы) и работать с ними - у меня получается. А как вытащить из группы...
Подскажите, пожалуйста.
Спасибо.
Автор: Oyger
Дата сообщения: 19.03.2010 15:24
Вопрос про группу переключателей уже не актуален - разобрался.
Может кто-то будет как я голову ламать - поэтому привиду образец кода:

Dim ХХХ As OptionGroup ' ХХХ - имя переменной, описывающей группы
Set ХХХ = YYY.ZZZ ' YYY - Имя формы, на которой расположена группа; ZZZ - имя группы на форме

Select Case XXX
Case 1
...
Case 2
...
Case 3
...
...
End Select

Case X - соответствует переключателю (свойства переключателя, вкладка данные, значение параметра - там номер)
А далее идет код, который выполняется если переключатель/флажок выбран.
Автор: Oyger
Дата сообщения: 22.03.2010 10:49
Коллеги!

Помощь нужна. Все по той же группе:

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

Вот и вопрос у меня - группа работает только с переключателями? С флажками она не работает? Или я что-то не так сделал - в какую сторону капать?
Хотя догадываюсь, что все-таки группа работает только с переключателями...

Поможете? Или я тут в игноре у всех?

P.S.:
- Доктор! Меня все игнорируют!
- Следующий...
Автор: dneprcomp
Дата сообщения: 23.03.2010 01:59
Oyger
Хочешь логику "или" - используй frame.
Хочешь логику "и" - используй rectangle(box).
Автор: Oyger
Дата сообщения: 23.03.2010 12:18
dneprcomp
Большое спасибо. Вы подтвердили мои предположения.
Только я осмелюсь Вас поправить - не frame, а OptionGroup.
Спасибо за помощь.

Добавлено:
Меня напрягает то, что когда я вставляю rectangle, то он вставляется без заголовка. Его приходится добавлять отдельно надписью. А как было убодно с frame в VBA Excel... /вздыхает/

Добавлено:
Коллеги!

И вот опять я в луже. Уже целый день б'юсь над задачей, так и немогу найти решение.
Все в коде VBA. В зависимосте от сочитания флажков и переключателей на форме переменной присваивается текст запроса на выборку формата: Select ... From ... Where ... Group by ...;
Нужно его отработать и вывести рузультат на экран.
Т.к. запрос на выборку - RunSQL и Execute отпадают.
Копаю в сторону Recordset'а. Запрос-то я ему присваиваю - работает без ошибок. А как на экран результат вывести? Есть какая-нибудь команда - не могу такой найти. Или я не в ту сторону смотрю, а ответ совсем в другом направлении?
Подскажите - хотябы названием функции.

Спасибо.
Автор: RioBravo
Дата сообщения: 23.03.2010 19:26
Нужна помощь. Необходимо создать кнопку в форме, при нажатии на которую, открывалось окно выбора файла, после чего путь к файлу заносился в таблицу. Заранее благодарен.
Автор: dneprcomp
Дата сообщения: 24.03.2010 02:42
Oyger
Меняй record source формы(или контрола). Подставляй свой новосозданный запрос как record source. Скорее всего придется сделать еще и refresh как-нибудь
Автор: Alexikit
Дата сообщения: 24.03.2010 12:05
Oyger
Результаты запроса можно вывести например при помощи DataGrid.

Автор: Oyger
Дата сообщения: 24.03.2010 12:28
dneprcomp
Спасибо за ответ - навели на мысль...
Alexikit
К сожалению я не знаю, что такое DataGrid... В Object Browser такого не нашел. Подскажите на будущее - посмотрю, почитаю и буду использовать...

Задачу решил так.
На форме создал две вкладки (page):
1) Условие - набор влажков и переключателей
2) Результат проверки - всего один ListBox на всю вкладку
При нажатии кнопки формируется текст запроса, исходя из выбранных переключателей и флажков (число полей на выходе тоже колеблится)
После получения текста запроса:
1) Выбираем вторую вкладку (SetFocus)
2) В ListBox задается нужное число столбцов (равняется числу столбцов в выборке - ColumnCount)
3) делаем RowSource для ListBox
Пока устраивает. В будущем еще хочу предусмотреть возможность при нажатии кнопки выгрузки результата из ListBox в Excel.
Спасибо.
Автор: Alexikit
Дата сообщения: 24.03.2010 13:19
Oyger
Надо просто подключить эту функцию, я правда когда работала с Access базой, то писала из вне, просто в VB, там если щелкнуть по TOOLBOX, то в компонентах можно подключить Datagrid.
почитать можно например здесь

http://msdn.microsoft.com/ru-ru/library/fxfa9793.aspx
http://www.compress.ru/article.aspx?id=11448&iid=450
Автор: Oyger
Дата сообщения: 24.03.2010 15:02
Alexikit
Спасибо. Почитаю.
Автор: RioBravo
Дата сообщения: 27.03.2010 23:07
Проблема в следующем:
В Access 2003 создана таблица, содержащая 2 поля - Дата Рождения и Фамилия
Необходимо сделать запрос, который бы отображал записи, у которых дата рождения находится после определенной даты и только записи с людьми которым исполнился определенный возраст. Необходимо предусмотреть возможность, при которой оба поля (Дата и Возраст) могли бы оставаться пустыми.
 
Создается запрос в котором
 
Дата![Дата рождения]
 
IIf([Возраст] Is Null Or [Дата] Is Null;[Дата]![Дата рождения];>=DateSerial(Year([Дата])-[Возраст];Month([Дата]);Day([Дата])))
 

При вводе пустых значений возникает ошибка: "Выражение неверно введено или является слишком сложным для расчета..."
Автор: georgbird
Дата сообщения: 28.03.2010 11:19
Доброе время суток.
Помогите пожалуйста. Не могу решить такую задачу: при внесении данных в одну таблицу (Фамилия, Имя), нужно чтобы автоматически создавалась другая таблица, и ИМЯ этой новой таблицы представляло собой сочетание Фамилия+Имя. Например:
Иванов Иван:таблица

очевидное решение таково:


Код:
Sub CreateTblVedomost(tblName As String)

'параметр tblName передаётся из другой процедуры
'tblName = "фамилия" + "имя"

Dim dbs As Database
Set dbs = Application.CurrentDb
dbs.Execute "CREATE TABLE tblName (Код INTEGER PRIMARY KEY, Поле 1, Поле2, ... );"
Автор: dneprcomp
Дата сообщения: 28.03.2010 19:14
georgbird
dbs.Execute "CREATE TABLE " + tblName + " (Код INTEGER PRIMARY KEY, Поле 1, Поле2, ... );"
Автор: georgbird
Дата сообщения: 28.03.2010 22:11
dneprcomp
Спасибо, не помогло.
пишет:

Цитата:

Ошибка синтаксиса конструкции CREATE TABLE


P.S. Access 2007

Добавлено:
решил таким способом:


Код:
Sub CreateTblVedomost(tblName As String)
Dim dbs As Database
Dim tblNew As TableDef
Dim fld1 As Field
Set dbs = Application.CurrentDb
Set tblNew = dbs.CreateTableDef(tblName)
Set fld1 = tblNew.CreateField("Test", dbText)
tblNew.Fields.Append fld1
dbs.TableDefs.Append tblNew
dbs.TableDefs.Refresh

End Sub

Автор: dneprcomp
Дата сообщения: 29.03.2010 02:25
georgbird
Попробуй
dbs.Execute "CREATE TABLE " & tblName & " (Код INTEGER PRIMARY KEY, Поле 1, Поле2, ... );"
Автор: georgbird
Дата сообщения: 29.03.2010 18:20
dneprcomp

Цитата:
dbs.Execute "CREATE TABLE " & tblName & " (Код INTEGER PRIMARY KEY, Поле 1, Поле2, ... );"


я уже по всякому перепробовал, результат одинаковый - либо
tblName:таблица
либо ошибка:

Цитата:
Ошибка синтаксиса конструкции CREATE TABLE


Так что придется либо

Код:
Set tblNew = dbs.CreateTableDef(tblName)
Автор: dneprcomp
Дата сообщения: 29.03.2010 20:46
georgbird
Нет, есть еще вариант. Вроде бы давно у меня тоже было нечто подобное.
Dim strSQL as string
'пробовать '+' тоже, т.к что именно подерживает VBA не помню.
strSQL = "CREATE TABLE " & tblName & " (Код INTEGER PRIMARY KEY, Поле 1, Поле2, ... );"
dbs.Execute strSQL
Автор: georgbird
Дата сообщения: 30.03.2010 19:50
dneprcomp
Спасиби. буду эксперементировать и сравнивать
Автор: RioBravo
Дата сообщения: 31.03.2010 11:06
Все, уже решил.
Автор: JustinDEbass
Дата сообщения: 03.04.2010 06:42
Здравствуйте!
Могли бы вы подсказать или помочь написать модуль, который выдает диск в долг знакомому. При этом диск выдается только в том случае если знакомый имеет на руках не более 3 взятых ранее в долг дисков и все диски, которые он брал до этого, возвращал в срок.
У меня 4 таблицы:
Моя библиотека: в ней расположена информация о всех дисках и книгах которые есть у меня, и диски которые отдал в долг. Столбцы: Тип носителя (значения Диск(DVD) или Диск(CD)) и Шифр(Это код книги или диска, по которому я выдаю диск в долг тоисть этот столбец связан с Шифром в Мне должны) ну и другие столбцы...
Мне должны: расположены ФИО знакомых которым я отдал в долг диск или книгу, так же есть Шифр диска или книги так же есть Дата возврата. Столбцы: ФИО, Шифр, Дата возврата
Я должен: в этой таблице расположена информация о том что я должен, ну... эта таблица в данной задаче не фигурирует и описывать её подробно нет необходимости.
Знакомые: здесь расположена информация о знакомых которые мне должны, или которым я должен, или просто знакомые. Столбцы: ФИО, Адрес, Телефон.
Извините саму БД не могу выложить форум пишет что это спам =*(
Автор: KashRus_VLZ
Дата сообщения: 05.04.2010 09:58
Подскажите пожалуйста, как в MS Access 2003 из самой формы проверить открыта ли она как одиночная либо как подчиненная форма другой формы?
Есть версия с обработкой ошибки при отсутствии объекта в свойстве Parent формы, но пока не удалось сделать корректной реализации.
Или может быть есть более элегантное решение?..
Спасибо.
Автор: georgbird
Дата сообщения: 11.04.2010 10:36
Доброго времени суток
Столкнулся с проблемой открытия произвольного файла/папки из ACCESS, функция FileDialog возвращает только имя файла. Насколько я понял, необходимо использовать WinApi. Все схожие решения, найденные в интернете, либо не работали, либо имеют нагроможденную структуру, недоступную для понимания и редактирования.
Решил использовать API функцию ShellExucute, из библиотеки Shell32.dll


Код:
Declare Function ShellExucute _
Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal Operaor As String, ByVal FileName As String, ByVal Pam As String, ByVal Directory As String, ByVal ShowCmd As Integer) As Long
Автор: dneprcomp
Дата сообщения: 11.04.2010 20:38
georgbird

'vrtSelectedItem is a String that contains the path of each selected item.

http://msdn.microsoft.com/en-us/library/aa432348.aspx
http://www.mvps.org/access/api/api0001.htm
http://p2p.wrox.com/access-vba/32297-openfiledialog-using-vba.html

Страницы: 1234567891011121314151617

Предыдущая тема: Delphi+ADO


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.