Как ссылаться на поля в таблицах, используя VBA в Access, чтобы их можно было редактировать? - PullRequest
2 голосов
/ 21 сентября 2009

Я новичок в создании БД. Пока у меня есть форма, настроенная так, как мне нравится, но никакие значения не связаны b / c Мне нужно переключаться между таблицами (возможно, я мог бы просто добавить все поля из первой таблицы во вторую таблицу, но половину Смысл того, что я сам делал это, учился).

Я столкнулся с двумя проблемами.

Во-первых, у меня проблемы с тем, чтобы форма приняла, что я хочу, чтобы ее источник записей был myTable. Понятия не имею почему. Кажется, достаточно просто

form.RecordSource="myTable"

К сожалению, это не работает. Если я это сделаю, то текстовые поля, связанные с полями в myTable, скажут #error или #name? вместо их предполагаемого значения.

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

"SELECT * FROM myTable, myTable AS backup_1;"

Я понятия не имею, что это значит, но это то, что я должен был сделать, чтобы заставить что-нибудь работать. Это моя первая проблема - как мне «правильно» связать БД с формой без махинаций и заставить работать ссылки? Я сделал это 3 разными способами, один работал какое-то время, потом останавливался, один (form.recordSource=myTable) просто не работал, а другой - первый метод, который я упомянул. Все они вызывают у меня проблемы.

Во всяком случае, я использовал SELECT..., так как он наиболее близок к реальной работе. Оттуда я установил текстовые поля, которые я не хотел оставлять Unbound, как [myTable.FieldName], и ​​это сработало. Программно я смог использовать [myTable.FieldName] для редактирования, чтобы получить информацию из определенного поля из определенной записи без затруднений. Проблема в том, что я не могу программно редактировать данные, хранящиеся в этих полях.
Например, если я попытаюсь:

txtDisplayField1=[myTable.Field1]

Работает нормально. Но если я попытаюсь:

[myTable.Field1] = txtDisplayField1.text

Я получаю ошибку времени выполнения 2448 - «Вы не можете присвоить значение этому объекту». (Какое самое полезное сообщение об ошибке?)

Ранее я упоминал, что при сопоставлении моей формы с таблицей был один способ, который сначала работал, но затем по какой-то причине перестал работать. Первоначально я просто набрал:

form.recordsource = myTable

и все работало просто отлично. Я мог ссылаться на поля, ссылаясь на них как Field1 и т. Д., Без скобок. Это сработало, когда я ушел с работы в пятницу (задыхаюсь - я не программист по профессии), но не сработал, когда я вошел. Это, вероятно, самое запутанное объяснение проблемы, возможное с человеческой точки зрения ... но любая помощь будет с благодарностью.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2009

Вы, похоже, боретесь против дизайна Access по умолчанию.

Если у вас есть две таблицы с одинаковой структурой (в хорошо спроектированной базе данных вы не должны этого делать, но эй, вещи случаются), вы можете использовать событие OnOpen формы, чтобы установить источник записей формы. Очень простой (но не очень удобный) способ сделать это:

  Private Sub Form_Open(Cancel As Integer)
    If vbYes = MsgBox("Edit Table1?", vbQuestion+vbYesNo, "Choose table") Then
       Me.RecordSource = "Table1"
    Else
       Me.RecordSource = "Table2"
    End If
  End Sub

Причина, по которой ужасный пользовательский интерфейс, заключается в том, что вы задаете вопрос «да / нет», но на самом деле ответ «table1» или «table2». Очень легко неправильно понять вопрос.

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

0 голосов
/ 21 сентября 2009

У меня проблемы с заполнением формы принять, что я хочу, чтобы его источник быть myTable.

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

Чтобы попытаться это исправить, я пошел в свойства формы и установить его источник управления:

ВЫБРАТЬ * ИЗ myTable

Правильно, хотя ваш исходный SQL немного запутан.

если я попытаюсь:

txtDisplayField1 = [myTable.Field1]

Работает нормально. Но если я попробую:

[myTable.Field1] = txtDisplayField1.text

Я получаю ошибку во время выполнения 2448 - «Вы не можете назначить значение этому объекту. " самое полезное сообщение об ошибке когда-либо.)

Попробуйте это:

Me.Recordset.Edit
Me.Recordset("Field1") = txtDisplayField1
Me.Recordset.Update
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...