VBiB/ACCB.net - Visual Basic in België | .net Ineta User Group  
(login to hide)
Hoofdmenu

Advertenties

Het Computer Winkeltje HCW


Evenementen

Hypenate


Deze WebLog is van Hypenate.



Naar WebLog Startpagina

Categorieën toewijzen

Gastenboek

Je kunt een bericht achterlaten in het Gastenboek.

RSS feed

RSS FeedKlik op het logo om de RSS feed van deze WebLog te bekijken / gebruiken:

meer WebLogs

Bekijk ook andere WebLogs op deze site, of start er zelf één!

...meer WebLogs

nieuwere artikelen | oudere artikelen

Access database met parameters
geplaatst op 05.06.2008, 17:27:10. Categorie: VB.NET 2008.
Ik heb de commentaar van Arcomar in overweging genomen en bij deze heb ik besloten om een Tip te geven hoe je je data kan: inlezen, ophalen, inserten en verwijderen met parameters.

We maken een nieuw 'Windows Form' project aan.
Plaats hierop volgende compontenten:
-1 DataGridView: dgvAutos
-2 Labels: lblMerk, lblType, lblId
-3 Textboxen: txtMerk, txtType, txtId(ReadOnly)
-4 Buttons: btnLeegmaken, btnInsert, btnUpdate, btnDelete
Like so :

http://hypenate.x-plose.be/vbib/accessDatabase/accessLayout.jpg

1. Inlezen
We gaan nu de database toevoegen aan ons project.
De database die ik gebruik kan je hier downloaden: http://hypenate...base/db1.rar (Unpakken met winRAR of iets dergelijks) Eerste en vooral is het sterk aangeraden om de database in je Bin\Debug map te plaatsen in mijn geval is dat: "C:\Users\pC\Documents\Visual Studio 2008\Projects\VBIBAccess\VBIBAccess\bin\Debug".

Dan rechtermuisknop op je projectnaam > Add > Existing Item in de 'Solution Explorer.

http://hypenate.x-plose.be/vbib/accessDatabase/accessDbToevoegenProject.jpg

En dan zoek je je database die in je Bin/Debug staat. Wel even zien dat hij "All Files" of "Database Files" zoekt.
Dan vink je "Tables" aan en klik je op Finish. Hij maakt vanzelf een dataSet aan...Deze kan verwijderd worden.
Om de connectieString op te vragen doe je het volgende:
In de 'Server Explorer', rechtermuisknop op je database > Properties.

http://hypenate.x-plose.be/vbib/accessDatabase/accessConnStrOpvragen.jpg

En dan rechtsonder in het vak 'Properties' dubbelklik je op de eigenlijke connectiestring zodat hij helemaal geselecteerd is en dan rechtermuisknop > Kopiëren.

http://hypenate.x-plose.be/vbib/accessDatabase/accessConnStrKopieren.jpg

Zo, Nu ga je de code kijken en plaats je deze regel onder Public Class Form1:

Code
  1. dim connectieString as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\pC\Documents\Visual Studio 2008\Projects\VBIBAccess\VBIBAccess\db1.mdb"


Je moet wel even de quotes herschikken en het laatste stukje wegdoen.
We gaan hier ook in één keer onze dataTable maken.

Code
  1. dim dtAutos as new DataTable


Ook de OleDbConnection gaan we hier aanmaken

Code
  1. dim connetie as new OleDb.OleDbConnection(connectieString)


Bij de 'connectie' heb ik de connectieString meegegeven die we twee regels hoger hadden gedeclareerd

We maken een nieuwe Sub procedure "dataLezen" en voegen deze zin toe:

Code
  1. dim daAutos as new OleDb.OleDbDataAdapter("SELECT * FROM tblCars", connectie)


Ik geef de SQL-opdrachtmee (alles selecteren van tabel tblCars) dat moet uitgevoerd worden en de connectie.
De dataAdapter is eigenlijk een tussenstuk van je database en je programma. Je kan het zien als, indien je een iet wat abstract denkvermogen hebt, de stroomkabel tussen je PC en het stroomnet.
Dus momenteel zou de dataAdapter onze gegevens bezitten. Om deze door te geven naar onze dataTable gebruiken we de .Fill optie.
Voeg deze 2 zinnen toe aan de sub:

