Toon posts:

[VB/SQL] een variabele als veld van record*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een database programma'tje, en nu heb ik het volgende stukje script:

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
25
26
27
28
29
30
31
32
33
34
Function ScorePogingenUpdate(descore As String, naam As String, onderdeel As String)
    'On Error GoTo fout
    Dim score As String
    Dim pogingen As String
    Dim aantal As Integer
    Call Module1.setDb(db)
    If onderdeel = "aftrekken" Then
        score = "ascore"
        pogingen = "apogingen"
    ElseIf onderdeel = "optellen" Then
        score = "oscore"
        pogingen = "opogingen"
    Else
        score = "tscore"
        pogingen = "tpogingen"
    End If
    Set RS = db.OpenRecordset("SELECT'" & score & "','" & pogingen & "' FROM leerlingen WHERE naam = '" & naam & "'", dbOpenDynaset)
    If descore <= RS!score Then
        descore = RS!score
    End If
    aantal = RS!pogingen
    aantal = aantal + 1
        With RS
            .Edit
            .Fields(score).Value = descore
            .Fields(pogingen).Value = aantal
            .Update
            .Close
        End With
    GoTo Eind
fout:
    fbschap = MsgBox("Er heeft een fout plaats gevonden.", vbOKOnly, "Fout")
Eind:
End Function


Nu staat er in het midden RS!score, en hierbij is score een variabele, die herkend hij dus niet als veld en hij zegt dan ook dat hij het element niet in de collectie kan vinden. Hoe kan ik hem duidelijk maken, dat hij die score moet zien als een variabele zodat hij de waarde daaruit gaat gebruiken? Dit geldt ook voor RS!pogingen en bij het updaten van de database (.fields(score).value enzo)

BvD

[ Voor 12% gewijzigd door Verwijderd op 07-01-2003 21:14 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:40
Door aan dat veld in uw SQL Query een alias te geven:

code:
1
strSql = "SELECT " &  score & " AS score ...."

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 07 January 2003 @ 21:13:
Door aan dat veld in uw SQL Query een alias te geven:

code:
1
strSql = "SELECT " &  score & " AS score ...."
met die querie is niets mis, daar loopt hij wel doorheen, maar RS!score <- score is hier een variabele, maar mijn programma denkt dat het een veld moet zijn. Hij moet echter de waarde van de variabele gebruiken om het veld te selecteren.

-- edit---
Ow , verkeerd gelezen, ik zag AS niet staan. Even testen
--/edit---

[ Voor 13% gewijzigd door Verwijderd op 07-01-2003 21:16 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:40
Verwijderd schreef op 07 januari 2003 @ 21:15:
[...]


met die querie is niets mis, daar loopt hij wel doorheen, maar RS!score <- score is hier een variabele, maar mijn programma denkt dat het een veld moet zijn. Hij moet echter de waarde van de variabele gebruiken om het veld te selecteren.


Doe maar eens met die alias.... ;)
Als je die query bv zo in query analyzer oid laat uitvoeren, dan zul je zien dat het DBMS een naam zal geven aan die score - variable in uw query. Iets van Expr(1000) ofzo.
Als je zelf een naam specifieert (dmv die alias), kan je de waarde van dat veld in uw recordset gaan ophalen door die alias te gebruiken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hmz, Hij blijft nu niet meer hangen echt hangen op die stukjes, maar hij pakt nu niet de waarde uit het veld wat ik wil selecteren, maar die vult hij nu met de waarde van de string.

dus de waarde van RS!Score is "oscore" terwijl ik juist een waarde uit het veld oscore wil halen. Dit heeft hij ook met pogingen enzo. In de querie doet hij dus dit:

select "oscore" AS score, "opogingen" AS pogingen FROM leerling ..........

Iemand een id?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:40
Verwijderd schreef op 07 January 2003 @ 21:25:
Hmz, Hij blijft nu niet meer hangen echt hangen op die stukjes, maar hij pakt nu niet de waarde uit het veld wat ik wil selecteren, maar die vult hij nu met de waarde van de string.

dus de waarde van RS!Score is "oscore" terwijl ik juist een waarde uit het veld oscore wil halen. Dit heeft hij ook met pogingen enzo. In de querie doet hij dus dit:

select "oscore" AS score, "opogingen" AS pogingen FROM leerling ..........

Iemand een id?


Je moet natuurlijk de inhoud van die variable in je query meenemen:

pseudo-code
code:
1
2
int variable1 = 10;
string strSql =  "SELECT " + variable1 + " AS score FROM tabel";

Als je hier nu de waarde van score wilt gaan uithalen, ga je iedere keer 10 krijgen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ja maar dat doe ik toch hier:

code:
1
2
3
4
5
6
7
8
9
10
If onderdeel = "aftrekken" Then
        score = "ascore"
        pogingen = "apogingen"
    ElseIf onderdeel = "optellen" Then
        score = "oscore"
        pogingen = "opogingen"
    Else
        score = "tscore"
        pogingen = "tpogingen"
    End If


of zie ik dat verkeerd?

Misschien dat we elkaar verkeerd begrijpen:

Ik wil dus eerst een waarde uit de database halen, om die vervolgens te vergelijken. Is die hoger dan de nieuwe waarde dan moet hij gewoon de oude waarde aanhouden. Anders moet hij vernieuwd worden en geupdate worden in de database. Maar ik wil graag 1 functie schrijven voor drie rekenonderdelen, die ik meegeef in de argumenten aan de functie.
Ik moet dus niet telkens dezelde waarde hebben....

[ Voor 55% gewijzigd door Verwijderd op 07-01-2003 21:34 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:40
Ja, maar wat wil je dan doen?
Is ascore een naam van een kolom in je tabel?
Dan moet je die quotes die je rond die variable zet bij het opbouwen van uw query weglaten.

Dus:
code:
1
strSql = "SELECT " + score + " AS score FROM tabel"

Dan ziet jouw query er als volgt uit:
code:
1
SELECT ascore AS score FROM tabel

en dan gaat hij die ascore ook als kolom gaan herkennen.
Zet je er echter quotes rond:
code:
1
SELECT "ascore" ...

Dan gaat hij dat aanzien als een string constante.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 07 January 2003 @ 21:34:
Ja, maar wat wil je dan doen?
Is ascore een naam van een kolom in je tabel?
Dan moet je die quotes die je rond die variable zet bij het opbouwen van uw query weglaten.

Dus:
code:
1
strSql = "SELECT " + score + " AS score FROM tabel"

Dan ziet jouw query er als volgt uit:
code:
1
SELECT ascore AS score FROM tabel

en dan gaat hij die ascore ook als kolom gaan herkennen.
Zet je er echter quotes rond:
code:
1
SELECT "ascore" ...

Dan gaat hij dat aanzien als een string constante.
Ah, dus zo werkt dat :) Oke dat werkt dus nu , kep nu alleen nog met het updaten een klein probleempje nl:

.Field(score).Value = descore , waarbij (score) dus die variabele is, maar dat element kan hij niet vinden, pakt hij hier misschien ook quote's mee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:40
Wat zit er in descore?
Bevat die een naam van een kolom? Gewoon een getal?

Als je daar de naam van een kolom inzet, gaat dat niet werken. Je zult die waarde moeten ophalen en dan het record met die waarde updaten.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 07 January 2003 @ 21:42:
Wat zit er in descore?
Bevat die een naam van een kolom? Gewoon een getal?

Als je daar de naam van een kolom inzet, gaat dat niet werken. Je zult die waarde moeten ophalen en dan het record met die waarde updaten.
Ah , kep het opgelost. Er zat een integere waarde in van 25 , maar ik heb er .Fields("score").Value = descore van gemaakt, en dan pakt hij nog steeds het oscore, waarvan score een alias is.
Merci :)

[ Voor 7% gewijzigd door Verwijderd op 07-01-2003 21:46 ]

Pagina: 1