Springen naar inhoud


- - - - -

Selectie Deel Accesstabel In Datagridview Weergeven

vb.net

  • Log in a.u.b. om te beantwoorden
Er zijn 12 reacties in dit onderwerp

#1 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 12 maart 2019 - 12:31

Hallo

eerst even in mensentaal: ik heb een form gemaakt die in een combobox alle klanten weergeeft uit een tabel dbadres van een access database met de naam db2019.mdb.
Nu wil ik van die klant die ik selecteer door hem aan te klikken, de facturen zien (en niet alle facturen dus van alle klanten). Dus ik wil van deze klant uit een andere tabel dbfact2 van dezelfde accessdatabase de records selecteren die gelinkt zijn aan deze klant (via een select statement).
Nu lukt het me wel om in een datagridview alle facturen (van alle klanten ) te zien, maar niet om enkel die uit de selectie te zien. Ik werk dus via oleDataAdapters..en sql statements...ik ben vrij nieuw in vb.net (schreef vroeger in vb5 waar met recordsets gewerkt werd maar dit werkt niet meer in vb.net).

Visual Basic Code:

	'automatisch gegenereerde OleDbSelectCommand1 code van de initialisatie
	'
Me.OleDbSelectCommand1.CommandText = "SELECT 	dbadres.*" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "FROM 	dbadres" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "ORDER BY naam"

'Mijn code:

  Private Sub cboKlantnaam_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboKlantnaam.SelectedIndexChanged
	selnaam = cboKlantnaam.Text

	End Sub  

"als ik de klant heb geselecteerd krijgt de variabele selnaam een waarde, als voorbeeld neem ik waarde Agrokom bvba"

Private Sub frmHoofd2019_Load(sender As Object, e As EventArgs) Handles MyBase.Load
	DsAdres1.Clear() "=> is dus een dataset die gecreeerd werd door de oleadapter1 te maken en dan generate dataset, en de tabel dbadres volledig weergeeft
	DsFact21.Clear() "=> is dus een dataset die gecreeerd werd oor de oleadapter2 te maken en dan generate dataset, en de tabel dbfact2 volledig weergeeft (als eerste test=maar hier wil ik dus uiteindelijk de selectie)

	OleDbDataAdapter1.Fill(DsAdres1) '=> vult dus de combobox met alle waarden van dbadres
   OleDbDataAdapter2.Fill(DsFact21)  '=> vult dus de dbgridview 1 met alle waarden van dbfact2


End Sub

"om te testen heb ik een load button toegevoegd met een extra datagridview2 die zou moet gevuld worden met de selectie van een oleAdapter5;

Private Sub loadbutton_Click(sender As Object, e As EventArgs) Handles loadbutton.Click
Dim dsSelKlant As DataSet
  
'OleDbSelectCommand5
		Me.OleDbSelectCommand5.CommandText = "select dbfact2.* from dbfact2 where (dbfact2.klant=" & selnaam & ") order by datumuitvoering "
	'OleDbDataAdapter5
	'Dsfactklant1

	Me.Dsfactklant1.DataSetName = "DSFACTKLANT"
	Me.Dsfactklant1.SchemaSerializationMode System.Data.SchemaSerializationMode.IncludeSchema


	Dsfactklant1.Clear()
	OleDbDataAdapter5.Fill(Dsfactklant1) => dit commando zou dus de datagridview2 moeten vullen, maar ik krijg steeds foutmelding OleDbException was unhandled en als Additional information:syntaxisfout (operator ontbreekt) in query-expressie (dbfact2.klant=Agrokom bvba).


	End Sub


Wat doe ik fout?




#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 13 maart 2019 - 09:56

Bericht bekijkenJannekeVloesberg, op 12 maart 2019 - 12:31, zei:

OleDbException was unhandled en als Additional information:
syntaxisfout (operator ontbreekt) in query-expressie (dbfact2.klant=Agrokom bvba).
Wat doe ik fout?

Literal string waarden in een query moeten quoted zijn. Dus : 'Agrokom bvba' i.p.v. Agrokom bvba.
Dat is de syntax fout.

De betere manier om dat op te lossen is niet zelf te quoten, maar het gebruik van een DbParameter (in jouw geval een OleDbParameter).


Verder hoop ik dat "Agrokom bvba" de PK is van de rij in je tabel met klanten en dus een FK in je tabel met facturen?

#3 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 13 maart 2019 - 12:27

bedankt het werkt nu!

#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 13 maart 2019 - 15:34

Bericht bekijkenJannekeVloesberg, op 13 maart 2019 - 12:27, zei:

bedankt het werkt nu!
En heb je de DbParameter gebruikt?

#5 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 13 maart 2019 - 15:45

nee ik heb gewoon in de string selnaam er quotes aangehangen

dus code is nu

selnaam="'" &cboklantnaam.text&"'"

#6 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 13 maart 2019 - 15:47

ik weet niet hoe zo'n dbparameter werkt

#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 14 maart 2019 - 18:07

Bericht bekijkenJannekeVloesberg, op 13 maart 2019 - 15:45, zei:

nee ik heb gewoon in de string selnaam er quotes aangehangen

dus code is nu

selnaam="'" &cboklantnaam.text&"'"
Dat is niet goed.

#8 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 14 maart 2019 - 18:24

Bericht bekijkenJannekeVloesberg, op 13 maart 2019 - 15:47, zei:

ik weet niet hoe zo'n dbparameter werkt
Dan kan je dat best uitzoeken.

#9 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 14 maart 2019 - 18:27

ok, tips waar ik duidelijke info vind hierover?

#10 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 15 maart 2019 - 14:06

Ik heb het als volgt geprobeerd maar krijg foutmelding "De opdrachttekst is niet ingesteld voor het opdrachtobject."
Visual Basic Code:

Const Sql = "select dbfact2.* from dbfact2 where (dbfact2.klant=@selnaam) order by nrfact1 "
'selnaam = " '" & cboKlantnaam.Text & "'"

Using mycommand As New OleDb.OleDbCommand(Sql, OleDbConnection1)
mycommand.Parameters.AddWithValue("@selnaam", cboKlantnaam.Text)

OleDbConnection1.Open()
mycommand.ExecuteNonQuery()

End Using



#11 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 16 maart 2019 - 09:35

Bericht bekijkenJannekeVloesberg, op 15 maart 2019 - 14:06, zei:

Ik heb het als volgt geprobeerd maar krijg foutmelding "De opdrachttekst is niet ingesteld voor het opdrachtobject."
SQL Code:
Const Sql = "select dbfact2.* from dbfact2 where (dbfact2.klant=@selnaam) order by nrfact1 "

De  OleDb Data Provider gebruikt geen named parameters, maar  positionele parameters die worden aangeduid in de query string door een vraagteken als placeholder.
Zie ook OleDbCommand.Parameters bij Remarks en OleDbParameter bij Remarks
Dus:
SQL Code:
Const Sql = "SELECT dbfact2.* FROM dbfact2 WHERE dbfact2.klant = ? ORDER BY nrfact1 "

Noteer dat bij meerdere parameters de volgorde belangrijk is!

Ook nog een opmerkingetje: ik ben niet zo een voorstander van SELECT * omdat ik graag zie wat er wordt binnengehaald (liefst enkel wat je nodig hebt).
Hint: je kan de SQL statements genereren i.p.v. ze handmatig in te tikken (en dan kan je ze ook onmiddellijk testen).

#12 JannekeVloesberg

JannekeVloesberg

    Starting Developer

  • Leden
  • 26 berichten
    Laatst bezocht 19 mrt 2019 17:46

Geplaatst op 16 maart 2019 - 16:38

