Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[VB 2005] updaten in access database

have-fun
13 antwoorden
  • ik heb een access database aan m'n project gekoppelt en heb een listbox met de gerbuikers in m'n formulier(zie plaatje).

    [img:19b6b63573]http://www.have-fun.nl/database.jpg[/img:19b6b63573]

    Nu wil ik als je op het knopje drukt 3 erbij dat hij dan in de colom geld er 3 bij telt.

    Heb al in de help en op internet gezocht maar weet iemand waar ik een goede nederlandse uitleg kan vinden of is er iemand die kan vertellen hoe dit moet
  • Eerst doe je dit:
    [code:1:6598ab382c]
    geld = txtGeld.text
    [/code:1:6598ab382c]

    Om de waarde in de database te veranderen geef je deze opdracht:
    [code:1:6598ab382c]
    'voor een integer in database dit:
    INSERT INTO tabel_naam (geld) VALUES (" + geld + ")

    'als het een string moet zijn dit:
    INSERT INTO tabel_naam (geld) VALUES ('" + geld + "')[/code:1:6598ab382c]

    voor je textbox doe je dan gewoon dit erbij:
    [code:1:6598ab382c]txtGeld.text = geld[/code:1:6598ab382c]
  • oke, dat maakt alles een beetje duidelijk

    maar ik krijg fouten met de query:
    Error: Name 'INSERT' is not declared.
    Error: Name 'INTO' is not declared.

    hoe krijg ik dit eruit?
  • [quote:234f615506="have-fun"]oke, dat maakt alles een beetje duidelijk

    maar ik krijg fouten met de query:
    Error: Name 'INSERT' is not declared.
    Error: Name 'INTO' is not declared.

    hoe krijg ik dit eruit?[/quote:234f615506]
    Door de opdracht als een string door te geven, en er een update van te maken, aangezien ik denk dat je je formulier vult vanuit de database…
    [code:1:234f615506]
    "UPDATE tabel_naam SET geld = " + geld + " WHERE <unieke id> = " + <unieke id>
    [/code:1:234f615506]
    of
    [code:1:234f615506]
    "UPDATE tabel_naam set geld = '" + geld + "' WHERE <unieke id> = " + <unieke id>
    [/code:1:234f615506]
    Daarbij denk ik dat je dit niet helemaal wilt. Als ik het goed begrijp, wil je bij de waarde die al in het tekstvak "geld" staat, 3 optellen. Om even bij je plaatje te blijven: -11,35 + 3
    Laten we er even vanuit gaan dat je voor geld het veldtype "Valuta" hebt gekozen.
    Je moet dan een variabele van het type Decimal declareren, en daar de waarde van je tekstveld in plaatsen. Tel er vervolgens 3 bij op, en sla deze waarde dan op in je database. Vergeet dan niet om aan te geven om welk record het gaat.
    In code:[code:1:234f615506]
    Dim geld As Decimal
    geld = CType(txtGeld.Text, Decimal)
    [/code:1:234f615506]
    En dan de update statements.

    Mocht je nou voor een ander datatype hebben gekozen (Double, Single, of iets dergelijks) dan kun je waar nu Decimal staat vervangen door het betreffende Type.
  • hij geeft nu een foutmelding als ik op de knop druk:
    Conversion from string "UPDATE gebruikers SET geld = '" to type 'Double' is not valid.

    dit is de code die ik heb:
    [code:1:ae35f5b080] Dim geld As Decimal
    Dim updatetest As String
    geld = CType(txtGeld.Text, Decimal)
    updatetest = "UPDATE gebruikers SET geld = '" + geld + "' WHERE id = " + IdTextBox.Text + ""
    [/code:1:ae35f5b080]

    en in de database is geld een valuta, maar wat is er dan fout?
  • Probeer het eens met [code:1:7075e82b23]geld.ToString()[/code:1:7075e82b23]Dus
    [code:1:7075e82b23]updatetest = "UPDATE gebruikers SET geld = '" + geld.ToString + "' WHERE id = " + IdTextBox.Text + "" [/code:1:7075e82b23]
  • Dan probeer je een string op te slaan in een double-veld en dat geeft net zo hard een foutmelding. Ik denk dat de decimaalkomma in de valutastring in de weg zit. Dat moet een punt zijn in de query. Ik doe dat meestal met Replace en in de query dus zonder 'quotes':
    [code:1:af343c8d15]
    updatetest = "UPDATE gebruikers SET geld = " + Replace(geld.ToString, ",", ".") + " WHERE id = " + IdTextBox.Text
    [/code:1:af343c8d15]
    Ik haal de laatste tekens weg, want daarmee zeg je hetzelfde als .
  • ik heb nu deze code:
    [code:1:e3d60e959b] Dim geld As String
    Dim updatetest As String
    geld = CType(txtGeld.Text, Decimal)
    geld = geld + 3
    updatetest = "UPDATE gebruikers SET geld = " + Replace(geld.ToString, ",", ".") + " WHERE id = " + IdTextBox.Text
    [/code:1:e3d60e959b]
    Hij geeft geen foutmelding meer maar als ik op de knop druk gebeurt er niks ook niet als het opnieuw opstart is er niks in de database veranderd.

    ik had er daarom txtGeld.Text = geld onder de update gezet, dan zie je wel dat hij telkens 3 erbij telt maar het komt niet in de database
  • [quote:d50d922688="have-fun"]hij geeft nu een foutmelding als ik op de knop druk:
    Conversion from string "UPDATE gebruikers SET geld = '" to type 'Double' is not valid.[/quote:d50d922688]
    Hier maak ik uit op dat je de query op een Connection-object execute (de query aan de database geven om hem uit te voeren), maar dat zie ik in je code niet terug. Met alleen de query in een variabele stoppen ben je er nog niet.
  • oke, en wat moet er nog meer mee dan?
  • Aan de database geven. Ik doe in vba altijd:

    Set conn = CreateObject("ADODB.Connection")
    conn.Open connectionstring ' (hier moet een geldige connectionstring staan)
    conn.Execute "UPDATE Table1 SET …"

    maar dat zal in vb.NET wel weer anders moeten, bovendien heb je daar al een connection actief omdat je een listbox vult, die kun je prima hergebruiken. Google weet altijd wel raad met dat soort dingen: "vb.net connection adodb execute query" ofzwiets.
  • ik heb net uitgevonden dat je met visual basic express query's kan aanmaken en dat je die dan als een functie aan kan roepen het is dus gelukt.
    Maar ik veronderstel dat hij in de debug na het afsluiten de database niet overneemt maar gewoon leeg gooit. hij veranderd wel telkens maar als ik hem opnieuw opstart is hij weer normaal
  • [quote:710237d8b7="have-fun"]ik heb net uitgevonden dat je met visual basic express query's kan aanmaken en dat je die dan als een functie aan kan roepen het is dus gelukt.
    Maar ik veronderstel dat hij in de debug na het afsluiten de database niet overneemt maar gewoon leeg gooit. hij veranderd wel telkens maar als ik hem opnieuw opstart is hij weer normaal[/quote:710237d8b7]
    Vooruit, ik doe ook nog een poging ;)
    Wat Paulus zegt klopt. Je geeft de opdracht waarschijnlijk nog niet aan de database door. Want ook als je aan het debuggen bent, worden de wijzigingen als het goed is aan de database doorgegeven.
    Anyway. Waarschijnlijk heb je al een connectieobject voor de verbinding met je database. Je zal dan alleen nog een OleDbCommand object moeten hebben, die de update query voor je uitvoert. In code:[code:1:710237d8b7]
    Dim cmd As New System.Data.OleDb.OleDbCommand()

    <de code om je updatetekst te maken>

    cmd.Connection = <je eigen connectieobject>
    cmd.CommandType = CommandType.Text
    cmd.CommandText = <updatestring>
    cmd.ExecuteNonQuery()
    [/code:1:710237d8b7]
    En dan nog wat foutafhandeling toevoegen natuurlijk :)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.