Toon posts:

[VB] Waarde uit recordset gebruiken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb dit:
code:
1
2
Set PC_Temp_Rec = PC_Db.OpenRecordset("SELECT * FROM DATA WHERE ClosureDate >= #" & _
DTFrom.Value & "# AND ClosureDate <= #" & DTTill.Value & "# ORDER BY ProjectNumber")

Dit werkt want, dit print dan netjes de nummers van de projecten uit:
code:
1
2
3
4
Do Until PC_Temp_Rec.EOF
        lbOutput.AddItem PC_Temp_Rec!ProjectNumber
        PC_Temp_Rec.MoveNext
Loop

Maar hieronder moet out de waarde van RS(0) krijgen maar hij blijft 18. (18 is puur voor testen)
code:
1
2
3
4
5
Out = 18
Set RS = PC_Db.OpenRecordset("SELECT COUNT(* ) FROM SCORE WHERE ProjectNumber = 
'" & PC_Temp_Rec!ProjectNumber & "' AND Timeliness = 'N/A'")
Out = RS(0)
lbOutput.AddItem " Timeliness/Accessibility     " & Out



Wat doe ik hier verkeerd. Ik heb al de goede nummers in PC_Temp_Rec maar count werkt niet echt?

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Misschien die feature die al jaren in vb zit..

Eerst een movelast en movefirst doen.

..so be wary of any man who keeps a pig farm..


Verwijderd

Topicstarter
Op maandag 08 april 2002 18:50 schreef RobzQ het volgende:
Misschien die feature die al jaren in vb zit..

Eerst een movelast en movefirst doen.
Ik ben niet zo heel erg sterk op het gebied van VB.
Ik heb dit geprobeerd maar dit doet hetzelfde
code:
1
2
3
4
5
6
7
8
9
10
Out = 18
PC_Temp_Rec.MoveLast
PC_Temp_Rec.MoveFirst
Set RS = PC_Db.OpenRecordset("SELECT COUNT(*) FROM SCORE
WHERE ProjectNumber = '" & PC_Temp_Rec!ProjectNumber & "'
AND Timeliness = 'N/A'")
Out = RS(0)
            
          
lbOutput.AddItem " Timeliness/Accessibility     " & Out

Verwijderd

Ik wil niet vervelend doen maar in je Query doe je een count, dus je gaat records zitten tellen. Hoeveel records heb je in je DB staan. Zo snel gerekend denk ik 18 :)

Wat je moet doen is het volgende

SELECT [NAAM VAN JE VELD] FROM [TABELNAAM] WHERE ... = 'n/a'

En dan kan je de naam van je veld eruit halen. Met een count tel je alleen het aantal records die in je DB staan, en in jouw geval alleen de records die de waarde n/a hebben.

Is dit jouw probleem of zit ik nu scheel te kijken :?

Verwijderd

Topicstarter
Ik wil ook het aantal records hebben waar voor een bepaald projectnummer (PC_Temp_Rec!ProjectNumber) er in de tabel Timeliness de waarde 'N/A' staat.

Die count wil ik printen dus daarom deed ik
Out = RS(0)
lbOutput.AddItem " Timeliness/Accessibility " & Out

Het probleem is dat RS(0) niks toekent aan Out.

Verwijderd

Ah oke, soz:

SELECT count(id) AS teller WHERE .......

Out = objRs("teller")

Dit werkt wel!

Geen * gebruiken bij een count. Dat is weer performance verlies! Laat ff weten of het werkt :)

[GOEIE QUERY]
Set RS = PC_Db.OpenRecordset("SELECT COUNT(id!) AS teller FROM SCORE WHERE ProjectNumber = '" & PC_Temp_Rec!ProjectNumber & "'
AND Timeliness = 'N/A'")

Out = Rs("teller")

[?GOEIE QUERY]

Verwijderd

Topicstarter
Hmmm,
Op een of andere manier werkt het nog steeds niet. Krijg standaard nu 0, tenzij ik (voor de toekenning) er wat anders van maak dan wordt het dat.
Oftewel Out = RS("teller") doet niks (denk ik?)

Wat RobZQ eerder zei, kan dat wat zijn?

Moet ik ergens nog een loop om heen doen, omdat er meerdere projectnummers uit de PC_Temp_Rec!ProjectNumber komen?

Verwijderd

Topicstarter
Hmmm. Iemand nog met tips.

Ik krijg nu steeds de melding 'Run time error 3021' No current record.
code:
1
2
3
4
5
6
Set RS = PC_Db.OpenRecordset("SELECT COUNT(*) FROM SCORE
WHERE ProjectNumber = '" & PC_Temp_Rec!ProjectNumber & "'
AND Timeliness = 'N/A'")
Out = RS(0)

lbOutput.AddItem " Timeliness/Accessibility     " & Out

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:51

mulder

ik spuug op het trottoir

Dan heeft de recordset misschien geen records.
Doe het sowieso wat netter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Dim rst As Recordset
Dim sQuery As String
Dim iOut As Integer

  sQuery = "SELECT COUNT(*) As Teller FROM SCORE
WHERE ProjectNumber = '" & PC_Temp_Rec.Fields("ProjectNumber") & "'
AND Timeliness = 'N/A'"
  Set rst = PC_Db.OpenRecordset(sQuery)
  if Not rst.EOF then
    iOut = rst.Fields("Teller")
    lbOutput.AddItem " Timeliness/Accessibility     " & iOut
  end if

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Ok, Ik heb nu de code van hierboven gebruikt.
Ik krijg nog steeds de 3021 No current record melding.
Ik weet dat er wat in 'PC_Temp_Rec' zet want dat print ik uit.

Wat wordt er dan bedoeld met de 3021. Waar is geen record?

plz help

Verwijderd

Vang ff af je DB leeg is. Of te wel EOF.

Als je dit afvangt dan kan je zien of je query misschien in de mist gaat. En zo niet, dan zou ik eens een lesje leren debuggen.

Verwijderd

Topicstarter
Deze code werkt wel maar wanneer ik de query verander in
code:
1
2
3
4
5
6
7
8
 sQuery = "SELECT * FROM SCORE" 
    Set PC_SCORE_Rec = PC_Db.OpenRecordset(sQuery)
    PC_SCORE_Rec.MoveFirst
    Do Until PC_SCORE_Rec.EOF
      lbOutput.AddItem PC_SCORE_Rec!ProjectNumber ' & ","
 & PC_Temp_Rec!Hospital & "," & PC_Temp_Rec!TAO
      PC_SCORE_Rec.MoveNext
    Loop


deze
code:
1
sQuery = "SELECT * FROM SCORE WHERE ProjectNumber = '" & PC_Temp_Rec.Fields("ProjectNumber") & "'"

Dan krijg ik de 3021 error.

Deze werkt wel weer
code:
1
sQuery = "SELECT * FROM SCORE WHERE ProjectNumber = 1"

Dat snap ik niet, ik kan in de database zien dat er records zijn met de zelfde projectnummers.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:51

mulder

ik spuug op het trottoir

Bij de ene query zet je er singlequotes omheen -> ' dat duidt op een string. Moet niet.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
OK, bedankt allemaal. Tot hier werkt het nu (eindelijk)
code:
1
2
3
4
5
6
7
8
9
PC_Temp_Rec.MoveFirst
    
sQuery = "SELECT COUNT(*) FROM SCORE WHERE ProjectNumber IN
(" & PC_Temp_Rec.Fields("ProjectNumber") & ") AND
Timeliness = 'N/A'"
Set PC_SCORE_Rec = PC_Db.OpenRecordset(sQuery)
      
iOut = PC_SCORE_Rec(0)
lbOutput.AddItem iOut

Het enige probleem wat ik nu heb is dat hij telt hoe vaak het laatste projectnummer de waarde 'N/A' heeft staan in de tabel en niet van alle nummers.

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
In de code
code:
1
2
3
sQuery = "SELECT COUNT(*) FROM SCORE WHERE ProjectNumber IN
(" & PC_Temp_Rec.Fields("ProjectNumber") & ") AND
Timeliness = 'N/A'"

zorgt het stukje " & PC_Temp_Rec.Fields("ProjectNumber") & " ervoor dat alleen op het projectnummer van het huidige record van PC_Temp_Rec wordt geselecteerd, dat stukje moet je vervangen door de SQL syntax waarmee je PC_Temp_Rec opent en PC_Temp_Rec kan dan vervallen.

Volgens je eerste post zou de uiteindelijke query dan zoiets moeten zijn:
code:
1
2
3
4
5
SELECT COUNT(*)
FROM SCORE 
WHERE ProjectNumber IN
    (SELECT ProjectNumber FROM DATA WHERE ClosureDate >= #01-01-2001# AND ClosureDate <= #01-01-2002#)
    AND Timeliness = 'N/A'

Verwijderd

Topicstarter
Heel erg bedankt allemaal, bijna alles werkt nu.

Ik heb alleen nog het probleem dat ik de onderstaande code in een functie heb gezet (omdat er zon 450 variabelen zijn).
Maar iOut bestaat niet buiten de functie.
Hoe kan ik deze waarde teruggeven?

Dit is nu de totale code:
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
Public Sub GetInfo(ByVal Which As String)
On Error GoTo process_err
Dim tempstring As String

iOut = 0
tempstring = ""
PC_Temp_Rec.MoveFirst
Do Until PC_Temp_Rec.EOF
    tempstring = tempstring + "" & PC_Temp_Rec.Fields("ProjectNumber") & "" + ", "
    PC_Temp_Rec.MoveNext
Loop

PC_Temp_Rec.MoveFirst
Do Until PC_Temp_Rec.EOF
    sQuery = "SELECT COUNT(*) FROM SCORE WHERE
ProjectNumber IN (" & tempstring & ") AND " & Which
& ""   '(" & string  & ")
    Set PC_SCORE_Rec = PC_Db.OpenRecordset(sQuery)
    PC_Temp_Rec.MoveNext
Loop
iOut = PC_SCORE_Rec(0)
lbOutput.AddItem iOut


process_err:
Select Case (Err)
Case 3021 ' No current record
    iOut = 0
    Exit Sub
End Select
End Sub

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:51

mulder

ik spuug op het trottoir

Ten eerste: koop eens een boek over (vb)programmeren.
Zoek informatie over:
- definitie variablen (option explicit, scope)
- procedures, functies (results), byval, byref
code:
1
2
3
Private Function SomeFunction() As Integer
  SomeFunction = 1
End Function

oogjes open, snaveltjes dicht

Pagina: 1