de insertstring werkt nu maar dat is toevoegen (addwithvalue); hoe werkt dit in update set? zie verder in updatestring: wat als ik daar de variabelen door? wil vervangen, ik wil geen rijen toevoegen maar bestaande totalen vervangen

Visual Basic Code:
insertstring = "INSERT INTO dbnewfact(nrfact, nrfact2, nrfact1, " &
"klant, datumfactuur, datumuitvoering, " &
"produkt, aantal, eenheid, prijspereenheid, totaalperprodukt," &
" totaalperproduktinclbtw, totaalfactuur, totaalfactuurinclbtw," &
" btw, bedragbtw)" &
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
Using mycommand As New OleDb.OleDbCommand(insertstring, OleDbConnection1)
mycommand.Parameters.AddWithValue("nrfact", nrfact)
mycommand.Parameters.AddWithValue("nrfact2", nrfact2)
mycommand.Parameters.AddWithValue("nrfact1", nrfact1)
mycommand.Parameters.AddWithValue("klant", klant)
mycommand.Parameters.AddWithValue("datumfactuur", datumfactuur)
mycommand.Parameters.AddWithValue("datumuitvoering", datumuitvoering)
mycommand.Parameters.AddWithValue("produkt", produkt)
mycommand.Parameters.AddWithValue("aantal", aantal)
mycommand.Parameters.AddWithValue("eenheid", eenheid)
mycommand.Parameters.AddWithValue("prijspereenheid", prijspereenheid)
mycommand.Parameters.AddWithValue("totaalperprodukt", totaalperprodukt)
mycommand.Parameters.AddWithValue("totaalperproduktinclbtw", totaalperproduktinclbtw)
mycommand.Parameters.AddWithValue("totaalfactuur", totaalfactuur)
mycommand.Parameters.AddWithValue("totaalfactuurinclbtw", totaalfactuurinclbtw)
mycommand.Parameters.AddWithValue("btw", btw)
mycommand.Parameters.AddWithValue("bedragbtw", bedragbtw)
OleDbConnection1.Open()
mycommand.ExecuteNonQuery()
OleDbConnection1.Close()
End Using

' telkens het totaal (factuur,factuurinclbtw ) aanpasse in dbnewfact
''
Dim updatestring As String
''wijzig de totalen in dbnewfact lijn per lijn en shcrijf dan alles definitef weg naar dbnewfact via update
updatestring = "UPDATE dbnewfact SET dbnewfact.totaalfactuur= " & totaalfactuur &
", dbnewfact.totaalfactuurinclbtw= " & totaalfactuurinclbtw & ""
'", dbnewfact.bedragbtw= " & totaalbedragbtw & " "
Me.OleDbSelectCommand7.CommandText = updatestring
DsNewfact1.Clear()
OleDbDataAdapterNewfact.Fill(DsNewfact1)
 
myselstr = "select dbnewfact.* from dbnewfact"
Me.OleDbSelectCommand7.CommandText = myselstr
DsNewfact1.Clear()
OleDbDataAdapterNewfact.Fill(DsNewfact1)



#13 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1129 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 17 maart 2019 - 19:11

Bericht bekijkenJannekeVloesberg, op 16 maart 2019 - 16:38, zei:

de insertstring werkt nu maar dat is toevoegen (addwithvalue); hoe werkt dit in update set?
zie verder in updatestring: wat als ik daar de variabelen door? wil vervangen, ik wil geen rijen toevoegen maar bestaande totalen vervangen

De Add in AddWithValue heeft niets met insert of update te maken.
Het voegt een DbParameter met Value toe aan een DbCommand.
En kan zowel gebruikt worden voor een insert- als een update- als een delete- als een select-command.
Overigens is het beter om het Command 1 keer te maken, en de parameters 1 x toe te voegen met DbCommand.Parameters.Add (i.p.v. AddWithValue) en telkens als nodig de Value toe te kennen aan de juiste parameter.

Overigens kan je een typed dataset maken en al de nodige commands en parameters genereren.





Ook met taq vb.net voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)