Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Да (Совпадения не допускаются) Добавлено: 28.06.08 15:32  

Автор вопроса:  rasiell
Бьюсь головой об пол...

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

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #1 Добавлено: 30.06.08 17:31
В смысле? А как ты допустишь совпадения PRIMARY KEY?
Чет не понял вопроса...

Ответить

Номер ответа: 2
Автор ответа:
 Иван



Вопросов: 34
Ответов: 53
 Web-сайт: www.harami.ru
 Профиль | | #2
Добавлено: 02.07.08 21:31
Может быть, это Вам поможет.
Эта программа добавляет к двум таблицам (Дневник и Цитаты) числовое поле, заполняет его значениями, делает его индексированным и ключевым и устанавливает свойства поля. Также вносятся изменения в запросы, которые основаны на этих таблицах.



Option Explicit
    Public dbs As Database
    Private tdf As TableDef
    Private qdf As QueryDef
    Private fld As Field
    Private rst As Recordset
    Private idx As Index

Private Sub Command1_Click()
    Dim i As Integer
'Открытие БД
    Set dbs = OpenDatabase(App.Path & "\" & myDatabase.mdb)

'Проверка: м.б. БД уже конвертирована?
On Error GoTo ErrH
    Set rst = dbs.OpenRecordset("SELECT DiaryID FROM tabl_Diary";)
    MsgBox "Эта база данных уже конвертирована"
    GoTo Fin
    
Nxt1:
On Error GoTo 0
    Set rst = Nothing

'########################################################################################
'     ДНЕВНИК
'########################################################################################
'Создаем индексированное поле
    Set tdf = dbs.TableDefs("tabl_Diary";)
    Set idx = tdf.CreateIndex("NewIndex";)
    tdf.Fields.Append tdf.CreateField(";DiaryID", dbLong)
    idx.Fields.Append idx.CreateField(";DiaryID";)
    idx.Unique = True
    
'Заполняем индексированное поле
    Set rst = dbs.OpenRecordset("SELECT DiaryID FROM tabl_Diary";)
    i = rst.RecordCount
    If i = 0 Then
        GoTo FinDiary
    Else
        i = 0
        rst.MoveFirst
        Do
            i = i + 1
            rst.Edit
            rst.Fields(";DiaryID";).Value = i
            rst.Update
            rst.MoveNext
        Loop Until rst.EOF
    End If

FinDiary:
'Закрываем рекордсет
    rst.Close
    Set rst = Nothing
'Свойства поля
    Set fld = tdf.Fields(";DiaryID";)
    fld.DefaultValue = 0
    fld.ValidationRule = "Not Is Null And >0"
    idx.Primary = True
    tdf.Indexes.Append idx
    tdf.Indexes.Refresh

'Заменяем запрос
    dbs.QueryDefs.Delete "Q_Diary"
    dbs.QueryDefs.Refresh
    Set qdf = dbs.CreateQueryDef("Q_Diary", "SELECT DiaryID,DateOfRecord,NoteCaption,NoteTxt,ToRprt,KeyWords From tabl_Diary ORDER BY DateOfRecord, NoteCaption";)
'    dbs.QueryDefs.Append qdf
    dbs.QueryDefs.Refresh
    
    
'########################################################################################
'     ЦИТАТЫ
'########################################################################################
'Подменяем таблицу
    dbs.Execute ("SELECT AuthorName,Theme,SourceCyt,TextCyt INTO tmp1 FROM tabl_Cytates ORDER BY CytateID";)
    dbs.TableDefs.Delete "tabl_Cytates"
    dbs.TableDefs.Refresh
    dbs.TableDefs("tmp1";).Name = "tabl_Cytates"
    Set tdf = dbs.TableDefs("tabl_Cytates";)

'Создаем индексированное поле
    Set idx = tdf.CreateIndex("CytIndex";)
    tdf.Fields.Append tdf.CreateField("CytateID", dbLong)
    idx.Fields.Append idx.CreateField("CytateID";)
    idx.Unique = True

'Заполняем индексированное поле
    Set rst = dbs.OpenRecordset("SELECT CytateID FROM tabl_Cytates";)
    i = rst.RecordCount
    If i = 0 Then
        GoTo FinCyt
    Else
        i = 0
        rst.MoveFirst
        Do
            i = i + 1
            rst.Edit
            rst.Fields("CytateID";).Value = i
            rst.Update
            rst.MoveNext
        Loop Until rst.EOF
    End If

FinCyt:
'Закрываем рекордсет
    rst.Close
    Set rst = Nothing
'Свойства поля
    Set fld = tdf.Fields("CytateID";)
    fld.DefaultValue = 0
    fld.ValidationRule = "Not Is Null And >0"
    idx.Primary = True
    tdf.Indexes.Append idx
    tdf.Indexes.Refresh
    
'########################################################################################
'     ЗАВЕРШЕНИЕ РАБОТЫ
'########################################################################################
    MsgBox "Конвертирование выполнено успешно!"
Fin:
    dbs.Close
    Set dbs = Nothing
Exit Sub
ErrH:
    Resume Nxt1
End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам