Да (Совпадения не допускаются)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
rasiell
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 7:11

Да (Совпадения не допускаются)

Сообщение rasiell » 28.06.2008 (Сб) 7:18

Подскажите пожалуйста, как прграммно сделать в аксесовской базе, чтобы поля были индексированными и чтобы совпадения не допускались (использую ADOx)?


Код: Выделить всё

Dim col As New Column
col.Name = colName
col.Attributes = adColNullable
oCat.Tables(fieldName).Columns.Append col


И можно ли это как-то сразу распространить на всю базу, например при ее создании?

BasiС
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 16.02.2006 (Чт) 23:34
Откуда: Koenigsberg

Сообщение BasiС » 28.06.2008 (Сб) 9:12

Для создания таблиц с индексированными полями я использую ADO и работаю с БД через SQL запросы. Например следующий запрос создаёт новую таблицу Prises:

Код: Выделить всё
CREATE TABLE Prises (PrisID COUNTER CONSTRAINT PrisID_pk PRIMARY KEY, PrisPort TEXT(50), PrisStop SINGLE, PrisAmount DOUBLE, PrisUe TEXT(10), PrisMemo MEMO, PrisDate DATE)


где поле PrisID является счётчиком, в котором естественно не допускаются совпадения.

rasiell
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 7:11

Сообщение rasiell » 28.06.2008 (Сб) 9:50

Что-то не получается )

Вот такую штуку откопал, но работать зараза не хочет(

Код: Выделить всё
Public Sub newIndex(dbTable As ADOX.Table)
'  dbTable is table where we add new index
Dim dbIndex As ADOX.Index
    On Error GoTo errCatch

    Set dbIndex = New ADOX.Index
    dbIndex.name = "tblPrimaryIndex"
    dbIndex.Clustered = True
    dbIndex.IndexNulls = adIndexNullsDisallow
    dbIndex.PrimaryKey = True
    dbIndex.Unique = True

    dbIndex.Columns.Append "id_Column"
    ' id_Column is a name of column

    dbTable.Keys.Append dbIndex

    dbTable.Indexes.Append "column2Index", "newColumn2"
    ' newColumn2 is name of column in our table
    Exit Sub

errCatch:
        MsgBox Err.Description & Err.Number
End Sub

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 29.06.2008 (Вс) 1:00

1) Для БД есть отдельная ветка... возможно, тему перенесут...

2) А есть необходимость именно в счётчике? Уникальность первичного ключа БД обеспечивается в любом случае, будь оно хоть текстовым (впрочем, это крайне нежелательно).

В любом случае, код
Код: Выделить всё

CREATE TABLE Prises (
    PrisID COUNTER  PRIMARY KEY,
    PrisPort TEXT(50),
    PrisStop SINGLE,
    PrisAmount DOUBLE,
    PrisUe TEXT(10),
    PrisMemo MEMO,
    PrisDate DATE
)


делает таблицу с ключом требуемого типа, а команда
CREATE [ UNIQUE ] INDEX индекс
ON таблица (поле [ASC|DESC][, поле [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

отвечает за создание индекса (справка по Access)

Требовалось именно это?

ЗЫ. Я, честно говоря, не уверен, что для добавления ограничения уникальности/первичного ключа/индекса/итп лучше использовать VB-код. Я бы предпочёл воспользоваться языком SQL.

ЗЗЫ. Вообще эту тему я открыл из-за того, что по её названию не понял ничего вообще.:)
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

rasiell
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 4
Зарегистрирован: 24.06.2008 (Вт) 7:11

Сообщение rasiell » 29.06.2008 (Вс) 16:10

Решил вот таким способом.

Код: Выделить всё
Dim oTable As New Table
oTable.Name = TableName
oCat.Tables.Append oTable

oCat.Tables(TableName).Columns.Append ColunmName

Set idx = New ADOX.Index
With idx
.Name = "Index1"
.Columns.Append ColunmName
.Unique = True
End With

oCat.Tables(TableName).Indexes.Append idx


У меня база создавалась программно и надо было также программно присваивать колонкам таблиц индексы, для того, чтобы ячейки заполнялись уникальными данными (отсюда и .Unique = True). Пока кроме такого решения ничего не нашел.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList