Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MS SQL reporting] iif geeft error bij false voorwaarde

Pagina: 1
Acties:

  • badFISH
  • Registratie: Augustus 2001
  • Laatst online: 20-11 19:53

badFISH

Design & Decision Support

Topicstarter
Mijn probleem:
We hebben een lijst met waarden (string) die als als integer geconverteerd moeten worden. Echter staan er ook string waarden tussen waarvan een deel gebruikt moet worden. Voorbeeld input voor het rapport:
12
24+13
2x36

1e) Bij de variant 12 willen we 12 gebruiken en die vermeningvuldigen met 10
2e) Bij de variant 24+13 willen we 24 gebruiken en die vermingvuldigen met 10
3e) Bij de variant 2x36 willen we 36 gebruiken en die vermingvuldigen met 10

Wat ik geprobeerd heb.
Als ik losse formules gebruik te weten:
=iif(len([controlewaarde])<4,CInt([controlewaarde])*10,0)
dan gaat variant 1 goed en krijg ik bij waarden van variant 2 & 3 een error.

En met:
=iif(GetChar([controlewaarde],3)="+",CInt(Left([controlewaarde],2))*10,0)
=iif(GetChar([controlewaarde],2)="x",CInt(Right([controlewaarde],Len([controlewaarde])-2))*10,0)
dan gaat variant 2 en 3 goed (staat een getal of is 0) maar geeft variant 1 een Error

Als ik de formule dan combineer gaan alle varianten fout:
=iif(GetChar([controlewaarde],3)="+",CInt(Left([controlewaarde],2))*10,iif(GetChar([controlewaarde],2)="x",CInt(Right([controlewaarde],Len([controlewaarde])-2))*10,CInt([controlewaarde])*10))

Afbeeldingslocatie: http://home.horsch.me/IMG_3606.JPG
Kan iemand me een hint geven wat ik fout doe of waar ik de oplossing kan vinden?

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
wil je steeds het grootste getal gebruiken of echt specifiek in variant 2 het eerste getal, en in variant 3 het tweede getal?

  • badFISH
  • Registratie: Augustus 2001
  • Laatst online: 20-11 19:53

badFISH

Design & Decision Support

Topicstarter
Dat laatste.
Dus heel specifiek als er een + teken in staat de getallen voor de plus (maar dat zijn er altijd max 2)
En in het geval van een vermeningvuldiging het getal achter de x

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik zie niets geks aan je combinatie query, behalve dat je er geen rekening mee houdt dat het getal voor de + of na de x ook uit minder dan 2 karakters kan bestaan...

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 14:29
Je begint met een GetChar voor index 3 zonder te checken of je string lang genoeg is. Dat gaat sowieso een error geven bij te korte strings:

code:
1
The Value expression for the textrun &#8216;a.Paragraphs[0].TextRuns[0]&#8217; contains an error: Argument 'Index' must be less than or equal to the length of argument 'String'.

geheelonthouder met geheugenverlies


  • badFISH
  • Registratie: Augustus 2001
  • Laatst online: 20-11 19:53

badFISH

Design & Decision Support

Topicstarter
De waarschuwing die ik voor de losse formules krijg is de volgende:

code:
1
Warning 9   [rsRuntimeErrorInExpression] The Value expression for the textrun &#8216;Textbox13.Paragraphs[0].TextRuns[0]&#8217; contains an error: Input string was not in a correct format


Ik was in de veronderstelling dat ik met CInt alles naar Integers had omgezet, toch piept het systeem over verschillende formats.
Format op de CEL is overigens niet ingevuld

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 14:29
Welke expression heb je precies staan in die Textbox13?

Gooi eventueel echt functiedeel in aparte cellen.

Dan krijg je cellen met
=GetChar([controlewaarde],3)
=Left([controlewaarde],2)
=GetChar([controlewaarde],2)
=Len([controlewaarde])
=Right([controlewaarde],Len([controlewaarde])-2))

[ Voor 69% gewijzigd door TallManNL op 10-04-2014 18:48 ]

geheelonthouder met geheugenverlies


  • Boogie
  • Registratie: Januari 2001
  • Laatst online: 09-11 23:00
Zou je het niet gewoon in 3en doen?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$getal="";
if(strpos($controlegetal,"+")!==FALSE){
  $sontrolegetal=explode("+",$controlegetal);
  $getal=$controlegetal[0];
}
if(strpos($controlegetal,"x")!==FALSE){
  $sontrolegetal=explode("x",$controlegetal);
  $getal=$controlegetal[1];
}
if($getal==""){
  $getal=$controlegetal;
}
$getal=10*getal;

als je explode() gebruikt krijg je alles voor of na de '+' of 'x' of het nu een cijfer, tiental of honderdtal is.

[ Voor 15% gewijzigd door Boogie op 17-04-2014 22:53 ]

Pagina: 1