Toon posts:

[VB6] Datum Probleem *

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,
Ik wil dat de datum van vandaag aan 2 voorwaarden voldoet en daarna pas iets mag uitvoeren.
Ik ben er al een paar dagen mee bezig geweest en kom er niet uit.
Ik heb het volgende geprogrammeerd:

Jaartal2 = DateTime.Date

If Jaartal2 >= "31-7-2004" And Jaartal2 <= "30-7-2005" Then
Jaartal = "1-8-2004' and '31-7-2005"
End If

Maar hij werkt niet.
Misschien is het maar iets heel kleins maar ik weet niet wat het is.
Weet iemand wat ik verkeerd doet en wel een werkend script heeft ? :)

  • lordsnow
  • Registratie: Maart 2000
  • Laatst online: 09-05 18:25

lordsnow

I know nothing

Ik ken dan wel geen VB, maar:

1. Je kent ook echt wel een datum (van vandaag) toe aan Jaartal2?
2. De Date format komt overeen met waar je mee probeert te vergelijken, dus dd-mm-jjjj?

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Moet je de string niet eerst naar een waarde omzetten? (IIRC)

Zoiets:
Visual Basic:
1
2
3
Jaartal2 = datevalue( DateTime.Date )

If Jaartal2 >= datevalue( "31-7-2004" ) And Jaartal2 <= datevalue( "30-7-2005" ) then

Developer Accused Of Unreadable Code Refuses To Comment


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 09:46

Maasluip

Kabbelend watertje

Icelus schreef op vrijdag 11 februari 2005 @ 11:23:
Moet je de string niet eerst naar een waarde omzetten? (IIRC)
Ja, dat moet. Een Date waarde wordt intern als een double opgeslagen met de dagen in het integer gedeelte en de uren/minuten/seconden in het floating-point gedeelte. Op die manier zul je dus nooit een goede test krijgen omdat je een Date waarde met een string waarde vergelijkt (in feite is de test dan 38394="11-02-2005" en dat is altijd FALSE). Je zult dus de datum waarmee je wil vergelijken om moeten zetten naar een Date waarde.

[ Voor 5% gewijzigd door Maasluip op 11-02-2005 11:41 ]

Signatures zijn voor boomers.


Verwijderd

Verwijderd schreef op vrijdag 11 februari 2005 @ 10:52:
If Jaartal2 >= "31-7-2004" And Jaartal2 <= "30-7-2005" Then
Jaartal = "1-8-2004' and '31-7-2005"
End If
Je datumcheck is reeds opgelost hierboven, maar wat wil je hiermee bereiken!?

[ Voor 11% gewijzigd door Verwijderd op 11-02-2005 11:42 ]


Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 11 februari 2005 @ 11:42:
[...]


Je datumcheck is reeds opgelost hierboven, maar wat wil je hiermee bereiken!?
ik ben een leerling volg systeem aan het bouwen, en ik wil dat het systeem automatisch van schooljaar wisselt. dus vanaf een beplaade datum moet ie gegevens gaan filteren van dit schooljaar alleen.

het script werkt nog niet !!!! :'(

Verwijderd

Topicstarter
nou werkt ie wel....

bedankt iedereen !!! _/-\o_

  • Kristof
  • Registratie: Januari 2002
  • Laatst online: 09-04 17:34

Kristof

is een Belgisch product

Even een waarschuwing
Hou ook rekening dat VB6 zich aanpast aan de instellingen van het systeem.
Als je bijvoorbeeld een datum gaat vergelijken hard-coded met de systemdate, en de user heeft in zijn instellingen staan dat datums moeten weergegeven worden als yyyy-mm-dd ipv dd-mm-yyyy dan kan dat problemen geven!

"You can get more with a kind word and a gun than you can with a kind word alone." - Al Capone


Verwijderd

Topicstarter
hij werkt toch nog niet helemaal goed.

Jaartal2 = DateValue(DateTime.Date)

If Jaartal2 >= DateValue("1-8-2004") And Jaartal2 <= DateValue("31-7-2005") Then
Jaartal = "1-8-2004' and '31-7-2005"
End If

If Jaartal2 >= DateValue("1-8-2005") And Jaartal2 <= DateValue("31-7-2006") Then
Jaartal = "1-8-2005' and '31-7-2006"
End If

If Jaartal2 >= DateValue("1-8-2006") And Jaartal2 <= DateValue("31-7-2007") Then
Jaartal = "1-8-2005' and '31-7-2006"
End If

hij moet voor een paar jaar controleren.
Het probleem is dat hij bij alle if then else statements true als uitkomst heeft.
dus hij controleert niet goed. de datum van vandaag is voor VB gelijk aan alle 3 de if then else statements, terwijl hij alleen de 1e moet uitvoeren. Het probleem is een beetje moeilijk uit te leggen.... maar ik heb het zo gecontroleerd:

If Jaartal2 >= DateValue("1-8-2004") And Jaartal2 <= DateValue("31-7-2005") Then
Jaartal = "1-8-2004' and '31-7-2005"
MsgBox "ja"
Else
MsgBox "Nee"
End If

If Jaartal2 >= DateValue("1-8-2005") And Jaartal2 <= DateValue("31-7-2006") Then
Jaartal = "1-8-2005' and '31-7-2006"
MsgBox "ja2"
Else
MsgBox "nee2"
End If

en hij gaf dus eerst de msgbox JA weer en toen ook JA2, terwijl hij juist Nee2 moest laten zien.
nu snappen jullie het denk ik beter wat ik bedoel.
weet iemand hier een oplossing voor ?

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Verwijderd schreef op donderdag 17 februari 2005 @ 14:10:
en hij gaf dus eerst de msgbox JA weer en toen ook JA2, terwijl hij juist Nee2 moest laten zien.
nu snappen jullie het denk ik beter wat ik bedoel.
weet iemand hier een oplossing voor ?
Werkt hier prima.
Zet 'ns een break point op Jaartal2 = DateValue(DateTime.Date) en kijk wat voor waarde Jaartal2 krijgt.

Developer Accused Of Unreadable Code Refuses To Comment


  • Frisbee
  • Registratie: Februari 2000
  • Niet online
Het wordt geinterpreteerd als amerikaans formaat.
Probeer eens
If Jaartal2 >= DateValue("8-1-2005") And Jaartal2 <= DateValue("7-31-2006") Then

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Frisbee schreef op donderdag 17 februari 2005 @ 14:50:
Het wordt geinterpreteerd als amerikaans formaat.
Probeer eens
If Jaartal2 >= DateValue("8-1-2005") And Jaartal2 <= DateValue("7-31-2006") Then
DateValue wordt geinterpreteerd als het formaat dat je bij short date format in je instellingen hebt staan. Zie ook MSDN.
Heeft de TS het breakpoint nog geplaatst en gekeken wat er gebeurt? Let overigens ook op (zie eerder MSDN artikel) dat je het jaartal wel opgeeft bij DateValue. Anders wordt standaard het huidige jaartal gepakt.

[ Voor 5% gewijzigd door OZ-Gump op 17-02-2005 14:55 ]

My personal website


Verwijderd

Datum notatie in VB
code:
1
2
Dim d as date
d = #8/1/2004#


Let wel er op dat VB met de amerikaanse datum notatie werkt.
8 jan 2005
wordt in de amerikaanse notatie:
1-8-2005

  • Ramkoemar
  • Registratie: Oktober 2003
  • Laatst online: 13-11-2024
ik doe het altijd op een andere manier:

Visual Basic:
1
2
3
4
Private Sub Command1_Click()
datum = Format(Date, "mm-dd-yy")
MsgBox datum
End Sub

Verwijderd

Topicstarter
het wil gewoon nog steeds niet lukken. Ik denk dat ik weet waar het probleem in zit.
vb kan niet controleren of een datum tussen een bepaalde reeks valt ( denk ik )
ik heb het volgende geprogrammeerd ( al jullie tips toegepast )

Jaartal2 = DateValue(Date)
Jaartal2 = Format(Date, "dd-mm-yyyy")
MsgBox Jaartal2

If Jaartal2 = "04-03-2005" Then
MsgBox "juist"
Else
MsgBox "onjuist"
End If

If Jaartal2 >= DateValue("01-08-2004") And Jaartal2 <= DateValue("31-07-2005") Then
Jaartal = "1-8-2004' and '31-7-2005"
MsgBox "ja"
Else
MsgBox "Nee"
End If

If Jaartal2 >= DateValue("1-8-2005") And Jaartal2 <= DateValue("31-7-2006") Then
Jaartal = "1-8-2005' and '31-7-2006"
MsgBox "ja2"
Else
MsgBox "nee2"
End If

wat krijg ik er dan uit:

een msgbox met juist.
vervolgens een msgbox met nee
en daarna een msgbox met nee2

hij kan wel een datum vergelijken met de datum van vandaag.
maar dus niet de datum van vandaag tussen 2 datums vergelijken.

nogmaals: weet iemand wat ik fout doe ? en als het bij jullie wel werkt waar dat aan kan liggen dan ?

gelijk nog een vraag, want ik heb nog een ander probleem.
Visual Basic voegt pas de records toe als het project wordt afgesloten. dus als ik tijdens runtime een record wil toevoegen doet ie dat niet, pas als ik sluit. maar in mijn project moet een gebruiker meerdere records tijdens runtime kunnen toevoegen, maar wat VB nu doet is dat hij alleen het laatst toegevoegde record toevoegt aan de database.
ik heb al geprobeerd met adodc1.recordset.close en .save maar dan krijg ik foutmeldingen.
ik wil dus dat als een gebruiker tijdens runtime een record toevoegt dat VB hem gelijk wegschrijft naar de Database.
weet iemand hier ook een oplossing voor ?
dan zou ik heel erg geholpen zijn als ik deze 2 problemen op kan lossen. _/-\o_

[ Voor 9% gewijzigd door Verwijderd op 04-03-2005 11:31 ]


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 09:46

Maasluip

Kabbelend watertje

Als je bij je If statements jaartal2 vervangt door DateValue(jaartal2) dan gaat dat gedeelte goed. Jaartal2 wordt namelijk als string gezien en niet als getal.

[edit]
Of je haalt die overbodige Jaartal2 = Format(Date, "dd-mm-yyyy") weg, dan hoef je niet DateValue(jaartal2) te gebruiken.

[ Voor 30% gewijzigd door Maasluip op 04-03-2005 11:50 ]

Signatures zijn voor boomers.


Verwijderd

Topicstarter
Maasluip schreef op vrijdag 04 maart 2005 @ 11:48:
Als je bij je If statements jaartal2 vervangt door DateValue(jaartal2) dan gaat dat gedeelte goed. Jaartal2 wordt namelijk als string gezien en niet als getal.

[edit]
Of je haalt die overbodige Jaartal2 = Format(Date, "dd-mm-yyyy") weg, dan hoef je niet DateValue(jaartal2) te gebruiken.
Met DateValue(Jaartal2) werkt ie nu wel eindelijk.
Ik had ook eerst die Jaartal2 = Format(Date, "dd-mm-yyyy") weggehaald, die heb ik pas later toegevoegd, maar toen werkte die nog steeds niet.
bedankt in ieder geval. nu nog probleem 2..... dat is een nog groter probleem.

  • Ramkoemar
  • Registratie: Oktober 2003
  • Laatst online: 13-11-2024
Visual Basic:
1
2
3
4
5
6
7
8
datum1 = Format(Date, "yyyymmdd")
datum2 = "20050305"     '03-05-2005

If datum1 >= datum2 Then
    MsgBox "datum1 is hoger of gelijk aan datum2"
Else
    MsgBox "datum1 is lager dan datum2"
End If


zoiets dan?

Verwijderd

Topicstarter
Het datum probleem is inmiddels opgelost, ik heb alleen nu een nieuw probleem :X
Visual Basic voegt pas de records toe als het project wordt afgesloten. dus als ik tijdens runtime een record wil toevoegen doet ie dat niet, pas als ik sluit. maar in mijn project moet een gebruiker meerdere records tijdens runtime kunnen toevoegen, maar wat VB nu doet is dat hij alleen het laatst toegevoegde record toevoegt aan de database.
ik heb al geprobeerd met adodc1.recordset.close en .save maar dan krijg ik foutmeldingen.
ik wil dus dat als een gebruiker tijdens runtime een record toevoegt dat VB hem gelijk wegschrijft naar de Database. weet iemand hier ook een oplossing voor ? B)

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 07:56

