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 :
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.
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.
En dan rechtsonder in het vak 'Properties' dubbelklik je op de eigenlijke connectiestring zodat hij helemaal geselecteerd is en dan rechtermuisknop > Kopiëren.
Zo, Nu ga je de code kijken en plaats je deze regel onder Public Class Form1:
Je moet wel even de quotes herschikken en het laatste stukje wegdoen.
We gaan hier ook in één keer onze dataTable maken.
Ook de OleDbConnection gaan we hier aanmaken
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:
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:
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.
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:
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:
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.
3. Insert
We gaan een merk en type toevoegen in de database.
Hier gaan we werken met een OleDbCommand.
Maak een nieuwe sub "Insert".
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.
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:
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:
Voor gemakshalve gaan we terug 'Designed Mode' en dubbelkliken we op de Button "Leegmaken".
In de click sub plaatsen we:
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.
3. Update
Maak een nieuwe sub dataUpdate aan en kopiëer en plak de code van de sub dataInsert:
Vervang nu de String van command.CommandText in de correcte SQL-opdracht:
Ga naar 'Designer Mode' en dubbel klik op Button "Update" en voeg onderstaande code toe:
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.
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:
Ga naar 'Designer Mode' en dubbel klik op Button "Delete" en voeg onderstaande code toe:
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
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.