Gå til innhold

Hvordan lager man et database?


Gjest Slettet-aNZFa3

Anbefalte innlegg

Videoannonse
Annonse

Velg Project -> Add References og dernest COM på dialogboksen som dukker opp, hvoretter du må dobbelklikke Microsoft ADO Ext. 2.8 for DDL and Security i listen. Lag så en ny klasse (eksempelvis med navn Database.cls), og lim inn følgende kode:

Klikk for å se/fjerne innholdet nedenfor
Imports System.Data.OleDb

 

Public Class Database

 

    ' Ulike hendelser du kan legge til

    Public Event Opened()

 

    ' Referanser til den underliggende Access-database

    Public Connection As OleDbConnection

    Public Provider = "Microsoft.Jet.OLEDB.4.0"

 

    Public Sub New(ByVal NewDatabase As String, ByVal Template As String)

 

        Dim Catalog As New ADOX.Catalog(), oCommand As OleDbCommand = Nothing

        Dim Query As String, Queries() As String

 

        ' Databasen må i utgangspunktet være tom - slett tidligere databaser

        If IO.File.Exists(NewDatabase) Then

            IO.File.Delete(NewDatabase)

        End If

 

        Try

            ' Forsøk å lage databasen

            Catalog.Create(ConnectionString(NewDatabase))

        Catch Excep As System.Runtime.InteropServices.COMException

            Throw New Exception("Cannot create database.", Excep)

        Finally

            Catalog = Nothing

        End Try

 

        ' Hent alle spørringene/kommandoene

        Queries = Template.Split(";")

 

        Try

 

            ' Databasen er nå klar for åpning

            Open(NewDatabase)

 

            ' Eksekver kommandoene for å bygge opp databasens struktur

            For Each Query In Queries

                If Query.Length > 2 Then

                    oCommand = New OleDb.OleDbCommand(Query & ";", Connection)

                    oCommand.ExecuteNonQuery()

                    oCommand.Dispose()

                End If

            Next

 

        Catch ex As Exception

            Throw New Exception("Error in populating the database. Cannot execute query.", ex)

 

        Finally

            ' Rydd opp

            If Not (oCommand Is Nothing) Then

                oCommand.Dispose()

            End If

        End Try

 

    End Sub

 

    Public Sub New(ByVal ExistingDatabase As String)

        Open(ExistingDatabase)

    End Sub

 

    Private Function ConnectionString(ByVal FilePath As String)

 

        ' Lag tilkoblingsstreng (legg til flere egenskaper om nødv.)

        Return "Provider=" & Provider & ";" & _

                "Data Source=""" & FilePath & """;"

 

    End Function

 

    Public Sub Open(ByVal FilePath As String)

 

        ' Koble til databasen

        Connection = New OleDbConnection(ConnectionString(FilePath))

        Connection.Open()

 

        RaiseEvent Opened()

 

    End Sub

 

    Public Sub Close()

        Connection.Close()

    End Sub

 

End Class

Etter det kan du lage en ny database ved å deklarere Database-objektet:

Dim oDatabase As New Database("C:\Mappe\Fil.mdb", "CREATE TABLE ... (legg inn resten her)")
Lenke til kommentar
Gjest Slettet-aNZFa3

takker :)

 

EDIT: jeg skjønte ikke helt den siste koden der.

Endret av Slettet-aNZFa3
Lenke til kommentar
EDIT: jeg skjønte ikke helt den siste koden der.

8842376[/snapback]

Du bruker den når du skal lage databasen. NewDatabase er den ønskede filbanen til databasen som skal lages, mens Template bør inneholde (skjønt det ikke er nødvendig om du vil lage en HELT tom database) koden for å lage de ulike tabeller, indekser og relasjoner. Eksempelvis benyttet jeg følgende spørringer i et av mine prosjekter:

Klikk for å se/fjerne innholdet nedenfor
CREATE TABLE Events(
 EventID autoincrement constraint EventIDKey unique primary key,
 EventType integer,
 Message memo,
 Style text(255),
 SenderID integer,
 RecieverID integer,
 EventDate datetime,
 SessionID integer,
 IsLocal yesno
);
CREATE TABLE Nicknames(
 NickID autoincrement constraint NickIDKey unique primary key ,
 UserID integer,
 Nickname text(255),
 UseCount integer
);
CREATE TABLE Participants(
 PartID autoincrement constraint PartIDKey unique primary key,
 UserID integer,
 SessionID integer
);
CREATE TABLE Sessions(
 SessionID autoincrement constraint SessionIDKey unique primary key,
 StartDate datetime,
 CharSent integer,
 CharRecieved integer,
 LogID integer,
 InitiatorID integer,
 Participants integer,
 Events integer
);
CREATE TABLE Users(
 UserID autoincrement constraint UserIDKey unique primary key,
 Email text(255) constraint UserEmail unique,
 ResponseTime integer,
 ResponseCount integer,
 IsLocal yesno
);
CREATE TABLE Logs(
 LogID autoincrement constraint LogIDKey unique primary key,
 Path text(255),
 Lenght integer
);
CREATE INDEX SessionIndex ON Events (SessionID);
CREATE INDEX SessionIndex ON Participants (SessionID);
CREATE INDEX UserIndex ON Nicknames (UserID);
CREATE INDEX UserIndex ON Participants (UserID);

Lenke til kommentar
Gjest Slettet-aNZFa3

Sorry skjønte det fortsatt ikke helt, hvor skal jeg skrive inn den infoen?

I notisblokk og lagre den som .mdb fil?

Lenke til kommentar
I notisblokk og lagre den som .mdb fil?

8842601[/snapback]

Nei, men du kan godt lagre teksten annetsteds enn selve koden. Selv foretrekker jeg "Resources" (se i My Project), men det har ikke noe å si. Det vesentlige er at du faktisk sender teksten til New-prosedyren:

' Du kan benytte en ekstern fil i samme mappe

Dim sTemplate = IO.File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory & "DinFilHer.txt")

 

' Du kan òg benytte ressurser-funksjonaliteten

sTemplate = My.Resources.EtFeltHer

 

' Evt. kan du skrive inn hele teksten direkte

sTemplate = "CREATE TABLE Events(" & Environment.NewLine & _

" EventID autoincrement constraint EventIDKey unique primary key," & Environment.NewLine) ' Osv

 

' Til sist kan du skape databasen

Dim oDatabase As New Database("C:\Mappe\Fil.mdb", sTemplate)

 

' Men sTemplate kan godt være TOM.

Lenke til kommentar
men hvor legger jeg inn den koden

8842829[/snapback]

Der du vil programmet skal lage databasen. Eksempelvis i en knapps klikkehendelse (Button1_Click), eller når programmet starter (Form_Load blant annet) og databasefilen ikke allerede eksisterer (bruk IO.File.Exists() til å avgjøre dette). Husk at du ikke trenger å bruke HELE koden jeg gav deg - poenget var bare å vise de ulike måtene dette kunne gjøres på. Les kommentarene!

 

For øvrig, har du ikke en bok eller guide du kan se i? Det er virkelig å anbefale. En lærer ikke stort av å bare kopiere kode.

Lenke til kommentar

Jeg er av den oppfatning at databaser med fordel kan opprettes, designes og vedlikeholdes grafisk. Derfor ville jeg heller brukt GUI verktøyene for å lage både database og tabeller etc. Så ville jeg bare opprettet en forbindelse med databasen gjennom Visual Studio. Dermed får du både TableAdapters og Dataset ferdig til bruk. Nesten ingen programmering og alt virker helt glimrende

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...