Code
  1. dtAutos.Clear()
  2.         daAutos.Fill(dtAutos)


Nu bezit onze dataTable de gegevens. En de clear gaat ervoor zorgen dat als we inlezen, inserten/updaten/verwijderen en terug inlezen, dat we de database geen 2 keer gaan laden. (Als je juist wil weten wat ik bedoel zet je deze zin even op commentaar voor je gaat testen bij de insert).
Ga nu naar 'Designer Mode' en dubbel klik op het form, zodat je in de Visual Studio voor ons de 'Load' sub aanmaakt.
Hierin plaatsen we onze sub 'DataLezen()' en plaatsen we de dataSource van onze DataGridView.

Code
  1. dataLezen()
  2.         dgvAutos.DataSource = dtAutos


Als we ons project opstarten, zie je dat onze DataGridView gevuld is met gegevens. Ik geef even een overzicht van het hele project tot nu toe:

Code
  1. public class Form1
  2. dim connectieString as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\pC\Documents\Visual Studio 2008\Projects\VBIBAccess\VBIBAccess\db1.mdb"
  3. dim dtAutos as new DataTable
  4. dim connetie as new OleDb.OleDbConnection(connectieString)
  5.  
  6. public sub dataLezen()
  7.         dim daAutos as new OleDb.OleDbDataAdapter("SELECT * FROM tblCars", connetie)
  8.         dtAutos.Clear()
  9.         daAutos.Fill(dtAutos)
  10. end sub
  11.  
  12. private sub Form1_Load(byval sender as System.object, byval e as System.EventArgs) handles mybase.Load
  13.         dataLezen()
  14.         dgvAutos.DataSource = dtAutos
  15.     end sub
  16. end class


2. Databindings
Databindings zorgen ervoor dat in de textvakken, de waardes (kunnen) komen die er geselecteerd worden in een combox of iets dergelijks. In ons geval de DataGridView.
In onze "Load" sub plaatsen we de DataBindings:

Code
  1. txtId.DataBindings.Add("Text", dtAutos, "ID", false, DataSourceUpdateMode.Never)
  2.         txtMerk.DataBindings.Add("Text", dtAutos, "Merk", false, DataSourceUpdateMode.Never)
  3.         txtType.DataBindings.Add("Text", dtAutos, "Model", false, DataSourceUpdateMode.Never)


De uitleg: Het type is Text vanuit de dataTable dtAutos, en de kolom die je eruit wil is "ID" (de zelfde naam als in de database dus).
Als je je project nu start, kan je zien dat als je wat selecteerd uit je database de TextBox'en de overeenkomstige waardes bevatten!
Tot zover het Inlezen van gegevens en de databindings hiervan.

http://hypenate.x-plose.be/vbib/accessDatabase/accessGeladen.jpg

3. Insert Om een insert te doen met parameters, is het niet nodig om een nieuwe subprocedure te maken.
Ga naar 'Designer Mode' en dubbelklik op de Button "Insert" en voeg onderstaande code toe.

Code
  1. daAutos.DeleteCommand.Connection = connectie
  2.         daAutos.DeleteCommand = new OleDb.OleDbCommand("DELETE * FROM tblCars WHERE ID = @ID")
  3.  
  4.         daAutos.DeleteCommand.Parameters.Add("@ID", OleDb.OleDbType.VarChar).Value = cint(txtId.Text)
  5.  
  6.         connectie.open()
  7.         daAutos.DeleteCommand.ExecuteNonQuery()
  8.         connectie.close()
  9.  
  10.         dataLezen()


