Toon posts:

[VB.NET] Uitlezen database waarden in een textbox*

Pagina: 1
Acties:
  • 702 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik heb een vrij theoretische vraag. Ik ben bezig met een programma waarmee ik waarden uit een access database wil uitlezen. De databaseconnectie werkt prima. Ik heb een adapter en een dataset. Nu wil ik de gegevens van de dataset in een textbox laten uitlezen. Ik heb toch al redelijk veel literatuur doorgenomen zowel thuis als het inet, en allemaal gaan ze over databinding. Dit wil ik helemaal niet! Ik wil gewoon het resultaat van mijn query terug zien in een textbox. Is dat mogelijk en zo ja hoe zou de code eruit moeten zien? (ik hoef geen datagrid ed)..

Een voorbeeldje zou aardig zijn SVP.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:20
Ja, dat kan.
Gewoon:
code:
1
textBox1.Text = DataTable1.Rows[0][0].ToString()

bv.
Of anders mbhv een DataReader
Of, als je query slechts 1 resultaat teruggeeft, dan moet je eens kijken naar de method ExecuteScalar.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Zou dit kunnen werken?

Dim inch As Double = CDbl(comboInch.Text)
Dim galwaarde As Double = txtuitvoer.Text

Dim myConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Documents and Settings\xp\Mijn documenten\Visual Studio 2005\Projects\test\database.mdb")
Dim myScalarQuery As String = "SELECT '" & inch & "' FROM WH Where Galons = '" & galwaarde & "'"
Dim myCommand As New OleDbCommand(myScalarQuery, myConnection)
myCommand.Connection.Open()
myCommand.ExecuteScalar()
txtbox1.Text = myCommand.ExecuteScalar

Krijg nog altijd foutmelding gegevenstypen die niet kloppen.
"Gegevenstypen komen niet overeen in criteriumexpressie."
In de database heb ik nummerieke waarden (long integer) voor inch en galwaarde. :/

Hoe kan ik deze fout herleiden?

[ Voor 38% gewijzigd door Verwijderd op 08-01-2006 23:32 ]


Verwijderd

Zoals Whoami al zegt, gebruik gewoon datareader:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim inch As Double = CDbl(comboInch.Text)
Dim galwaarde As Double = txtuitvoer.Text

dim myconnection as oledbconnection
dim connectionstring as string = "PROVIDER=Microsoft.Jet.oledb.4.0;DATA SOURCE=je db"

dim oledbcommand as oledbcommand
dim oledbstring as string = "SELECT " & inch & " FROM WH WHERE Galons = " & galwaarde 

dim datareader as oledbdatareader

myconnection = new oledbconnection(connectionstring)
myconnection.open()
oledbcommand = new oledbcommand(oledbstring, myconnection)
datareader = oledbcommand.executereader()

do while datareader.read()

textbox.text = datareader("columnnaam")

loop

myconnection.close()
datareader.close()


zo moet het wel werken..hopelijk is het wat je bedoelt

[ Voor 6% gewijzigd door Verwijderd op 08-01-2006 23:49 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Tip, gebruik de [norml]
code:
1
 en
[/] tags :)


Visual Basic:
1
Dim myScalarQuery As String = "SELECT '" & inch & "' FROM WH Where Galons = '" & galwaarde & "'"
Dat werkt niet nee. Print myScalarQuery eens, en je zult versteld staan.
Je selecteert om te beginnen niet het veld inch, maar de waarde die inch heeft (hint: quotes)
Verder zeg je dat galwaarde een long is, waarom zet je die dan ook tussen quotes :?

Tot slot, bouw geen querystrings op, maar gebruik geparametriseerde query's. Waarom? Daarom!

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Mephix
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2025
nog een tip.. zoek eens naar SqlHelper. Nette class wat een hoop gepruts scheelt. Het wordt dan zo eenvoudig als DataSet dsMyDataSet = SqlHelper.ExecuteDataSet(connstring, querystring of storedproc naam, parameters);

