Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Database

Aki_26 [22.03.2012 18:42:44]

#

Terve,

ongelmia. Teen Windows Forms Application ohjelman ja lisää siihen service-based Databasen. Teen ohjelman loppuun ja lyön sen nippuun Installshield ohjelmalla, kun asennan sen toiselle koneelle ohjelma herjaa tietokannasta.

Miten pystyn korjaamaan ko. virheen, jotta pystyisin asentamaan ohjelman myös toiselle koneelle?

Vai onko olemassa jokin toinen database, millä pitäisi tehdä?

Kiitos vastauksista

-Aki

neau33 [22.03.2012 22:16:45]

#

Moi Aki_26!

Jos et ole erikseen säätänyt connectionstring ominaisuuksia niin ohjelman ja tietokantatiedoston (.mdf) tulee sijaita samassa hakemistossa (oletus) ja SQL Serverin pitää olla käynnissä (service-based database vaatii SQL Serverin).

Aki_26 [23.03.2012 17:34:10]

#

Kiitos ohjeista. En ole Visual Basic:llä tehnyt paljoa ohjelmaa, Delphillä enemmän.

Voisitko auttaa, miten pystyn tekemään taulukkopohjaisen tietokannan (paikallisen tietokannan)

Kannattaako tehdä Accesilla vai millä?

-Aki

neau33 [29.03.2012 14:11:48]

#

Moi taas Aki_26!

Esim Visual Basic 2010 Express sisältää tietokantojen käsittelyyn niin helppokäyttöiset velhot (Wizards), ettei minua kiinnosta alkaa niiden käyttöä esittelemään tyyliin: valitse siitä ja siitä valikosta se ja se valinta...

Voit käyttää paikallisen tietokannan luomiseen yhtä hyvin Accessia kuin SQL Serveriä. Access-tietokannan käyttö on tietenkin paljon rajoitetumpaa, kuin SQL Server-tietokannan, mutta jos tietokantaa käyttää kerrallaan vain yksi käyttäjä eikä tietokantaan ole tarkoitus tallentaa mitään kovin ihmeellistä dataa niin Access soveltuu tarkoitukseen aivan hyvin.

Laitan tähän yksinkertaisen esimerkin siitä miten voi luoda uuden Access tietokannan, luoda tietokantaan uuden taulun sarakkeineen, lisätä taulukkoon tietueen, tuoda taulukon tiedot datasettiin ja asettaa taulukko datagridview objektin datalähteeksi suoraan koodista.

Imports ADOX 'COM-Referenssi: Microsoft ADO Ext. 2.8 for DDL and Security
Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class Form1

   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

      'asettaan muuttujan 'dbPath' arvoksi polku siihen kansioon,
      'jossa ohjelma sijaitsee fyysisesti ja lisätään tiedostonimi
      Dim dbPath As String = Application.StartupPath + "\tietokanta.mdb"

      'Mikäli muuttujan osoittaman tiedostopolun tiedostoa ei löydy
      If Dir(dbPath) = String.Empty Then
         'Alustetaan uusi ADOOX.Catalog objekti
         Dim cat As New ADOX.Catalog()
         'Luodaan uudsi tyhjä tietokanta
         cat.Create("Provider=Microsoft.Jet.OLEDB.4.0; " + _
         "Data Source=" + dbPath + ";Jet OLEDB:Engine Type=5")
         'tuhotaan ADOOX.Catalog objekti
         cat = Nothing
      End If

      'Alustetaan muuttuja 'connstr' ja asetetaan arvoksi
      'Microsoft Access Jet.OLEDB yhteys ja datalähde...
      Dim connstr As String = _
      "PROVIDER=Microsoft.Jet.OLEDB.4.0;" + "Data Source =" + dbPath

      'Alustetaan uusi OleDbConnection objekti
      'ja asetetaan objektin yhteysmerkkijono
      Dim conn As OleDbConnection = New OleDbConnection(connstr)

      'Alustetaan DataTable objekti
      Dim testTable As New DataTable
      'Asetetaan merkkijonomuuttujan arvo
      Dim tableName As String = "Testitaulu"

      Try
         'Avataan tietokantayhteys
         conn.Open()

         'haetaan yhteyden SchemaTable objektin
         'taulukkotiedot 'testTable' objektiin
         testTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
         New Object() {Nothing, Nothing, tableName, "TABLE"})

         'Alustetaan tyhjä OleDb komento objekti
         Dim command As OleDbCommand = Nothing

         'Jos testTable objekti ei sisällä yhtään tietokantataulukkoa...
         If testTable.Rows.Count = 0 Then
            'asetetaan kommennon arvoksi taulukon
            'luova OleDb komento saraketietoineen
            command = New OleDbCommand( _
            "CREATE TABLE [" + tableName + "]" + _
            "([ID] INT IDENTITY(1, 1), " + _
            "[Etunimi] TEXT(20) NOT NULL, " + _
            "[Sukunimi] TEXT(20) NOT NULL, " + _
            "[Osoite] MEMO NOT NULL, " + _
            "[Postinumero] TEXT(10) NOT NULL, " + _
            "[Postitoimipaikka] TEXT(50) NOT NULL, " + _
            "[Puhelin] TEXT(15), " + _
            "[Sähköposti] MEMO, " + _
            "[Merkinnät] MEMO, " + _
            "CONSTRAINT [pk_ID] PRIMARY KEY (ID))", conn) 'esim.
            'Suoritetaan komento
            command.ExecuteNonQuery()
         End If
         'Tuhotaan testi objekti
          testTable = Nothing
         'Asetetaan muuttujan 'query' arvoksi SQL-lause
         Dim query As String = "SELECT * FROM " + tableName
         'Alustetaan uusi DataSet objekti
         Dim ds As New DataSet
         'Asetetaan OleDb datasovittimelle kyselylause ja yheysobjekti
         Dim da As New OleDbDataAdapter(query, conn)
         'lisätään datasovittimen avulla DataSet objektiin
         'kyselylauseen osoittama tietokantataulu
         da.Fill(ds, tableName)

         'Jos DataSet objektiin tuotu tietokantataulu ei sisällä tietoa
         If ds.Tables(tableName).Rows.Count = 0 Then

            'Asetetaan uusi OleDb komento
            command = New OleDbCommand("INSERT INTO [" + tableName + "]" + _
            "([Etunimi], [Sukunimi], [Osoite], [Postinumero], " + _
            "[Postitoimipaikka], [Puhelin], [Sähköposti], " + _
            "[Merkinnät]) VALUES('Matti','Mainio','Matinkatu 1'," + _
            "'12121','Kotikaupunki','041-1234567'," + _
            "'matti.mainio@kotiposti.fi','Melkoisen viisas mies')", conn)   'esim.
            'Suoritetaan komento
            command.ExecuteNonQuery()
            'tuodaan taulukkotiedot  uudelleen DataSet objektiin
            da.Fill(ds, tableName)
         End If

         'Asetetaan DataGridView1 objektin dataläheeksi
         'DataSet objektin datataulun tableName tiedot
         DataGridView1.DataSource = ds.Tables(tableName)

         'Suljetaan tietokantayhteys
         conn.Close()
      Catch ex As Exception
         MsgBox(ex.Message) : Exit Sub
      End Try

   End Sub

End Class

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta