Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

500 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

27 april 2024, 08:29:33

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: Query  (gelezen 16145 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
Query
« Gepost op: 9 november 2009, 20:04:03 »
Bericht 1 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:11-09-2007
 Aan:PeterMsgID:3557.1
 Onderwerp:QueryForum:ws-nlcomputer
Hoi Peter,
Wil je me nog een keer helpen? Ik moet databaserecords dagelijks bijwerken met gedownloade koersbestanden. Soms ontbreken er databaserecords en soms koersbestanden. Dit maakt het werken met Do . . . . Loop niet erg doelmatig. Daarom heb ik een query gemaakt welke er als volgt uitziet:
datQueryBijwerkenSlotKoers.DatabaseName = "E:\VB\Prive\Beleggen\frmInvestor.KoersVoorspelling.mdb"
frmInvestor.datQueryBijwerkenSlotKoers.RecordSource = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = Left$(FondsenMatrix(i, 1), 8)"
datQueryBijwerkenSlotKoers is een data control.
Daarbij krijg ik twee fouten:
1) de fout dat FondsenMatrix(i, 1) niet gedefinieerd is, hoewel de UBounds en Lbounds goed zijn en er een Dim aan voorafgegaan is.
2) error 91.
In de betreffende FondsenMatrix staan de koersen per regel opgeslagen en met een lus zoek ik het databaserecord en het koersbestand per aandeel en datum bij elkaar, waarbij de records en koersbestanden per datum gesorteerd zijn en binnen de datum op aandeel.
Wat kan hier fout aan zijn? Ben je het er mee eens dat een query voor dit probleem de beste oplossing is?



Bericht 2 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:11-09-2007
 Aan:Jan101477MsgID:3557.2
 Onderwerp:QueryForum:ws-nlcomputer
Hoi Jan,

>>Wil je me nog een keer helpen? <<
Alleen als ik een oplossing heb. :-)


>>Daarom heb ik een query gemaakt welke er als volgt uitziet:<<
Ik heb niet zoveel ervaring met databases. Ik heb je code eens bekeken en wat aanpassingen gedaan voor verder onderzoek:
Klopt de DataBaseName wel? Zo te zien geef je een bestandsnaam op maar die ziet er wat vreemd uit. Kan het zijn dat de werkelijke naam KoersVoorspelling.mdb moet zijn en dus niet frmInvestor.KoersVoorspelling.mdb ?
Als ik me goed herinner was frmInvestor namelijk een formuliernaam.

datQueryBijwerkenSlotKoers.DatabaseName = "E:\VB\Prive\Beleggen\KoersVoorspelling.mdb"