TwoR

Gekleurde stippen

volgens mij is dat gewoon recordset.update

Klein voorbeeldje
Visual Basic:
1
2
3
4
5
recordset.addnew
recordset.fields("kolomnaam").value = "test"
recordset.fields("kolomnaam1").value = "test1"
recordset.update
recordset.close


Zoiets moet werken kan je gewoon in runtime dingen toevoegen.

Overigens gewoon in een manual of boek te vinden.
Bijvoorbeeld Visual Basic 6 het complete handboek en dan page 618

[ Voor 150% gewijzigd door TwoR op 07-03-2005 11:05 ]


Verwijderd

Topicstarter
bedankt Twor. de server ligt nu effe plat dus kan het niet testen, maar ik vertrouw erop dat het wel gaat werken. Ik had het wel geprobeerd met alleen Close aan het eind, maar dan krijg je een foutmelding, ik was dus update vergeten. Ik heb dat boek trouwens niet. Ik heb het boek VB in 24 uur en daar staat het volgens mij niet in, die ligt ook thuis, ik ben nu op school.

nog een vraagje trouwens, bij wijzigen had ik dus het volgende:

Adodc1.Recordset.Update
Adodc1.Recordset.Fields("icarusnr").Value = icarusnummer.Text

en dat heb ik nu gewijzigd in:

Adodc1.Recordset.Edit
Adodc1.Recordset.Fields("icarusnr").Value = icarusnummer.Text
Adodc1.Recordset.Update
Adodc1.Recordset.Close

dat is toch goed dan ?

en bij verwijderen moet dat dan ook ?
ik heb nu dit:

Adodc1.Recordset.Delete
Adodc1.Refresh

maar volgens mij is dat gewoon goed zo....

Verwijderd

Topicstarter
Adodc1.recordset.close geeft veel problemen en zonder Close doet ie ook tijdens Runtime toevoegen. Close moet je dus weglaten.

En adodc1.recordset.edit kent ie niet.
daar moet je gewoon onderaan weer een .update zetten en dan werkt alles goed.

de server was weer hersteld dus heb het kunnen testen.
mijn 2 problemen zijn dus opgelost.

heb nog wel een klein vraagje.... 8)

weet iemand hoe ik het ip adres van de gebruiker kan opvragen in VB ?

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 07:56

TwoR

Gekleurde stippen

als je .close geebruikt is de recordset gesloten en zal je hem eerst weer moeten openen.
.edit is dacht ik vba of vbs maar VB6 zelf kent dat inderdaad niet.

Ga je nu iedere vraag die je hebt hier posten of ga je zelf ook nog wat dingen proberen op te zoeken!

Best moeilijk om met de search van GoT hier uit te komen:
[rml][ VB6]IP vinden met Winsock Control[/rml]


Niet dus

[ Voor 24% gewijzigd door TwoR op 08-03-2005 11:21 ]


Verwijderd

Topicstarter
TwoR schreef op dinsdag 08 maart 2005 @ 11:19:
Ga je nu iedere vraag die je hebt hier posten of ga je zelf ook nog wat dingen proberen op te zoeken!
ik probeer het eerst zelf, dan vraag ik rond op school en dan zoek ik op internet en een boek ofzo, ook nog vaak op het tweakers forum effe, als ik er dan niet uit kom dan post ik het.
van dat ip adres heb ik ook gezocht, ik kwam iemand tegen met precies dezelfde vraag alleen dat was voor PHP. en met die link die jij me gaf kom ik er nog niet uit. winsock ? is dat een component in VB ofzo ?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10-05 12:29

Creepy

Tactical Espionage Splatterer

We moeten je hier nu redelijk aan het handje houden met vragen die vrij weinig te maken hebben met de oorspronkelijke vraag en die op deze manier geen eigen topic waard zijn.

Hoe winsock werkt i.c.m. met VB is prima te vinden op internet, dus ga hier zelf eerst maar eens naar opzoek. Op het moment dat je weer vragen hebt en je zelf al het 1 en ander hebt gezocht open dan een nieuw topic. (let wel op P&W FAQ - De "quickstart" ;) ).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.