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 command
geplaatst op 04.06.2008, 23:40:22. Categorie: VB.NET 2008.
Omdat er zovaak vragen over gesteld worden op het forum, heb ik besloten om een Tip te geven hoe je je data kan: inlezen, ophalen, inserten en verwijderen met commands.

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
We gaan een merk en type toevoegen in de database.
Hier gaan we werken met een OleDbCommand.
Maak een nieuwe sub "Insert".

Code
  1. public sub dataInsert()
  2.         dim command as new OleDb.OleDbCommand
  3. end sub


Ik heb in één keer 'command' gedeclareerd. Dit gaat ervoor zorgen dat we een bepaalde SQL-opdracht kunnen uitvoeren. Ik zal nu een paar eigenschappen van 'command' instellen.

Code
  1. command.Connection = connetie
  2.         command.CommandText = "INSERT INTO tblCars (Merk, Model) VALUES ('" & txtMerk.Text & "', '" & txtType.Text & "')"


Ik geef opnieuw de connectie mee, het is natuurlijk allemaal net iets anders als het dataLezen gedeelte, vermits ik hier rechtstreeks met de database kan werken.
De commandText lijkt mij ook vrij duidelijk. Ik ga in de tabel tblCars in rij Merk en rij Model respectievelijk txtMerk.Text en txtType.Text inserten of invoegen.
Voeg ook deze zinnen toe aan de sub:

Code
  1. connetie.open()
  2.         command.ExecuteNonQuery()
  3.         connetie.close()


De ExcecuteNonQuery gaat voor de eigenlijke insert zorgen. Maar eerst moet je de connectie openen en nadien terug sluiten. Indien je dit niet doet, gaat je programma crashen.

Ga naar "Design Mode" en dubbelklik op de Button: "Insert" en voeg bij het click event deze regels toe:

Code
  1. dataInsert()
  2.         dataLezen()


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
Maak een nieuwe sub dataUpdate aan en kopiëer en plak de code van de sub dataInsert:

Code
  1. public sub dataUpdate()
  2.         dim command as new OleDb.OleDbCommand
  3.         command.Connection = connetie
  4.         command.CommandText = "INSERT INTO tblCars (Merk, Model) VALUES ('" & txtMerk.Text & "', '" & txtType.Text & "')"
  5.  
  6.         connetie.open()
  7.         command.ExecuteNonQuery()
  8.         connetie.close()
  9.     end sub


Vervang nu de String van command.CommandText in de correcte SQL-opdracht:

Code
  1. command.CommandText = "UPDATE tblCars SET Merk = '" & txtMerk.Text & "', Model = '" & txtType.Text & "' WHERE ID = " & txtId.Text


Ga naar 'Designer Mode' en dubbel klik op Button "Update" en voeg onderstaande code toe:

Code
  1. dataUpdate()
  2.         dataLezen()


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
Maak een nieuwe sub dataDelete aan en kopiëer en plak de code van de sub dataInsert (net zoals daarnet)

Vervang de String van command.CommandText in de correcte SQL-opdracht:

Code
  1. command.CommandText = "UPDATE tblCars SET Merk = '" & txtMerk.Text & "', Model = '" & txtType.Text & "' WHERE ID = " & txtId.Text


Ga naar 'Designer Mode' en dubbel klik op Button "Delete" en voeg onderstaande code toe:

Code
  1. dataDelete()
  2.         dataLezen()


En dat was de basis van data Inlezen, inserten, update en verwijderen. Als er nog dingen zijn die onduidelijk zijn of foutief zijn. Laat het mij dan gerust weten. Want dit is een lange post geweest :)
Indien jullie het project willen downloaden kan dat hier: http://hypenate...IBAccess.rar

Groetjes, Hypenate

Aantal keer bekeken: 2675

nieuwere artikelen | oudere artikelen


Reacties op dit artikel
  • Van ArComAr, geplaatst op 05.06.2008, 12:28:06: (ID: 67)
    Waarom werken op 2 methodes als het ook mogelijk is met 1 methode. Ik bedoel dan: als je een dataset gebruikt met een dataAdapter, dan heb je toch alles om automatisch te kunnen inserten/updaten/deleten. Dan moet je niet meer zitten kl**** met die commands.

    Commands daarentegen kunnen wel eens handig zijn, maar probeer het zoveel mogelijk op 1 manier te houden en te overwegen welke connectie je neemt.

    Voor een login gebruik je best een enkel oledbcommand want je moet enkel de gebruiker zijn gegevens inlezen. Met een dataset zou je alle gegevens inlezen en dat is dan performantieverlies en geheugenverkwisting.

    lijsten met waardes daarentegen die kan je best in een dataTables of dataset steken. dit zijn veel waardes dus gewoon rijen deleten, toevoegen of aanpassen wordt dan handiger. Ook voor het updated naar de database toe, en je kan dan databindings en datasources gebruiken waarnodig. datasources kan met de eerste mogelijkheid ook, maar het is makkelijker van dit dan te doen met een dataset of dataTable, ook voor de updates naar u tabel dan.

  • Van Hypenate, geplaatst op 05.06.2008, 12:37:23: (ID: 68)
    Ja, je kan op verschillende manieren te werk gaan.
    Ik kies altijd voor rechtstreeks met de database te werken bij die insert, update en delete. En de gevens plaats ik in een dataTable ivm dataSources enz.


 

 
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