23. september 2004 - 15:56Der er
71 kommentarer og 2 løsninger
Hjælp til programering med access database
Hej,
Jeg er for første gang begyndt at arbejde med databaser i Visual Basic .NET 2003. Nogle der kn give mig en lille start guide eller noget i den retning. ?
Hvis du opretter et nyt konsolprojekt, og laver en lille bitte database i access, som du så lægger i din bin-folder under dit projekt (folderen kommer først frem når du har bygget første gang).
Så kan du lave en kode som denne :
Imports System.Web Imports System.Data.OleDb Module Module1 Sub Main() ' ny forbidelse Dim connection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TestDB.mdb;User Id=admin;Password=;") ' en kommando Dim command As OleDbCommand = New OleDbCommand("SELECT * FROM TblSomething", connection) ' en adapter Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(command) ' et dataset Dim ds As DataSet = New DataSet("SomeDataSet")
Try ' fyld dataset vha. adapteren adapter.Fill(ds) ' pil lidt ved data ds.Tables(0).Rows(0)("SomeString") = "En ny tekst" ' opret commandbuilder Dim commandBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter) ' og opdater adapter.Update(ds) Catch ex As Exception ' bare udskriv fejl til skærmen Console.WriteLine(ex.Message) End Try
' vent på at der trykkes Console.Read() End Sub End Module
hov.... det var ikke meningen det skulle sendes afsted allerede :o)
ovenstående er baseret på at der som sagt ligger en database i bin-folderen, og den database jeg har benyttet hedder TestDB.mdb. Den indeholder en enkelt tabel TblSomething, og i den tabel er defineret Id som autonummer SomeString som Text SomeInteger som number og SomeDate som DateTime
Koden sørger for : 1) at forbinde til databasen 2) hente alt hvad der ligger i TblSomething 3) Opdatere feltet SomeString i række nummer 1 4) Og opdatere igen.
Det er så et eksempel hvor der bruges et dataset, men det er der ingen der siger at du skal.
Desuden benyttes en commandbuilder, som gør det muligt at få generet de statements der er nødvendige for at opdatere i databasen. (insert, update og delete).
Du kan gøre alt hvad du vil med de data der er læst op i datasettet (opdatere, slette og tilføje), og kaldet til Update(ds) skulle gerne gå godt pga. commandbuilderen.
Håber du kunne bruge det til et eller andet... Jeg bliver nødt til at løbe, men er herude igen senere.
Class MainClass Public Shared Sub Main(ByVal args As String()) Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=") con.Open Dim cmd As OleDbCommand = New OleDbCommand ("SELECT * FROM T1", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim f1 As Integer = CType(rdr(0), Integer) Dim f2 As String = CType(rdr(1), String) Console.WriteLine(f1 & " " & f2) End While con.Close End Sub End Class
GUI app med datagrid og dataset:
Imports System Imports System.Data Imports System.Data.OleDb Imports System.Drawing Imports System.Windows.Forms
Namespace DefaultNamespace Public Class MainForm Inherits Form Private dg As DataGrid Private save As Button Private con As OleDbConnection Private da As OleDbDataAdapter Private cb As OleDbCommandBuilder Private ds As DataSet
Public Shared Sub Main Dim fMainForm As New MainForm fMainForm.ShowDialog() End Sub
Public Sub New() MyBase.New Me.InitializeComponent End Sub
Private Sub InitializeComponent() con = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;UserId=admin;Password=") con.Open da = New OleDbDataAdapter("SELECT * FROM T1", con) cb = New OleDbCommandBuilder(da) da.UpdateCommand = cb.GetUpdateCommand ds = New DataSet da.Fill(ds, "T1") dg = New DataGrid save = New Button SuspendLayout dg.Location = New Point(50, 50) dg.Size = New Size(300, 200) dg.SetDataBinding(ds, "T1") save.Location = New Point (50, 300) save.Size = New Size (100, 25) save.Text = "Save" AddHandler save.Click, AddressOf SaveClick ClientSize = New Size(400, 400) Controls.Add(dg) Controls.Add(save) Text = "Main Form" ResumeLayout(false) End Sub
Sub SaveClick(ByVal sender As Object, ByVal e As EventArgs) da.Update(ds, "T1") ds.AcceptChanges dg.Refresh End Sub End Class End Namespace
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=") con.Open Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO T1 VALUES(123,'ABC')", con) cmd.ExecuteNonQuery
eller via DataSet (både snepnets eksempel og mit GUI eksempel opdaterer faktisk databasen)
okay... men så vil jeg meget gerne have en forklaring på følgendekode, som du siger kan bruges til at indsætte data i dabasen...
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=") con.Open Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO T1 VALUES(123,'ABC')", con) cmd.ExecuteNonQuery
hvor ligger den, og bruger du den her direkte ? Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
Man kan faktisk godt bruge double quotes i databasen, men da VB.NET bruger double quotes til strenge, så virker det bedst/nemmest/pænest med single quotes
nu ser det sådan ud, men den kommer stadig med fejlen....
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO T1 VALUES('123','ABC')", con) cmd.ExecuteNonQuery()
hvis du bruger det første eksempel jeg skrev, får du skrevet en fejlmeddelelse ud i konsollen, hvis der er noget der kikser... så kan du se hvad der er galt, eller poste det her, så vi kan give en hånd.
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("SELECT FROM T1')", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim info1 As Integer = CType(rdr(0), Integer) Dim info2 As String = CType(rdr(1), String) ' gør noget med data End While
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("SELECT FROM T1 WHERE info2='ABC')", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim info1 As Integer = CType(rdr(0), Integer) Dim info2 As String = CType(rdr(1), String) ' gør noget med data End While
hvorfor kommer den med en fejl når jeg skriver således ?
Dim fornavn As String = TextBox1.Text Dim efternavn As String = TextBox2.Text
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO T1 VALUES(fornavn,efternavn)", con) cmd.ExecuteNonQuery()
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO T1 VALUES('" + fornavn + "','" + efternavn + "')", con) cmd.ExecuteNonQuery()
Dim fornavn As String = TextBox1.Text Dim efternavn As String = TextBox2.Text
Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("INSERT INTO T1 VALUES(" + fornavn + "','" + efternavn + "')", con) cmd.ExecuteNonQuery()
The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.
Dim soeg As String = textbox3.text Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Christopher de Haas\My Documents\Visual Studio Projects\app1\WindowsApplication1\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("SELECT FROM T1 WHERE info2='" + soeg + "'", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim info1 As Integer = CType(rdr(0), Integer) Dim info2 As String = CType(rdr(1), String) MsgBox(info1 & info2) End While
skulle det ikke virker sådanhar ?, når det i databasen er tekst i begge felter ?
Dim soeg As String = textbox3.text Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Christopher de Haas\My Documents\Visual Studio Projects\app1\WindowsApplication1\Test.mdb;User Id=admin;Password=") con.Open() Dim cmd As OleDbCommand = New OleDbCommand("SELECT FROM T1 WHERE info2='" + soeg + "'", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim info1 As Integer = CType(rdr(0), Integer) Dim info2 As String = CType(rdr(1), String) MsgBox(info1 & info2) End While
da.Update(ds, "T1") // gem ændrede data i databasen ds.AcceptChanges // nulstil ændringer så næste også kun gemmer ændringer dg.Refresh // refresh data
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.