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
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).
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
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 ClassAihe on jo aika vanha, joten et voi enää vastata siihen.