De tweede regel gaat het Insert command zetten, zoals je ziet geef ik de 2 kolommen mee waar hij bepaalde waardes (values) moet insteken.
Zoals je kan staan er voor die Values een @-teken, dit wordt gedaan als mijn gebruik gaat maken van zogenaamde 'placeholders'.
Zoals je ziet vul ik de parameters in, en "vul" ik de placeholders (@Merk en @Model) in die we hadden geplaatst bij onze InsertCommand met respectievelijk txtMerk.Text en txtType.Text. Ik geef tevens ook het "type" van @Merk en @Model mee, hiermee bedoel ik of het String (VarChar) of Integer (Numeriek) is. Deze moet evereen komen gelijk je je de Access database je veld-types hebt gekozen.
Daarna open ik de connectie, ik voel een ExecuteNonQuery() uit, dit is het moment waarop hij de eigenlijke opdracht gaat uitvoeren en de waardes in onze database gaat plaatsen. Achteraf sluit ik de connectie terug en ga'k de gegevens opnieuw inlezen zodat onze dataGridView direct wordt geupdate.
Voor gemakshalve gaan we terug 'Designed Mode' en dubbelkliken we op de Button "Leegmaken".
In de click sub plaatsen we:

Code
  1. for each ctrl as Control In me.Controls
  2.         if TypeOf ctrl is TextBox then
  3.                 ctrl.Text = string.empty
  4.         end if
  5. next


Dit geheel terzijde, maar maakt het net iets makkelijker :).
Run nu het programma, klik op de Button "Leegmaken", en voeg dan de de vakken "Merk en Type" in. Klik dan op de Button "Insert".
Als je nu terug naar beneden scrolt zal je zien dat je merk en type toegevoegd zijn.

http://hypenate.x-plose.be/vbib/accessDatabase/accessInsert.jpg

3. Update
Ga naar 'Designer Mode' en dubbelklik op de Button "Update".
Bij de 'Click' sub voegen we een gelijkaardige code toe als bij Insert.

Code
  1. daAutos.UpdateCommand.Connection = connectie
  2.         daAutos.UpdateCommand = new OleDb.OleDbCommand("UPDATE tblCars SET Merk = @Merk, Model = @Model WHERE ID = @ID")
  3.  
  4.         daAutos.UpdateCommand.Parameters.Add("@Merk", OleDb.OleDbType.VarChar).Value = txtMerk.Text
  5.         daAutos.UpdateCommand.Parameters.Add("@Model", OleDb.OleDbType.VarChar).Value = txtType.Text
  6.         daAutos.UpdateCommand.Parameters.Add("@ID", OleDb.OleDbType.integer).Value = cint(txtId.Text)
  7.  
  8.         connectie.open()
  9.         daAutos.UpdateCommand.ExecuteNonQuery()
  10.         connectie.close()
  11.  
  12.         dataLezen()


Het woord "InsertCommand" is nu "UpdateCommand" geworden en het SQL-command is veranderd.
En dan de placeholder @ID die word ingevuld. Let op dat deze van het type Integer is omdat onze kolom in de database het veld-type 'AutoNummering' heeft.

Als je het programma nu runt, een rij selecteerd, de gegevens aanpast (en dus niet op "Leegmaken" klikt, want dan zal het programma crashen. Ik hou het allemaal zo simpel mogelijk) en dan op "Update" klikt. Word je aanpassing doorgevoerd.

http://hypenate.x-plose.be/vbib/accessDatabase/accessUpdate.jpg

4. Delete
Ga naar 'Designer Mode' en dubbelklik op de Button "Delete".
Bij de 'Click' sub voegen we een gelijkaardige code toe als bij Insert en Update:

Code
  1. daAutos.DeleteCommand.Connection = connectie
  2.         daAutos.DeleteCommand = new OleDb.OleDbCommand("DELETE * FROM tblCars WHERE ID = @ID")
  3.  
  4.         daAutos.DeleteCommand.Parameters.Add("@ID", OleDb.OleDbType.VarChar).Value = cint(txtId.Text)
  5.  
  6.         connectie.open()
  7.         daAutos.DeleteCommand.ExecuteNonQuery()
  8.         connectie.close()
  9.  
  10.         dataLezen()


Indien jullie het project willen downloaden kan dat hier: http://hypenate...rameters.rar

Groetjes, Hypenate

Aantal keer bekeken: 2479

nieuwere artikelen | oudere artikelen


Reacties op dit artikel

 

 
Postnuke - ADODB Database - PHP 4/5 - pnPhpBB2 - Hosting bij Openminds
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno 21-12-2000)
vbib.be gestart op 1/03/06 (extra vanaf 1/09: vbnet.be en vbdotnet.be)
VBiB is gerelateerd met wintips.be

Nieuwsbrief RSS Feed: backend.php