[Access] error-waarde vervangen in query

Pagina: 1
Acties:
  • 839 views sinds 30-01-2008
  • Reageer

  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Ik heb een query gemaakt waarin meerdere subquery's worden samengevoegd. De jointype's van de relaties tussen de subquery's zijn zo ingesteld dat in sommige velden geen waarde gevonden kan worden. Access geeft dan als uitvoer in dat veld #Fout of bij een engelse versie #Error. Dit ziet in een rapport natuurlijk niet uit en daarom wil ik deze waarde vervangen door 0 of iets dergelijks.

Ik heb nu het volgende bedacht:
IIf(IsError([Kosten Monitor])=True;"0";[Kosten Monitor])

Maar hier geeft hij de volgende foutmelding: Data type mismatch in criterium expression.

Weet iemand hoe ik dit het beste op kan lossen? Alvast bedankt!!

Ik verveel me nooit!!


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08-09 13:41

Crazy D

I think we should take a look.

Misschien is die "0" (tussen " dus) niet helemaal correct, en moet ie 0 zijn? (zonder " dus, numerieke 0 i.p.v. een string met de waarde 0).
Overigens werkte het bij mij meestal met IsNull() i.p.v. IsError (IsError kende ik niet...), misschien dat dat nog wat uitmaakt?

Exact expert nodig?


  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Nee, die aanhalingstekens weghalen maakt niks uit. Trouwens IsNull werkt hier niet omdat de waarde natuurlijk niet Null is. Er komt alleen een Error uit. Maar toch bedankt voor het antwoord.

Update:
Ik heb ook nog gedacht om de functie IsNumeric te gebruiken. Ik heb hier in het verleden al een keer de volgende functie voor geschreven die in een formulier werkt, maar helaas niet in een query:

Public Function nnz(testvalue As Variant) As Variant
If Not (IsNumeric(testvalue)) Then
nnz = 0
Else
nnz = testvalue
End If
End Function

Helaas pindakaas!

Ik verveel me nooit!!


Verwijderd

als "#fout/error" een string is .. dan kun je ook dit doen :



iff(left([Kosten Monitor],1)="#";"0";[Kosten Monitor])

  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Nee dit werkt ook niet, die #error/fout is helaas geen string. Ik ben nu al minimaal 4 uur bezig met het oplossen van dit probleem maar het wil me maar niet lukken. Als er iemand anders is die hier iets op weet. Laat het even weten!

Ik verveel me nooit!!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Misschien een Iif doen in de query zelf?

  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Ik heb al op veel verschillende plaatsen enkele IIf's in de query en enkele subquery's geplaatst. Het lukt me echter niet om die #error eruit te halen.

Het zit zo, ik heb een query met daarin de zes subquery's:
- Kosten Monitor: met daarin PC-nr en Kosten Monitor
- Kosten Printer: met daarin PC-nr en Kosten Printer
- Kosten Hardware: met daarin PC-nr en Kosten Hardware
- Kosten Software: met daarin PC-nr en Kosten Software
- Totaalkosten PC: met daarin PC-nr en Totaalkosten PC

Ik heb deze dus samengevoegd in 1 query waarin per PC-nr de kosten van de monitor, printer, hardware, software en de totaalkosten worden gegeven.

Het kan natuurlijk zo zijn dat een PC wel hardware en softwarekosten heeft maar geen printerkosten. Ik heb de join-types zo ingesteld dat elke PC waar ook maar wat kosten voor zijn wordt opgenomen. Met als gevolg dat hij bijvoorbeeld voor pc-nr 1 geen printerkosten kan vinden. Hij geeft dan de waarde #error (in het nederlands #fout) in de betreffende cel. Ik wil er voor zorgen dat deze waarde wordt vervangen door 0 of iets dergelijks. Dit wil me gewoon maar niet lukken.

Ik verveel me nooit!!


  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Ik heb de hoop op een goede oplossing opgegeven en maak nu gebruik van een work-around voor het probleem. Ik voeg de gegevens van de query toe aan een tabel d.m.v. een toevoegquery en bij het sluiten van het rapport maak ik deze tabel weer leeg met een verwijderquery. Door het toevoegen van de gegevens aan de tabel verdwijnen de #error waarden vanzelf.

Edit->beetje kromme zin aangepast

Ik verveel me nooit!!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Met de Iif zou moeten werken, ik heb het ff getest.
Je moet dit doen:

* Voor elk prijscomponent zet je in je query een apart veld. In access voer je dan bijvoorbeeld in:

PrinterPrijs: Iif(printers.prijs;printers.prijs;0)

Dit geeft de printerprijs terug als die bestaat, anders 0.

* Aan het eind tel je al deze prijscomponenten op, dus iets als:
TotalePrijs: PrinterPrijs + CdRomPrijs

Dit zou moeten werken!

  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Nope, doet het niet! Ik weet niet hoe hem hebt uitgeprobeerd? Het leuke is gewoon dat die #error er in feit niet staat. Het is geen string, je kunt hem niet opzoeken, hij ziet hem niet. Ik begin sterk het gevoel te krijgen dat ik hem er niet uit kan krijgen of ik zou de jointypes van de relaties moeten veranderen. Maar dit wil ik natuurlijk niet want dan verlies ik gegevens.

Hmmm, ik weet dat het komt door de berekeningen die ik uitvoer in mijn subquery's. Alleen ik weet niet hoe ik er daar voor kan zorgen dat als waarde bestaat bij een bepaald pc-nr dat hij dan Null wordt en niet #Error.

Ik verveel me nooit!!


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Afbeeldingslocatie: http://www.endoria.net/upload/index.php/2068629294

Zo heb ik het getest. Ik geloof dat dit de opstelling is (in het simpel) die jij ook gebruikt. Onderaan zie je het resultaat. Totaal is nu altijd zichtbaar, ongeacht of er een printer is of niet.

  • SjosPin
  • Registratie: Januari 2001
  • Laatst online: 08-09 13:10

SjosPin

Zomergast

Topicstarter
Aha, het verschil is dat het veld "totaal" en "printerPrijs" bij mij zijn gebaseerd op een veld in een subquery dat daar berekend wordt. Dus er staat dan in de subquery in jouw geval -> printerprijs: [Kosten printer per maand]*[aantal maanden]

Dit geldt voor vijf velden die ik in mijn query gebruik.

Ik verveel me nooit!!


  • Boss
  • Registratie: September 1999
  • Laatst online: 17:20

Boss

+1 Overgewaardeerd

Ik heb dit ook wel vaak gehad in Access. volgens mij is echt de enige manier gewoon voorkomen dat er #Fout of #Erro kan optreden. Dus overal waar evt door 0 wordt gedeeld of iets anders waar een fout kan optreden afvangen met een iif stukje.
Helaas.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1