[ Voor 8% gewijzigd door Mephix op 09-01-2006 10:36 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
Mephix schreef op maandag 09 januari 2006 @ 10:34:
nog een tip.. zoek eens naar SqlHelper. Nette class wat een hoop gepruts scheelt. Het wordt dan zo eenvoudig als DataSet dsMyDataSet = SqlHelper.ExecuteDataSet(connstring, querystring of storedproc naam, parameters);
Het is denk ik handig om erbij te vermelden dat die niet standaard in DotNet zit maar in het "Data Access Application Block" van Microsoft.

http://msdn.microsoft.com...n-us/dnpag2/html/daab.asp

En volgens mij ondersteund dat ding geen OleDb, dus heeft hij er niet echt wat aan.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Nee, maar zo'n SqlHelper class tik je natuurlijk zo in elkaar.

Verwijderd

Topicstarter
Hallo,

Ik heb het voorbeeld van Jelle geprobeerd, maar daar krijg ik een foutmelding bij de columnaam:

textbox.text = datareader("columnnaam")
IndexOutOfRange was unhandled.

Ik begrijp niet goed waarom je hier een columnaam geeft, ik wil immers gewoon het resultaat terug? je geeft nu een parameter die ik niet kan herleiden eigenlijk..

Over die quotes, die fout zie ik wel in inmiddels :D

[ Voor 11% gewijzigd door Verwijderd op 09-01-2006 13:31 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
Verwijderd schreef op maandag 09 januari 2006 @ 13:29:
Ik begrijp niet goed waarom je hier een columnaam geeft, ik wil immers gewoon het resultaat terug? je geeft nu een parameter die ik niet kan herleiden eigenlijk..
De datareader geeft 1 of meerdere rijen met informatie terug, met de kolomnaam kun je de gewenste waarde van een kolom uit de datareader ophalen, dit kan ook door de index aan te geven: textbox.text = datareader(0)

Als je 1 waarde wilt hebben (eerste waarde van de eerste kolom) kun je toch het beste executescalar gebruiken.

textbox.text = oledbcommand.executescalar.toString()

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
Dim inch As Double = CDbl(comboInch.Text)
        Dim galwaarde As Double = txtuitvoer.Text

        Dim myConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Documents and Settings\xp\Mijn documenten\Visual Studio 2005\Projects\test\fdatabase.mdb")
        Dim myScalarQuery As String = "SELECT " & inch & " FROM WH WHERE Galons = " & galwaarde
        Dim myCommand As New OleDbCommand(myScalarQuery, myConnection)
        myCommand.Connection.Open()
        Textbox.Text = myCommand.ExecuteScalar


Ik krijg nu geen foutmelding, maar hij geeft steeds de waarde van mijn combobox (in de textbox) ipv een databasewaarde. Wat doe ik fout?

[ Voor 10% gewijzigd door Verwijderd op 09-01-2006 14:41 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
Verwijderd schreef op maandag 09 januari 2006 @ 14:00:
Ik krijg nu geen foutmelding, maar hij geeft steeds de waarde van mijn combobox (in de textbox) ipv
een databasewaarde. Wat doe ik fout?
Dat is ook wat je selecteert:
code:
1
SELECT " & inch & " FROM WH WHERE Galons = " & galwaarde


ipv Inch zul je de veldnaam moeten noemen die je wilt selecteren dus:
code:
1
SELECT kolomnaam FROM WH WHERE Galons = " & galwaarde

Verwijderd

Topicstarter
ik kan niet gewoon op de waarde van inch laten zoeken?

als inch nou een kolomnaam zou zijn?

[ Voor 103% gewijzigd door Verwijderd op 09-01-2006 14:08 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
Verwijderd schreef op maandag 09 januari 2006 @ 14:05:
ik kan niet gewoon op de waarde van inch laten zoeken?

als inch nou een kolomnaam zou zijn?
SELECT inch FROM WH WHERE Galons = " & galwaarde

of bedoel je dit?

SELECT Galons FROM WH WHERE inch = " & inch

[ Voor 14% gewijzigd door Serpie op 09-01-2006 14:11 ]


Verwijderd

Topicstarter
sleutel = galons
kolommen zijn inches.. bij elke inch staat weer een nummer.
inches geven de breedte van een pijpleiding aan <- dan kun je dat beter plaatsen.

Ik wil zoeken op de volgende waarden:
- galons (txtuitvoer/ galwaarde)
- inch (combotxt), deze waarden bereken ik niet maar staan gewoon ingegeven in de dropdown

Volgens mij had dan dit de query moeten zijn:

"SELECT " & inch & " FROM WH WHERE Galons = " & galwaarde

maar dat werkt dus niet hehe..

[ Voor 22% gewijzigd door Verwijderd op 09-01-2006 14:27 ]


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
Verwijderd schreef op maandag 09 januari 2006 @ 14:23:
Volgens mij had dan dit de query moeten zijn:

"SELECT " & inch & " FROM WH WHERE Galons = " & galwaarde

maar dat werkt dus niet hehe..
Aha nu is het wat duidelijker dan wordt je query dus:

SELECT * FROM WH WHERE Galons = " & galwaarde

En gebruik dan de datareader om het resultaat uit te vragen:
Datareader.Read()

Gebruik de inch om de juiste kolom in de datareader uit te vragen:
txtbox1.Text = Datareader(comboInch.Text)

[ Voor 12% gewijzigd door Serpie op 09-01-2006 14:47 . Reden: Fout antwoord ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gebruik nou eens code-tags Sapato.

En de opbouw van je query klopt nog steeds niet. Probeer eerst eens een goede query te maken (door hem in te typen in je Access database), zet hem daarna in je code.

Serpie: SELECT * is nogal overbodig niet? Hij hoeft maar één veld te hebben.

[ Voor 17% gewijzigd door kenneth op 09-01-2006 14:34 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 05-02 21:24
kenneth schreef op maandag 09 januari 2006 @ 14:34:
Serpie: SELECT * is nogal overbodig niet? Hij hoeft maar één veld te hebben.
Je hebt gelijk, ik raak ook helemaal van slag van die rare tabel :)

Sapato: Advies voor de volgende keer, gewooon kolomnamen gebruiken en geen nummers..

"SELECT [" & inch & "] FROM WH WHERE Galons = " & galwaarde

Met de blokhaken geef je aan dat het om een kolom gaat en niet om de waarde, zo moet hij werken volgens mij.

Verwijderd

Topicstarter
ok mensen hij werkt.. thnx Serpie!

VRIENDELIJK BEDANKT VOOR AL UW INZET..

Waar kunnen de bloemen heen?

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het werkt, maar heb je enig idee waarom?

Volgens mij begin ik het nu niet te begrijpen :X
Visual Basic:
1
"SELECT [" & inch & "] FROM WH WHERE Galons = " & galwaarde

Zo selecteer je niet het veld inch, maar het veld met de naam die de combobox inch heeft.

Snap ik het nu niet :?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
Dat wil ik toch ook? Je raakt een beetje in de war door het strooien van alle begrippen denk ik..

inch = combobox

Ik zoek vervolgens op het veld die is ingegeven in de combobox. Die waarde is voor mij de theoretische inch, maar niet voor visual basic en access


------------------


Ik had nog wel 1 vraagje. Sommige waarden bij de velden zijn leeg in access (is zo bedoeld). Als ik dus een galwaarde en een inch geef komt hij op een foutmelding uit. Kan ik dit opvangen in de code? Of moet ik in de access database bij alle lege waarden een 0 invoeren..

[ Voor 58% gewijzigd door Verwijderd op 09-01-2006 15:29 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ah zooooooooooo, ik snapte er al helemaal geen fluit van.
Maar je kolommen heten dus 1, 2, 3, enz :?
Dan lijkt me een key/value tabel wat netter:
inch gallon
   1      2
   2      3
   3      5
   4      8
   5     10
  10     15
  15     39

Anders moet je je datamodel aanpassen voor iedere nieuwe inch-waarde

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
Het is een beetje lastig uitleggen waarom ik dat zo doe, maar elke inch geeft zijn eigen set met gegevens. Dus ik kan dat alle inches met hun set gegevens of in 1 tabel gooien (zoals ik nu heb gedaan) of ik maak van elke inch een aparte tabel waarde de inch een sleutel wordt (jouw manier).
Vraag het jezelf maar niet af denk ik, want er zit veel theorie achter :S

Verder..
Wat bedoel je precies hiermee:
Anders moet je je datamodel aanpassen voor iedere nieuwe inch-waarde

[ Voor 28% gewijzigd door Verwijderd op 09-01-2006 15:37 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Nieuw veld toevoegen enzo :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Topicstarter
hehe,

ik voeg niks bij. Ik wil alleen maar uitlezen.
Pagina: 1