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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Если не сработает, попробуй http://www.jlion.com/docs/accessscan.aspx  
На скрине не видно куда будешь добавлять имена - в textbox или что-то другое. Удобнее использовать listbox.
http://msdn.microsoft.com/en-us/library/bb239005.aspx
 
#2
Ошибка может быть в несовпадении типа данных. Такое надо смотреть только в реальном проекте, а не лечить по телефону
Проверь какой data type у поля-параметра. И какой type передает InputBox.
Так же учти что с выбором другого поля его data type тоже будет другим. Соответственно, надо конвертировать данные с InputBox.
 

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 00:32 08-01-2010 | Исправлено: dneprcomp, 00:39 08-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Пожалуйста, пожалуйста, пожалуйста, напишите подробней по 1 пункту... что мне с этим кодом делать? как использовать listbox? где его прописывать? как это вообще реализовать? я полный чайник...

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 02:57 08-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vilerius
Listbox(или combo) - это контрол. Такой же как и textbox. И находится там же.
Поставь код на load формы(5). Вместо inputbox название будешь брать из combo

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 05:18 08-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Наверное, мы друг друга не понимаем) Мне необходимо сделать так, чтобы у пользователя перед глазами (прямо на форме) был список имеющихся в базе таблиц, который обновлялся бы после добавления или удаления таблицы. Просто, чтобы пользователь знал какие есть таблицы, чтобы потом делать в них изменения. Стандартное окошко со всеми объектами access я скрыл, чтобы не было доступа к формам и запросам.
Вы меня понимаете?)

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 05:35 08-01-2010 | Исправлено: Vilerius, 05:43 08-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vilerius
А вы меня?
Вы когда-нибудь на форму контрол добавляли?
Что такое форма вообще представляете? Форма - это то с чем юзер работает. Чтобы ее сделать, програмист должен создать эту форму, добавить контролов по вкусу и написать ну хоть какой-нибудь код.
На моем скрине и показана форма в дизайн моде. Для програмиста. Не для юзера.  
 
Попробуйте последовательно выполнить инструкциию со скрина. Номера там для кого стоят?
 
Динамически таблицы обычно не создают. Но если очень хочется, то можно добавить кнопку и на нее прописать тот же код заполнения combo. Если юзеру захочется пусть вручную обновляет.

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 07:05 08-01-2010 | Исправлено: dneprcomp, 07:09 08-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С этим кодом не получилось - пишет, что 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
 
Тоже не пашет...

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 12:21 08-01-2010 | Исправлено: Vilerius, 12:38 08-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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


Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 21:49 08-01-2010 | Исправлено: dneprcomp, 21:59 08-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот что у меня вылетает, когда запускаю форму
http://img709.imageshack.us/img709/3664/errorbo.jpg

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 03:29 09-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vilerius
 
А где msg ошибки?
 
Попробуй заменить  
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")  
на
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef2")  
Если NewTableDef уже  один раз и не delete в конце sub, то нельзя добавить еще раз с таким же именем.
Так же попробуй убрать с load и поставить весь код на кнопку. Может на load еще что-то не готово.

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 04:51 09-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
теперь вот это)
http://img141.imageshack.us/img141/5402/error2j.jpg

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 06:25 09-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vilerius
Надо не объявлять List19, а ссылаться на существующий по его имени
http://office.microsoft.com/en-us/access/HA010345511033.aspx?pid=CL100570041033

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 06:46 09-01-2010 | Исправлено: dneprcomp, 06:51 09-01-2010
Vilerius

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
я так понял, что это несовпадение в типах из-за скрытых форм ~Tmpclp...
Как их проигнорировать?

Всего записей: 29 | Зарегистр. 15-09-2009 | Отправлено: 07:00 09-01-2010 | Исправлено: Vilerius, 07:01 09-01-2010
dneprcomp



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

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

Это значит, что надо прочитать все по линку, поместить combo на форму и обратиться к нему по имени в строке
ctrlListBox.AddItem tdfLoop  
т.е. поменять ctrlListBox на реальное имя добавленного combo.
И именно combo, а не list

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 08:08 09-01-2010 | Исправлено: dneprcomp, 10:20 09-01-2010
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, Форумчане.
 
С прошедшим Всех.
 
В состоянии помочь после Нового Года?
 
Хочу импортировать лист книги XLS в таблицу Access. Само собой из VBA. Лист не первый по счету и книга закрыта.
 
Как сделать? Хотел использовать функцию «TransferSpreadsheet». Но вставляется только первый лист книги, вне зависимости от того какой лист был активным при закрытии-сохранении XLS.
 
Как импортировать нужный лист? Помогайте.

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 18:05 13-01-2010
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oyger
Ну а если так:
 
Создать объект эксель
Открыть нужную книгу
Получить ссылку на нужный лист
Циклом по всем строкам листа(пока не пусто) вставить записи в таблицу  
 
?

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 20:19 13-01-2010
Oyger

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PrWork1
 
Лист книги, который нужно импортировать, представляет из себя массив данных.
Идем по оптимизации пути: если можно импортировать одной командой - зачем писать алгоритм построчного импорта?
А как Вы говорите - можно - вариант на крайний случай, если не будет идей как импортировать нужный лист сразу целиком...
 
Спасибо за совет.

Всего записей: 122 | Зарегистр. 22-03-2007 | Отправлено: 10:44 14-01-2010 | Исправлено: Oyger, 10:45 14-01-2010
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oyger
Да, конечно, согласен, это на тот случай если целиком не удастся импортировать.

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 12:05 14-01-2010
Slatsik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья, подскажите плз, кто встречался с такой проблемой...
есть связанная таблица в Access - связь с MySQL. Какие-то записи в этой таблице редактируются нормально, а на каких-то выскакивает сообщение, мол, пока вы тут правите, кто-то эту запись уже изменил...и изменить не могу %) Стопудова, что никто ничего не меняет в этой таблице!
Что делать, ума не приложу. Встречаюсь впервые с такой проблемой. Прилинкованных таблиц уйма.
Заранее мерси!

Всего записей: 59 | Зарегистр. 12-05-2003 | Отправлено: 00:05 21-01-2010
ZlydenGL



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если .ReQuery или подобное перед редактированием делать?

----------
Переработал: втыкая аккумулятор в шуруповерт пытаешься передёрнуть затвор

Всего записей: 4306 | Зарегистр. 22-06-2002 | Отправлено: 11:54 21-01-2010
Slatsik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так я пытаюсь редактировать непосредственно в таблице %) т.е. там никакого .requery не нужно делать. я так полагаю, что проблема может быть в ODBC драйвере, ничего другого на ум не приходит

Всего записей: 59 | Зарегистр. 12-05-2003 | Отправлено: 22:54 21-01-2010
   

Страницы: 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-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru