Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access

Модерирует : ShIvADeSt

ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

   

Audciz



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Где и какой модуль надо подключить?

Всё. Разобрался сам.

Всего записей: 649 | Зарегистр. 13-02-2003 | Отправлено: 19:44 20-02-2007
AZzzzz



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня след. вопрос: как написать на vba: если таблица существует, то ее удалить.

Всего записей: 52 | Зарегистр. 25-04-2006 | Отправлено: 03:56 08-03-2007
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AZzzzz
Можно вот так, например:
 
Public Sub DeleteTable(ByVal DeletedTableName As String)
    Dim mdb As DAO.Database
    Dim pTables As DAO.TableDefs
    Dim pTable As DAO.TableDef
     
    Set mdb = Application.CurrentDb
    Set pTables = mdb.TableDefs
     
    For Each pTable In pTables
        If pTable.Name = DeletedTableName Then
            pTables.Delete pTable.Name
        End If
    Next pTable
End Sub

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:58 08-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема. Имеется таблица, её поля неизвестны. Допустим это Поле1, Поле2, Поле3, но об этом можно узнать только во время выполнения. Нам нужно в форме реализовать ввод данных в таблицу. Т.е. при запуске мы должны получить 3 поля ввода. Если в таблице 4 столбца, то, соответственно, 4 поля ввода и т.д. Помогите, пожалуйста, а то что-то ничего не выходит

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 12:10 13-03-2007
xxyy

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть Форма, в ней  есть ПолеСоСписком11. ИсточникСтрок для ПоляСоСписком является таблица “NN1”. Хотелось бы знать код VBA для следующего события: в Форме нажимается Кнопка, для которой установлена процедура обработки ее нажатия. Процедура должна изменить УсловиеОтбора в Запросе ZNN1. Народ подскажите как сделать в программировании не селён.

Всего записей: 33 | Зарегистр. 11-09-2006 | Отправлено: 14:57 13-03-2007
altaph

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxyy
например

Код:
     
   Dim dbs As Database
   Dim Queries As DAO.QueryDefs
   Set dbs = CurrentDb
   Set Queries = dbs.QueryDefs
   Queries("ZNN1").SQL = ПолеСоСписком11.RowSource
 

Всего записей: 6 | Зарегистр. 12-03-2007 | Отправлено: 16:02 13-03-2007
xxyy

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
altaph
 
спасиб щас попробую, ещё вопрос где можно качнуть книгу по VBA for Access 2003??  

Всего записей: 33 | Зарегистр. 11-09-2006 | Отправлено: 08:40 14-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ладно. Хотя бы ответьте на вопрос, почему у меня в Me.Controls.Add вылетает ошибка "Method or data member not found"?
Вырезка из листинга
 

Код:
Private Sub Form_Load()
Dim lbl As Label
Set lbl = Me.Controls.Add("Forms.Label.1", "Lbl")
End Sub

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 18:04 14-03-2007
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur

Цитата:
Имеется таблица, её поля неизвестны

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

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 19:53 14-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В том то и дело, что их количество не ограничено сверху

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 23:23 14-03-2007
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur
 
Access похоже не позволяет добавлять Control в runtime в форму. Так что будь как "волшебник", конструируй форму
 
Dim pForm As Form
Dim pLabel As Label
Dim pTextBox As TextBox
 
Set pForm = Application.CreateForm()
 
Set pTextBox = Application.CreateControl(pForm.Name, acTextBox, , , , 400, 400, 1000, 300)
Set pLabel = Application.CreateControl(pForm.Name, acLabel, , , , 400, 200, 1000, 200)
pLabel.Caption = "MyLabel"
DoCmd.OpenForm pForm.Name, acNormal

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 05:15 15-03-2007
Dixi257



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur
 

Цитата:
В том то и дело, что их количество не ограничено сверху

 
Кажется мне, что ты задачу усложняешь. Ну не разместишь ты 100 000 полей на экране. и уже при 300-400 полях Форма такая будет создаваться и работать крайне медленно. Нужно упростить условия, ограничить количество полей. Ну если уж очень хочется, используй действительно createcontrol. Только я бы рассматривал такой вариант в последнюю очередь. И при этом все равно ОБЯЗАТЕЛЬНО нужна проверка на количество создаваемых полей, иначе в один прекрасный момент система зависнет нафиг. Не убедил?

Всего записей: 128 | Зарегистр. 24-08-2005 | Отправлено: 14:20 15-03-2007
altaph

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur
 
пример кода с createcontrol

Код:
 
    Dim rst As ADODB.Recordset
    Dim fld As ADODB.Field
    Dim I As Integer
    Dim Tbl As String
     
    Tbl = "Table1" ' имя искомой таблицы
     
    Set frm = CreateForm()
    frm.Caption = "My Form"
    frm.RecordSource = Tbl
     
    'ширина, высота и пробел между элементами
    Dim W As Integer, H As Integer, G As Integer
    W = 700
    H = 500
    G = 15
     
    Set rst = New ADODB.Recordset
    rst.Open Tbl, CurrentProject.Connection
     
    With frm.DefaultControl(acTextBox)
      .Width = W
      .Height = H
    End With
     
    For I = 0 To rst.Fields.Count - 1
        Set fld = rst.Fields(I)
        With CreateControl( _
          FormName:=frm.Name, _
          ControlType:=acTextBox, _
          Section:=acDetail, _
          Left:=10, _
          Top:=I * (H + G))
           
          .Name = fld.Name
          .ControlSource = fld.Name
        End With
    Next I
     
    rst.Close
    Set fld = Nothing
    Set rst = Nothing
 

Всего записей: 6 | Зарегистр. 12-03-2007 | Отправлено: 19:11 15-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем ответившим большое спасибо

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 19:39 15-03-2007
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur
Как Dixi257 уже заметил, ты пробуешь решить задачу в лоб, силой. К  примеру, такую задачу можно решить, используя только 2 контрола. Лист и техт бокс. В листе отмечаем какое поле редактируется; в техт боксе заносим собственно техт. Естественно, это не удобный дизайн. Можно подумать об использовании грида, о различых комбинациях контролов. Главное, обдумать задачу и найти преемлемое решение.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 00:30 16-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надеюсь, я ещё не всем здесь надоел
Вопрос: как разместить в SubForm только что программно созданную форму?

Код:
 
Dim frm As Form
Set frm = CreateForm
Me!Subform.SourceObject = frm.Name
 

Не работает

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 17:08 19-03-2007
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur
Уважаемый, Вы опять наступаете на теже "грабли". Формы Access не эквивалентны формам в VBA. В Access нельзя добавлять control в runtime. Subform - control. Поэтому сначала добавьте его
Application.CreateControl "myWorkform", acSubform ...

Цитата:
Me!Subform.SourceObject = frm.Name  

А здесь, зачем Вы передаёте строку названия формы, когда требуется объект типа формы?
 
Может Вам имеет смысл поставить полную справку по Access и внимательнее её просмотреть? В VBA можно получить контекстную справку по свойствам и методам объектов.

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:41 19-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AndVGri
Выдержка из справки по Access (SourceObject Property):

Цитата:
Read/write String
...
Enter the name of the form or report that is the source of the subform or subreport...

И т.д.
 
По поводу добавления контрола. Заколдованный круг получается, однако. Для того, чтобы добавить run-time подформу, мне нужно добавить acSubform, но я не могу сделать этого run-time и т.д.
 
Ладно, опишу задачу более подробно. Нужно иметь возможность подключиться к произвольной таблице в произвольной базе данных (имя таблицы и путь к файлу базы вводятся во время выполнения) и организовать изменение/добавление/удаление и т.д. данных. Подключение и получение информации я сделал. Мне нужно просто иметь возможность реализовать ввод данных. И вот здесь-то появляется проблема, ибо Access VBA не предоставляет разработчику функцию изменения формы во время выполнения Может у кого есть идеи, как обойти это ограничение?

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 18:53 19-03-2007
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gorthaur

Цитата:
Read/write String  
...  
Enter the name of the form or report that is the source of the subform or subreport...  

Примите мои извинения, до этого пункта не дочитал.
 
А по Вашему вопросу, так продолжайте конструирование, как пример:
 
    Dim pMainForm As Form
    Dim pSubForm As Form
    Dim pSubFormControl As SubForm
    Dim FormName As String
     
    'Создаём подформу
    Set pSubForm = Application.CreateForm()
    'Добавляем элементы и настраиваем подформу
    '...
    FormName = pSubForm.Name
    DoCmd.Save acForm, FormName
    DoCmd.Close acForm, FormName, acSaveYes
     
    'Создаём главную форму
    Set pMainForm = Application.CreateForm()
    'Добавляем элементы и настраиваем главную форму
    '....
    'собственно, добавляем в главную форму подформу
    Set pSubFormControl = Application.CreateControl(pMainForm.Name, acSubform, , , , 100, 100, 1000, 1000)
    pSubFormControl.SourceObject = FormName
    DoCmd.Save acForm, pMainForm.Name
     
    'Запускаем хозяйство
    DoCmd.OpenForm pMainForm.Name

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 20:22 19-03-2007 | Исправлено: AndVGri, 20:23 19-03-2007
gorthaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, попробую

Всего записей: 23 | Зарегистр. 05-01-2007 | Отправлено: 23:39 19-03-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access
ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru