Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Обьекты в Басике и доступ к онным


Автор: LexRema 4.4.2006, 19:23
Возможно данная тема эсть в некотором роде не нормальной... Я всегда работал на С++. Сейчас же в аксесе надо описать автоматическую работу бд с неопределенным форматом
1. Неизвестно количество таблиц
2. Неизвестно количество полей в оных
Но это потом. Сейчас же возникла просто ламерская проблема. Создавая обьект ДБ и передавая ему кьюрентДБ, мы можем наблюдать (в окне вотч) всю иерархию энтого обьекта. Как же из нее ее вытянуть, если таковое возможно. Или, если энто все не совсем через руки делаеться - как сделать через онные. smile
И сразу просьба:
если есть толковые примеры именно програмирования бд - присылайте на екаунт...
Спасибо.

Автор: Akina 5.4.2006, 10:37

M
Akina
Пишите грамотно, без ошибок, а также без сленга, строгим техническим языком

Перечень таблиц базы данных находится в коллекции Tabledefs.

Код

Dim db As Database
Dim i As Long

Set db = CurrentDb
Debug.Print "The list of tables in " & db.Name & ":"
For i = 0 To db.TableDefs.Count - 1
   Debug.Print db.TableDefs(i).Name
Next i
Set db = Nothing


Будет выведен полный перечень имен таблиц базы данных, включая системные (их имена начинаются на MSys).

Аналогично у каждой таблицы, описанной в TableDefs, есть коллекция, содержащая список полей.

Код

Dim db As Database
Dim td As TableDef
Dim i As Long

Set db = CurrentDb
Set td = db.TableDefs(db.TableDefs.Count - 1)
Debug.Print "The structure of table " & td.Name & ":"
For i = 0 To td.Fields.Count - 1
   Debug.Print td.Fields(i).Name, td.Fields(i).Type
Next i
Set td = Nothing
Set db = Nothing

Автор: LexRema 5.4.2006, 16:43
Хочу сравнить два стринга - один с названием таблицы, другой с "MSys"... Ф-ии МСДН:
String.Copy()
String.Compare()
и многие другие не подходят... Как тогда с ними обращаться?
И как можна продолжить проход по циклу без выполнения операций- аналог в С++ "continue"
Код

for (int i=0;i<5;i++)
{
     if (i!=3)
           continue;//продолжение без входа в операторы
     ....(операторы)

}


Автор: Akina 5.4.2006, 17:04
Цитата(LexRema @ 5.4.2006, 17:43 Найти цитируемый пост)
Хочу сравнить два стринга - один с названием таблицы, другой с "MSys"...

Код

If SomeString = "MSys..." Then


Цитата(LexRema @ 5.4.2006, 17:43 Найти цитируемый пост)
как можна продолжить проход по циклу без выполнения операций

Нет такого оператора. Есть только прерывание выполнения обрамляющего цикла.

Автор: LexRema 5.4.2006, 17:20
Вопросы сыпятся песком... Извини, просто не могу найти толковой литературы. То что МСДН не годится меня вообще убило. С нэта накачено уже около 80 метров лит-ры... Либо сбои при разархивации , либо руководства "ткните эту кнопочку и..."

Сейчас же кинул на форму ListBox. Как же его контролить? Переменная есть... Но как все значения удалить, получить кюрент курсор и т.п.? Честно... Можете меня конечно послать... Но у меня работа стоит изза отсутствия толковой инфы smile
Добавлено @ 17:21
smile
Добавлено @ 17:24
Удалить айтем- есть возможность... А как указать все? С курсорами тоже вроде поймал идею...

Автор: LexRema 5.4.2006, 18:01
Код

For I = 0 To db.TableDefs.Count - 1
        If db.TableDefs(I).Name <> "MSys..." Then
            List_IN.AddItem db.TableDefs(I).Name, 0
        End If
 Next I

Вроде все правильно ... но в контрол добавляются все поля smile

Автор: LexRema 5.4.2006, 18:37
И снова я
Код

Private Sub Button_Select_Click()
    Dim ItSel As Variant
    ItSel = Me.List_IN.ListIndex
    If ItSel = -1 Then
        Debug.Print "Choose a table!"
        Exit Sub
    Else
        ...
    End If
End Sub

Debug.Print "Choose a table!" - где я это могу увидеть? и подкиньте, пожалуйста, формат MessageBox

Автор: LexRema 5.4.2006, 19:31
Насколько я понял, формы могут быть изменены без их открытия( в поля добавлена инвформация и т.п.)
Form![Choosing Tables]!Table_IN.AddItem "s", 0 - что здесь не так?
Добавлено @ 19:45
И как это вообще сделать? А то выгонят - все стены головой продолбаю.

Автор: LexRema 5.4.2006, 19:47
smile

Автор: Akina 6.4.2006, 09:34
Если у Вас есть Visual Studio, должна быть и MSDN. Достаточно даже July 2001.

Достаточно, впрочем, и встроенной в MS Access справки:
Главное меню Access
Справка
Справка: Microsoft Office Access
Оглавление
Microsoft Access Visual Basic Reference

Автор: LexRema 6.4.2006, 14:47
"То что МСДН не годится меня вообще убило"

Проблема не в МСДН! То, что предлагает он, "слегка" не работает в аксесе. Вот в чем беда.

Автор: LexRema 6.4.2006, 15:31
Cогласен, встроеная справка неплохая. Единственое, что повторюсь:

Код

 For I = 0 To db.TableDefs.Count - 1
        If db.TableDefs(I).Name <> "MSys..." Then
            List_IN.AddItem db.TableDefs(I).Name, 0
        End If
 Next I


Вроде все правильно ... но в контрол добавляются все поля

Автор: Akina 6.4.2006, 17:42
Цитата(LexRema @ 6.4.2006, 16:31 Найти цитируемый пост)
Вроде все правильно ... но в контрол добавляются все поля

Не "добавляются все поля", а "ты добавляешь все поля". Код-то посмотри...

Цитата(LexRema @ 6.4.2006, 15:47 Найти цитируемый пост)
Проблема не в МСДН! То, что предлагает он, "слегка" не работает в аксесе. Вот в чем беда.

А у всех работает... может не в МСДН дело?

Автор: LexRema 6.4.2006, 21:44
Цитата

А у всех работает... может не в МСДН дело?


И можна вытянуть символ из строки по индексу, и выбрать подстроку, и многое другое? Здесь же даже символьных переменных нет!

Не рву рубаху на груди, что великий специалист в басике. Его синтаксис увидел в день, когда и открыл данную тему на форуме. Так ткните меня носом, плиз, а не "код посмотри".

If db.TableDefs(I).Name <> "MSys..." Then
List_IN.AddItem db.TableDefs(I).Name, 0
End If
Насколько я привык в С, если выполняется (db.TableDefs(I).Name <> "MSys...") то действие(List_IN.AddItem db.TableDefs(I).Name, 0) происходит, иначе - нет. Как бы сделал в неурезаном Басике: Вытянул 4 первых символа строки db.TableDefs(I).Name. А здесь пользуюсь предложеным вами вариантом... Правда такого в хелпе пока не встречал. Даже если это я "добавляеш все поля", - так почему?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)