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

» VBA for Access

Автор: Panteryl4ik
Дата сообщения: 24.12.2009 15:58
здравствуйте,помогите кто чем сможет=)))
мне нужно,чтобы поля кода,заполнялись автоматом,из других таблиц.
у меня сделано,через подстановку.
есть таблица PO,в ней к примеру Name_PO,PO_Code,Otdel_Code
на PO_Code стоит условие,по умолчанию текуще время,Name_PO забивается ручками,а вот в поле Otdel_Code существует список где указны все коды,и нужно самому выбирать.
а как сделать так.что б,оно заполнялось автоматом,а не пользоватлю выбирать?!
заране спс
Автор: dneprcomp
Дата сообщения: 24.12.2009 16:23
Panteryl4ik
И как компьютер будет выбирать из списка нужное значение Otdel_Code? Random?
Автор: Panteryl4ik
Дата сообщения: 24.12.2009 16:49
ну нет,с таблицы Otdel...где так же есть Name_Otdela,Otdel_Code
они связаны между собой
Автор: dneprcomp
Дата сообщения: 24.12.2009 19:51
Panteryl4ik
И как компьютер должен выбирать из списка нужное значение Otdel_Code для ДАННОГО КОНКРЕТНОГО Name_PO?
Автор: Vilerius
Дата сообщения: 07.01.2010 05:35
dneprcomp
Я понял как скрывать окно объектов базы, но теперь меня интересует: можно ли скрыть панель инструментов или хотя бы заблокировать к ней доступ, чтобы пользователь ничего не мог через неё менять?
И второй вопрос) можно ли в том поле, которое является элементом управления формой, вывести названия всех имеющихся таблиц? подробнее на скрине
http://img101.imageshack.us/img101/9512/ruboard.jpg
Спасибо ещё раз за помощь!)
Автор: dneprcomp
Дата сообщения: 07.01.2010 06:06
Vilerius
#1
Hide the Ribbon When Access Starts
How do I enumerate tables in an Access Database
Автор: Vilerius
Дата сообщения: 07.01.2010 18:00
dneprcomp
C панелью разобрался)
А вот о таблицах не понял вообще. Разъясните мне, чайнику, пожалуйста) можно ли вообще как-то выводить их названия в этом поле, которое я указал? в том примере, что вы мне предложили применяется элемент activeX - с чем его есть? как и где его подключать и т.д.?
И ещё - какой код прописать, чтобы в форме с кнопки запускался Microsoft Visual Basic ?

Добавлено:
И, пожалуйста, проверьте почему , когда я пытаюсь удалить данные по выбору при помощи кода

Private Sub Кнопка7_Click()

On Error GoTo err

x = InputBox("Введите название таблицы, в которой хотите произвести изменения", "Удаление записи в таблице")
z = InputBox("Введите имя поля, по которому будет идти выбор значения", "Выбор поля")
y = InputBox("Введите значение, которое хотите удалить", "Ввод значения")


q = "DELETE * FROM " & x & " WHERE " & z & " = " & y & ";"

DoCmd.RunSQL q

Exit Sub

err:

MsgBox "Удаление данных отменено!", , "Отмена"

End Sub

Числовые значения удаляются без проблем, а вот с остальными после ввода "y" - вылетает окно "введите параметр". Что с ним делать?
Автор: dneprcomp
Дата сообщения: 07.01.2010 23:32
Vilerius
#1
С той страницы надо было попробывать вот этот код:

Код: ' Enumerate tables in catalog
For Each oTable In oCatalog.Tables
' Filter on user tables only
If oTable.Type = "TABLE" Then
     ctrlListBox.AddItem Item:=oTable.Name
'MsgBox "Table Name: " & oTable.Name
End If
Next
Автор: Vilerius
Дата сообщения: 08.01.2010 01:57
dneprcomp
Пожалуйста, пожалуйста, пожалуйста, напишите подробней по 1 пункту... что мне с этим кодом делать? как использовать listbox? где его прописывать? как это вообще реализовать? я полный чайник...
Автор: dneprcomp
Дата сообщения: 08.01.2010 04:18
Vilerius
Listbox(или combo) - это контрол. Такой же как и textbox. И находится там же.
Поставь код на load формы(5). Вместо inputbox название будешь брать из combo
Автор: Vilerius
Дата сообщения: 08.01.2010 04:35
dneprcomp
Наверное, мы друг друга не понимаем) Мне необходимо сделать так, чтобы у пользователя перед глазами (прямо на форме) был список имеющихся в базе таблиц, который обновлялся бы после добавления или удаления таблицы. Просто, чтобы пользователь знал какие есть таблицы, чтобы потом делать в них изменения. Стандартное окошко со всеми объектами access я скрыл, чтобы не было доступа к формам и запросам.
Вы меня понимаете?)
Автор: dneprcomp
Дата сообщения: 08.01.2010 06:05
Vilerius
А вы меня?
Вы когда-нибудь на форму контрол добавляли?
Что такое форма вообще представляете? Форма - это то с чем юзер работает. Чтобы ее сделать, програмист должен создать эту форму, добавить контролов по вкусу и написать ну хоть какой-нибудь код.
На моем скрине и показана форма в дизайн моде. Для програмиста. Не для юзера.