Altijd de query-string eerst in een string plaatsen. Dan is de query-string veel makkelijker te debuggen. Het is me ook niet helemaal duidelijk wat nu variabelen zijn en wat niet. Ik gok even alleen (Datum(i, 1) en
Left$(FondsenMatrix(i, 1), 8).
Dim sQuery As String
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And '" & Datum(i, 1) & "' = BerekendeDatum And Aandeel = '" & Left$(FondsenMatrix(i, 1), 8) & "'"
frmInvestor.datQueryBijwerkenSlotKoers.RecordSource = sQuery
>>de fout dat FondsenMatrix(i, 1) niet gedefinieerd is,<<
Mag ik de Dim, een eventueele ReDim en voorbeeldwaardes voor Datum(i, 1) en FondsenMatrix(i, 1) dan even zien.


>>Ben je het er mee eens dat een query voor dit probleem de beste oplossing is?<<
Tja, het voordeel van een query is dat je met weinig code een antwoord kunt krijgen. Een nadeel kan zijn dat een query traag werkt en je met wat meer code sneller een antwoord krijgt. Maar nogmaals, ik heb niet veel ervaring met databases. Reacties van meelezers zijn altijd welkom.



Groeten, Peter



Bericht 3 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:11-09-2007
 Aan:PeterMsgID:3557.3
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
Bedankt voor je reactie.
frmInvestor is inderdaad een formuliernaam. KoersVoorspelling.mdb is de bestandsnaam en je hebt gelijk, frmInvestor hoeft er niet voor. Ik heb de bestandsnaam en de naam van de data control door elkaar gehaald. De data control staat namelijk op formulier frmInvestor en de tekst van de query zit in een andere module.
De variabelen zijn inderdaad Datum(i, 1) en Fondsenmatrix(i, 1). Omdat de inhoud van Fondsenmatrix(i, 1) een naam van een fondsbestand is zonder extensie wordt deze beperkt tot de meest linkse 8 posities.
De Dim van de volgens VB niet-gedefinieerde Fondsenmatrix is
Dim FondsenMatrix() en ReDim FondsenMatrix(AantalRegels, 1)
De inhoud van FondsenMatrix(i, 1) is bijv. AAB en van Datum(i, 1) 20070911.


Bericht 4 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:11-09-2007
 Aan:Jan101477MsgID:3557.4
 Onderwerp:QueryForum:ws-nlcomputer
Jan,

>>De inhoud van FondsenMatrix(i, 1) is bijv. AAB en van Datum(i, 1) 20070911.<<
De SQL query-string ziet er dan als volgt uit. Volgens mij niks mis mee. '20070911' = BerekendeDatum  zou voor de leesbaarheid omgedraaid kunnen worden.

SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And '20070911' = BerekendeDatum And  Aandeel = 'AAB'
>>De Dim van de volgens VB niet-gedefinieerde Fondsenmatrix is<<
Is de array FondsenMatrix() wel in je hele project geldig? Waarschijnlijk niet. Zorg dat de declaratie van FondsenMatrix in een module plaats vind en verander Dim FondsenMatrix() in Public FondsenMatrix()


>>Omdat de inhoud van Fondsenmatrix(i, 1) een naam van een fondsbestand is zonder extensie wordt deze beperkt tot de meest linkse 8 posities<<
Euh, als FondsenMatrix() alleen bestandsnamen zonder extensie bevat, waarom doe je dan nog de Left$(FondsenMatrix(i, 1), 8) instructie. Dat is toch onnodig of begrijp ik het verkeerd?


Peter



Bericht 5 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:12-09-2007
 Aan:PeterMsgID:3557.5
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
Euh, als FondsenMatrix() alleen bestandsnamen zonder extensie bevat, waarom doe je dan nog de Left$(FondsenMatrix(i, 1), 8) instructie? Dat is toch onnodig of begrijp ik het verkeerd?
Dit is gedaan omdat bij het inlezen van de bestandsnaam ook de extensie wordt ingelezen en ik die in de Left$ kwijt raak.
Dus niet de fondsnaam wordt ingelezen maar de bestandsnaam.
De FondsenMatrix is in een public routine gedeclareerd en zou dus bekend moeten zijn.


Bericht 6 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Michel Uphoff (Sysop)Datum:12-09-2007
 Aan:Jan101477MsgID:3557.6
 Onderwerp:QueryForum:ws-nlcomputer
Hoi Jan,
>> De FondsenMatrix is in een public routine gedeclareerd en zou dus bekend moeten zijn. <<
Zolang het form waarin de variabele gedeclareerd is nog open staat, én indien er expliciet (FormName.VarName) naar verwezen wordt.Als er het risico is dat het declarerende form gesloten wordt, of je wilt zeker zijn dat variabelen programma-breed (iedere routine in elke Form en Module) gebruikt kunnen worden zonder omhaal en problemen dan kan je beter Global Variables declareren in een module. Zolang het programma niet al te groot is, doe ik dat persoonlijk dan ook het liefst, want het geeft ook veel overzicht in de gebruikte variabelen. Alleen variabelen waarvan ik zeer zeker ben dat de inhoud alleen in de routine zelf geldig moet zijn, declareer ik nog lokaal. (Stomme dingen als tijdelijke variabelen voor tellertjes of tussenbuffertjes enzo). Die bestandsnamen zijn steevast 8 tekens lang? Is er een controle op de aanwezigheid van de (juiste) bestanden? Zo nee dan zou je dit kunnen laten controleren. Je zou ook met een Instring opdracht kunnen zoeken naar de punt, om zo zeker te zijn van de juiste lengte. Iets in de geest van: If Dir$("filenaam.ext") <> "" Then
  If InStr(1, variabele met filenaam, ".") < 8 then Alarm
else
  Alarm
End if

Michel Uphoff (NLcomputer)
Homepage


Gewijzigd 12/09/2007 13:26 CET door Michel Uphoff (Sysop)


Bericht 7 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:12-09-2007
 Aan:Jan101477MsgID:3557.7
 Onderwerp:QueryForum:ws-nlcomputer
>>De FondsenMatrix is in een public routine gedeclareerd en zou dus bekend moeten zijn.<<
Wat is een public routine?
Een routine is een Sub() of een Function() en binnen een Sub() of een Function() kun je geen variabelen Public declareren. Dus wat je zegt kan niet.

Kijk eens naar een screenshot van VB's ProjectExplorer. Er staat een formulier en een module in. Kun je aangeven waar in jouw project de declaratie van FondsenMatrix staat, eventueel ook met een screenshot.


Peter
Bijlagen :

ProjectExplorer.GIF
6KB


Bericht 8 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:15-09-2007
 Aan:AllenMsgID:3557.8
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
De declaratie van FondsenMatrix() is gedaan in de General declarations section van een module en is gedeclareerd als Global. Dus zou het programma die moeten herkennen wanneer gebruikt in de formulering van de query. Maar het systeem blijft zeuren dat FondsenMatrix niet gedefinieerd is. Kennelijk verwacht de query een ander soort gegeven dan een tekst in een arraycel. BerekendeDatum herkent hij wel hoewel dat toch ook een variabele is waaraan een waarde is toegekend.
Groeten,
Jan


Bericht 9 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:15-09-2007
 Aan:Jan101477MsgID:3557.9
 Onderwerp:QueryForum:ws-nlcomputer
Jan,
>>De declaratie van FondsenMatrix() is gedaan in de General declarations section van een module en is gedeclareerd als Global.<<
Vreemd, dat zou goed moeten zijn.

In het eerste bericht zeg je:
de fout dat FondsenMatrix(i, 1) niet gedefinieerd is, hoewel de UBounds en Lbounds goed zijn en er een Dim aan voorafgegaan is.

Waarom gaat er een Dim aan vooraf? Een Dim betekend in dit geval dat een nieuwe variabele FondsenMatrix() aangemaakt wordt die dus niets te maken heeft met de globale variabele FondsenMatrix()
Een ReDim kan wel. Daarmee wordt de grootte van de globale variabele FondsenMatrix() aangepast.

Wat gebeurd er als je de Sub of Functie waarin de query staat begint met deze 2 regels:

'toon de onder en bovengrens van Fondsenmatrix()
MsgBox LBound(FondsenMatrix, 1) & vbCrLf & UBound(FondsenMatrix, 1)
MsgBox LBound(FondsenMatrix, 2) & vbCrLf & UBound(FondsenMatrix, 2)
Maak van de code waarin de query bepaald wordt eventueel eerst commentaar zodat bovenstaande 2 regels wel uitgevoerd kunnen worden.
Het zou verder handig zijn als je de code van de gehele Sub of Functie waarin de query staat in een berichtje post.


Peter




Bericht 10 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:17-09-2007
 Aan:AllenMsgID:3557.10
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
Met Dim wordt bedoeld de global declaratie van FondsenMatrix().
De MsgBox berichten geven resp. 1 - 3000, 1 - 4.
Ondanks dat de matrix global gedeclareerd is en dimensies heeft herkent het systeem deze niet als gedefinieerd in de definitie van de query. Het lijkt erop dat de waarde in FondsenMatrix(i, 1) niet geaccepteerd wordt. Moet deze tussen "" en "" staan?
Nu staat er alleen een naam van een aandeel in, zonder "".
Het codefragment is toegevoegd.
Bijlagen :

Codefragment.txt
4KB


Bericht 11 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:17-09-2007
 Aan:Jan101477MsgID:3557.11
 Onderwerp:QueryForum:ws-nlcomputer
>>Ondanks dat de matrix global gedeclareerd is en dimensies heeft herkent het systeem deze niet als gedefinieerd in de definitie van de query.<<
De matrix is global gedeclareerd, waarom staat ie dan in de aanroep van de routine? Dat is onzinnig!

Verplaats de 2 msgboxen vooraan in de sub direct na de regel
ReDim FondsenMatrix(NumRegels(1), 3)

Welke getallen worden nu gemeldt?


>>Het lijkt erop dat de waarde in FondsenMatrix(i, 1) niet geaccepteerd wordt. Moet deze tussen "" en "" staan? <<
De sQuery die je nu krijgt is:

SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam       

Je wilt dus:
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And '" & Datum(i, 1) & "' =  " & BerekendeDatum & " And Aandeel = '" & FondsNaam & "'"

Het kan zijn dat het teken ' (=chr(39)) vervangen moet worden door " (=chr(34))
Wat is de waarde van sQuery als je nog steeds de foutmelding krijgt?


Als er geen bestanden aanwezig zijn wordt toch de query uitgevoerd?
Ik mis een aantal declaraties voor variabelen die waarschijnlijk alleen binnen deze Sub() gelden.
Maak je gebruik van Option Explicit bovenaan elke module en formuliercode? zonee, doe dat dan.
Sommige variabelen worden gezet maar niet gebruikt: AF, DagNummer, AantalFondsen
Declaraties van variabelen zonder type vermelding worden automatisch van het type Variant. Dat is niet verstandig.
In dit geval zijn DezeDag, VorigeDag dus Variant variabelen. Beide variabelen worden echter nergens gebruikt.

De code in de error afhandeling is niet goed.
Eerst bepaal je het errornummer en daarna gebruik je de errortekst. Als er in de volgende regel een fout ontstaat, heb je een errornummer en een errortekst die niet bij elkaar horen. Erg verwarrend dus.
If ernum & " " & Err.Description & " " & Foutbron & " " & NaamFonds(1) <> VorigeFout ThenBeter en eenvoudiger is:
FoutBijwerkenSlotkoersDBKoersVoorspelling:
    ernum = Err.Number & Chr(32) & Err.Description & " in BijwerkenSlotkoersDBKoersVoorspelling:" & NaamFonds(1)
    If ernum <> VorigeFout Then
        Call frmInvestor.WriteLog("---< " & App.Title & " geeft >---" & ernum)
        VorigeFout = ernum
        Resume Next
    Else
        CloseFile (filename)
        Exit Sub
    End If

Groeten, Peter
[/c]


Bericht 12 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:18-09-2007
 Aan:PeterMsgID:3557.12
 Onderwerp:QueryForum:ws-nlcomputer
Welke getallen worden nu gemeld?
Antwoord: dezelfde als eerder.
Je wilt dus:
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And '" & Datum(i, 1) & "' = " & BerekendeDatum & " And Aandeel = '" & FondsNaam & "'"Nee, dat wik ik niet. Ik wil

sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam"
waarbij Fondsnaam bijv. "AAB "

Dus niet FondsNaam tussen "", maar de inhoud van FondsNaam.


Bericht 13 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:18-09-2007
 Aan:Jan101477MsgID:3557.13
 Onderwerp:QueryForum:ws-nlcomputer
Hoi Jan,

>>Antwoord: dezelfde als eerder.<<
Dat is heel vreemd. In eerste instantie is de array FondsenMatrix(1..3000,1..4)
Na de instructie ReDim FondsenMatrix(NumRegels(1), 3)moet dat worden FondsenMatrix(1..NumRegels(1),1..3)
Staan de MsgBoxen wel op de goede plek?


>> Ik wil

sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam"
waarbij Fondsnaam bijv. "AAB "
<<
Dat moet dus anders. Bovenstaande betekend dat sQuery gewoon met de tekst FondsNaam gevuld wordt en NIET met de inhoud van variabele FondsNaam.
Met de & FondsNaam constructie wordt de inhoud van FondsNaam in de sQuery-string gezet en niet de tekst FondsNaam. De instructie & koppeld strings aaneen, je kunt ook nog + gebruiken maar dat wordt afgeraden. Het kan verwarrend zijn bij gebruik van berekeningen tov string-bewerkingen.

Dus, met je voorbeeld FondsNaam = "AAB "
FondsNaam = "AAB "
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = " & Chr(34) & FondsNaam & Chr(34)

krijg je de sQuery string:
SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = "AAB "
Wat is de exacte sQuery-string waarde die je krijgt. Even een Debug.Print sQuery na de sQuery = statement toevoegen en het antwoord plakken in een nieuw bericht.


Groeten, Peter




Bericht 14 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:18-09-2007
 Aan:PeterMsgID:3557.14
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam"
waarbij Fondsnaam bijv. "AAB "
<<
Dat moet dus anders. Bovenstaande betekend dat sQuery gewoon met de tekst FondsNaam gevuld wordt en NIET met de inhoud van variabele FondsNaam.
Ik ben dit niet met je eens. sQuery wordt met de tekst FondsNaam gevuld indien die tussen "" staat, dus als "FondsNaam".
Wat de dimensies van FondsenMatrix betreft. Vóór de aanroep van de routine waren de dimensies ingesteld als (1 to 300, 1 to 4). Later is deze vervangen door de global met dezelfde dimensies. Logisch dat ze nog steeds hetzelfde zijn.
Zelfs als ik de volgende verandering aanbreng en FondsenMatrix op tekst zet blijft het systeem dezelfde foutmelding geven, hoewel FondsenMatrix uit de uitdrukking verdwenen is:
FondsNaam = "AAB "
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam"
Ra, ra hoe kan dat?
De Debug.Print geeft:SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And Datum(i, 1) = BerekendeDatum And Aandeel = FondsNaam
Ik denk dat de " achter FondsNaam meer naar voren moet.


Bericht 15 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:18-09-2007
 Aan:Jan101477MsgID:3557.15
 Onderwerp:QueryForum:ws-nlcomputer
Jan,

>>Ik denk dat de " achter FondsNaam meer naar voren moet.<<
Dat klopt ja, dat heb ik al een paar keer geschreven.
Je moet de sQuery = regel verwijderen en exact vervangen door deze:
sQuery = "SELECT * FROM KoersVoorspelling WHERE SlotKoers = 0 And " & Chr(34) & Datum(i, 1) & Chr(34) & " = BerekendeDatum And Aandeel = " & Chr(34) & FondsNaam & Chr(34)Waarschijnlijk geeft VB de foutmelding Error 91 ook niet meer op de regel
frmInvestor.datQueryBijwerkenSlotKoers.RecordSource = sQuery
maar op de regel
frmInvestor.datQueryBijwerkenSlotKoers.Recordset.MoveFirst

Klopt dat? Zonee, welke regel dan precies?
Zoja, plaats dan VOOR de regel met  ...RecordSet.MoveFirst de regel
frmInvestor.datQueryBijwerkenSlotKoers.Refresh
Dit zorgt ervoor dat de Data Control de gegevens ververst voordat je ermee gaat werken, omdat RecordSource aangepast is en een Refresh dan niet automatisch gebeurt.
Verder moeten de volgende 2 eigenschappen van datQueryBijwerkenSlotKoers goed staan:
Connect = Access
DefaultType = 2 - UseJet


Groeten, Peter



Bericht 16 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:Jan101477Datum:19-09-2007
 Aan:PeterMsgID:3557.16
 Onderwerp:QueryForum:ws-nlcomputer
Peter,
Ook na verwijderen van de sQuery regel en vervangen door de door jou gegeven versie blijft dezelfde fout van de ongedefinieerde FondsenMatrix terugkomen.
Fout 91 komt nu inderdaad op de regel met MoveFirst, maar op de Refresh regel krijg ik error 3061: "Er zijn te weinig parameters. Het verwachte aantal is 1."
Als ik verder ga krijg ik daarna op de regel met MoveFirst fout 91, maar dat komt waarschijnlijk omdat in de Refresh regel 1 parameter ontbreekt.
Connect was bij mij Access 2000 en DefaultType was 2, dus deze twee waren goed. .


Bericht 17 van 17

NL Computer Forum ~ SQL & Programmeren
 Van:PeterDatum:19-09-2007
 Aan:Jan101477MsgID:3557.17
 Onderwerp:QueryForum:ws-nlcomputer
Jan,

>>Ook na verwijderen van de sQuery regel en vervangen door de door jou gegeven versie blijft dezelfde fout van de ongedefinieerde FondsenMatrix terugkomen. <<

Vervang
Public Sub BijwerkenSlotkoersDatabaseKoersVoorspelling(FondsenMatrix())
door
Public Sub BijwerkenSlotkoersDatabaseKoersVoorspelling()
en pas alle aanroepen naar dese Sub() aan.
Is de fout "ongedefinieerde FondsenMatrix" nu weg?
Zonee, post nogeens de gehele Sub() die je nu hebt en geef aan waar de foutmelding optreedt.
Wordt nog ergens anders in je programma de array FondsenMatrix aangepast?


>>maar op de Refresh regel krijg ik error 3061: "Er zijn te weinig parameters. Het verwachte aantal is 1."<<
Dat betekend dat de query niet goed geformuleerd is.
SlotKoers en Aandeel zijn kolommen in de database die moeten tussen haakjes staan
De inhoud van FondsNaam moet omsloten zijn door enkele aanhalingstekens.
Ik weet niet of BerekendeDatum een kolom in de database is.
Zoja, ook haakjes om BerekendeDatum en enkele aanhalingstekens om de inhoud van Datum(i, 1)
Zonee, Datum(i, 1) = BerekendeDatum helemaal weglaten.

De nieuwe sQuery ziet er dan als volgt uit:
sQuery = "SELECT * FROM KoersVoorspelling WHERE [SlotKoers] = '0' And [Aandeel] = " & Chr(39) & FondsNaam & Chr(39)
(opmerking: Deze methode gaat alleen goed als in FondsNaam geen aanhalingsteken staan. Is in dit geval dus geen probleem)

 
Peter