Toon posts:

[Access]Expressie te lang

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg de foutmelding:

An expression can't be longer than 2.048 characters

Dit is de expressie:

=Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400) & " d " & Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400)))/3600) & " u " & Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400))-3600*(Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400)))/3600)))/60) & " m " & DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400))-3600*(Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400)))/3600))-60*(Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400))-3600*(Int((DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))-86400*(Int(DateDiff("s";Sum([Beginmoment]);Sum([Eindmoment]))/86400)))/3600)))/60)) & " s "

Word telt ca 1050 karakters incl. spaties

Het rare is dat deze expressie in een andere database bij opening perfect werkt, klik vervolgens in Designview op het veld waar deze expressie in staat krijg ik weer dezelfde foutmelding terwijl deze het toch echt doet.

Ik kan niets opslaan zonder deze expressie te verliezen.

Ik denk dat het een instelling is van Access of dat de andere DB waar het wel werkt in een andere versie van Access is gemaakt. Mijn versie is 2000.

Kan iemand een licht werpen op deze zaak :(

Verwijderd

Verwijderd schreef op 06 mei 2004 @ 11:19:
Ik krijg de foutmelding:

inleidend verhaal.....

Kan iemand een licht werpen op deze zaak :(
ja :)

heb dit ook gehad. Access heeft inderdaad een limiet op het aantal Chars dat je kunt gebruiken. Het feit dat je maar de helft kwijt kunt komt omdat alles in Unicode weggeschreven wordt. Dat vergt 2 bytes per karakter (ps als je nog eens iets over Unicode wilt weten, moet je http://www.joelonsoftware.com/articles/Unicode.html lezen. Daar staat alles wat een developer nodig heeft. Is echt een geweldig artikel!).

Ik heb het opgelost door een aparte query te maken hiervoor in Access zelf, en die vanuit je Form aan te roepen.

Als er nog een betere workaround is houdt ik me aanbevolen...

Verwijderd

Wat probeer je met deze expressie eigenlijk uit te rekenen ? Het verschil in dagen, uren.... tussen twee data ? Mij lijkt dat het eenvoudiger moet kunnen

je kunt namelijk twee data gewoon van elkaar aftrekken

dus
code:
1
2
3
4
  datepart("d",einddatum - begindatum) & "d" & _
  datepart("h",einddatum - begindatum) & "u" & _
  etc.
  etc.

Verwijderd

Topicstarter
Ik heb ik een veld begin en einddatum van elkaar af laten trekken door deze expressie:

=Int(DateDiff("s";[Beginmoment];[Eindmoment])/86400) & " d " & Int((DateDiff("s";[Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400)))/3600) & " u " & Int((DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400))-3600*(Int((DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400)))/3600)))/60) & " m " & DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400))-3600*(Int((DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400)))/3600))-60*(Int((DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400))-3600*(Int((DateDiff("s";[ Beginmoment];[Eindmoment])-86400*(Int(DateDiff("s";[ Beginmoment];[Eindmoment])/86400)))/3600)))/60)) & " s "

Ik reken alles naar seconden, en later in het andere veld tel ik het totaal bij elkaar op en maak van die seconden weer dagen,uren etc.
Dat wil ik doen door de eerder vermelden code.

Een andere manier van rekenen met datum lukt niet.
Ik ben aan de slag gegaan met een functie die het automatisch omrekent. Die telde wel alles goed op alleen de weergave in de veld van het subform lukte weer niet.

Ik zal eens kijken of ik dit in een Query kan flansen

FFrenzy: Die code van jou is een stuk minder complex maar hoe tel je uiteindelijk als die waardes dan op, want daar loopt het bij mij steeds spaak

[ Voor 14% gewijzigd door Verwijderd op 06-05-2004 12:45 ]


Verwijderd

Probeer eens
code:
1
2
3
datepart("d", sum(begindatum - einddatum)) & " d" & _
etc.
etc.