Попробуйте последовательно выполнить инструкциию со скрина. Номера там для кого стоят?

Динамически таблицы обычно не создают. Но если очень хочется, то можно добавить кнопку и на нее прописать тот же код заполнения combo. Если юзеру захочется пусть вручную обновляет.
Автор: Vilerius
Дата сообщения: 08.01.2010 11:21
С этим кодом не получилось - пишет, что oTable=Empty
Private Sub Form_Load()
' Enumerate tables in catalog
For Each oTable In oCatalog.Tables
' Filter on user tables only
If oTable.Type = "TABLE" Then
ctrlListBox.AddItem Item:=oTable.Name
'MsgBox "Table Name: " & oTable.Name
End If
Next
End Sub

Добавлено:
Попробывал и так

Private Sub Form_Load()
On Error Resume Next

Dim MyDatabase As Database

Set MyDatabase = DBEngine.Workspaces(0).Databases(0)


' Enumerate table definitions.
If MyDatabase.TableDefs.Count > 0 Then
Dim iTable As Integer

ctrlListBox.AddItem Item:="TableDefs"
ctrlListBox.AddItem Item:="Name, DateCreated"
For iTable = 0 To MyDatabase.TableDefs.Count - 1


ctrlListBox.AddItem Item:=MyDatabase.TableDefs(iTable).Name
ctrlListBox.AddItem Item:=MyDatabase.TableDefs(iTable).DateCreated

Next iTable
End If
End Sub


Но тоже не работает... ошибку не выдаёт. просто не показывает список таблиц...
вот форма в конструкторе:

http://img710.imageshack.us/img710/9463/93471194.jpg

а здесь просто в режиме формы:

http://img229.imageshack.us/img229/1013/62430617.jpg

Я же вроде бы всё правильно сделал?)

Добавлено:
Попробывал ещё вот так
Public cnnACC As ADODB.Connection 'Access Connection
Public adoCat As ADOX.Catalog 'Catalog
Public adoTbl As ADOX.Table 'Table

Public Sub Form_Load()

Dim strDB, strConn As String

'Set New connection
Set cnnACC = New ADODB.Connection

'String Database Path
Set strDB = CurrentDb()

'String Connection with Database path String
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=" & strDB & ";"

' Open the connection
cnnACC.Open strConn

'Set new ADOX CAtalog
Set adoCat = New ADOX.Catalog
'Allow active connection to the opened connection to enable use of the catalog
adoCat.ActiveConnection = cnnACC

'Clear the Userform list box to refresh tables
List19.Clear

For Each adoTbl In adoCat.Tables

Select Case adoTbl.Name

Case "MSysAccessObjects", "MSysAccessXML", "MSysACEs"
'Ignore System tables listed above
Case "MSysObjects", "MSysQueries", "MSysRelationships"
'Ignore System tables listed above
Case Else
'Add Non-system table names
List19.AddItem adoTbl.Name

End Select

Next adoTbl
'Clear Memory
Set cnnACC = Nothing: Set adoCat = Nothing

End Sub

Тоже не пашет...
Автор: dneprcomp
Дата сообщения: 08.01.2010 20:49
Vilerius
Попробуй этот. Я его проверил - рабочий.

Код: Dim dbsNorthwind As Database
Dim tdfNew As TableDef
Dim tdfLoop As TableDef
Dim prpLoop As Property

Set dbsNorthwind = CurrentDb

' Create new TableDef object, append Field objects
' to its Fields collection, and append TableDef
' object to the TableDefs collection of the
' Database object.
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")
tdfNew.Fields.Append tdfNew.CreateField("Date", dbDate)
dbsNorthwind.TableDefs.Append tdfNew

With dbsNorthwind
Debug.Print .TableDefs.Count & _
" TableDefs in " & .Name

' Enumerate TableDefs collection.
For Each tdfLoop In .TableDefs

ctrlListBox.AddItem tdfLoop
Debug.Print " " & tdfLoop.Name

Next tdfLoop

' Delete new TableDef since this is a
' demonstration.
.TableDefs.Delete tdfNew.Name
.Close
End With
Автор: Vilerius
Дата сообщения: 09.01.2010 02:29
Вот что у меня вылетает, когда запускаю форму
http://img709.imageshack.us/img709/3664/errorbo.jpg
Автор: dneprcomp
Дата сообщения: 09.01.2010 03:51
Vilerius

А где msg ошибки?

Попробуй заменить
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")
на
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef2")
Если NewTableDef уже один раз и не delete в конце sub, то нельзя добавить еще раз с таким же именем.
Так же попробуй убрать с load и поставить весь код на кнопку. Может на load еще что-то не готово.
Автор: Vilerius
Дата сообщения: 09.01.2010 05:25
теперь вот это)
http://img141.imageshack.us/img141/5402/error2j.jpg
Автор: dneprcomp
Дата сообщения: 09.01.2010 05:46
Vilerius
Надо не объявлять List19, а ссылаться на существующий по его имени
http://office.microsoft.com/en-us/access/HA010345511033.aspx?pid=CL100570041033
Автор: Vilerius
Дата сообщения: 09.01.2010 06:00
dneprcomp
я так понял, что это несовпадение в типах из-за скрытых форм ~Tmpclp...
Как их проигнорировать?
Автор: dneprcomp
Дата сообщения: 09.01.2010 07:08
Vilerius

Цитата:
Надо не объявлять List19, а ссылаться на существующий

Это значит, что надо прочитать все по линку, поместить combo на форму и обратиться к нему по имени в строке
ctrlListBox.AddItem tdfLoop
т.е. поменять ctrlListBox на реальное имя добавленного combo.
И именно combo, а не list
Автор: Oyger
Дата сообщения: 13.01.2010 17:05
Приветствую, Форумчане.

С прошедшим Всех.

В состоянии помочь после Нового Года?

Хочу импортировать лист книги XLS в таблицу Access. Само собой из VBA. Лист не первый по счету и книга закрыта.

Как сделать? Хотел использовать функцию «TransferSpreadsheet». Но вставляется только первый лист книги, вне зависимости от того какой лист был активным при закрытии-сохранении XLS.

Как импортировать нужный лист? Помогайте.
Автор: PrWork1
Дата сообщения: 13.01.2010 19:19
Oyger
Ну а если так:

Создать объект эксель
Открыть нужную книгу
Получить ссылку на нужный лист
Циклом по всем строкам листа(пока не пусто) вставить записи в таблицу

?
Автор: Oyger
Дата сообщения: 14.01.2010 09:44
PrWork1

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

Спасибо за совет.
Автор: PrWork1
Дата сообщения: 14.01.2010 11:05
Oyger
Да, конечно, согласен, это на тот случай если целиком не удастся импортировать.
Автор: Slatsik
Дата сообщения: 20.01.2010 23:05
Друзья, подскажите плз, кто встречался с такой проблемой...
есть связанная таблица в Access - связь с MySQL. Какие-то записи в этой таблице редактируются нормально, а на каких-то выскакивает сообщение, мол, пока вы тут правите, кто-то эту запись уже изменил...и изменить не могу %) Стопудова, что никто ничего не меняет в этой таблице!
Что делать, ума не приложу. Встречаюсь впервые с такой проблемой. Прилинкованных таблиц уйма.
Заранее мерси!
Автор: ZlydenGL
Дата сообщения: 21.01.2010 10:54
А если .ReQuery или подобное перед редактированием делать?
Автор: Slatsik
Дата сообщения: 21.01.2010 21:54
так я пытаюсь редактировать непосредственно в таблице %) т.е. там никакого .requery не нужно делать. я так полагаю, что проблема может быть в ODBC драйвере, ничего другого на ум не приходит
Автор: ZlydenGL
Дата сообщения: 22.01.2010 08:29
Slatsik, а ты попробуй Иногда идеология "а давайте выйдем и снова войдем - оно и поедет" спасает
Автор: alenkakolokol4ik
Дата сообщения: 22.01.2010 15:08
Привет всем!!! у меня вот такой встал вопрос как запрограммировать ячейку в accsse через VBA что бы она при двойном щелчке копировала текст ячейки в другую ячейку,при том что эти ячейки на разных формах!!!!
Заранее спасибо за ответы!!!!
Автор: ZlydenGL
Дата сообщения: 22.01.2010 21:58
alenkakolokol4ik, а в чем собственно проблема? Ячейки, скорее всего, обычные TextBox'ы с привязкой к определенному полю, так? Ну и что мешает например сделать так?


Код: Private Sub TextBox1_Click()
TextBox2.Text = Val(TextBox1.Text)
Me.Update
End Sub

Страницы: 1234567891011121314151617

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


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