Newsgroup: it.comp.appl.access
Titolo: HELP! Funzione InStrRev -> Chiamata di routine non valida

Mi sta capitando una cosa che ha dell'assurdo...
Dovevo installare un DB su un portatile vecchiotto (P200 con 20Mb di RAM)
Allora lo ho formattato e ci ho messo sopra Win95 OSR2, ed Office 2000 SR-1,
tutto pareva andato per il meglio...
Ci copio il mio DB e... TADAAAA
Quando il mio codice esegue la funzione    InStrRev    (trova la prima
occorrenza di una stringa all'interno di un'altra, ma partendo dalla fine)
 mi da un errore, dice:
        "Errore di RunTime 5: chiamata di routine od argomento non validi"
Questo anche facendo della finestra di debug una banalissimo
        debug.print InStrRev("pippo","ip")
Naturalmente sul PC dove ho sviluppato funziona tutto (tra l'altro anche
quello è appena riformattato con su Win 98SR ed Office 2000-SR1).
Ho provato ad installare IE5.5 SP2, ma continua a darmi l'errore.
Non capisco, eppure tutte le altre struzioni sembrano funzionare... solo
InStrRev non va.
Gli argomenti sono sensati, e perche mai dovrebbe essere una routine "non
valida"?
I "riferimenti" nel DB ci sono tutti, ho provato anche aa
compattarlo/compilare tutti i moduli... niente, mi da sempre quell'errore!
Grazie a chiunque riesca a darmi una mano!
Ciao, Max

AAAAAARRRRGH!!!!!!!!!
Ho trovato il problema, o meglio... IL BUG (te pareva... :-)
La spiegazione sta in un sito e la riporto integralmente più sotto.
Riassumendo brevemente: access 2000 ha un bug che fa si che quando non viene
speficicata l'opzione che indica il tipo di confronto da effettuare
(binario, testo, ecc...) come valore di default viene preso quello che
indica il confronto tra testo il lingua bulgara (assurdo...) e visto che sul
Win95 non avevo installato il supporto multilingue, mi dava l'errore.
Installando il supporto multilingue non da più l'errore... ma comunque sia
non è bello usare il confronto tra testo della lingua bulgara.
Quindi, come dice il messaggio di sotto, nelle funzioni che usano la
vbUseCompareOption   è meglio specificarla sempre, per essere sicuri che non
dia errori se manca il supporto miltilingue, e perchè comunque ha più senso
usare il confronte nella lingua locale :-)
Ciao, Max
******sotto riporto il messaggio originale che spiega l'arcano, l'url è
http://www.trigeminal.com/usenet/usenet001.asp?1033
  ************
Subject: INFO: Split, Filter, Replace, Join, InStrRev in Access 2000
(Originally posted 7/6/99)
I had meant to post this one before, I suppose to answer a question is as
good of a time as any....
Split, Filter, Replace, Join, InstrRev
All five of these functions are new in VBA6, and they all include a
"Compare" argument which instructs VBA how to handle strings when they need
to compare them. It takes one of five things:
**vbUseCompareOption -- Take the Option Compare setting of the module it is
in (the default if none is specified, which in Access is usually Option
Compare Database, which means use the equivalent of vbDatabaseCompare)
**vbTextCompare -- Take the default LCID of the machine you are running on
**vbDatabaseCompare -- Take the Jet database's sort order (Access only)
**vbBinaryCompare -- do binary comparisons, byte for byte
**An LCID -- any language's LCID, just fill it in and if your machine
supports the language, you are in business. For example, if your machine
supports Japanese, you can use 1041.
Now, there is a problem (bug) in the implementation of these five new
functions that causes them to mishandle the "Comparison" param when you pass
vbDatabaseCompare or vbUseCompareOption when the module says "Option Compare
Database".... basically, it pretends it is an LCID. Since the comparison
value is 2, and it just so happens that 2 is the same as
LANGBULGARIAN/SUBLANGNEUTRAL.
Thus, in Access 2000, when you use these functions with the default of no
compare argument in an "Option Compare Database" module, it will attempt to
perform string comparisons with Bulgarian!
It just so happens that if you use Win95 or Win98, there is no bulgarian
support built in on the machine in most cases. This will cause any of these
functions to return runtime error 5 (invalid procedure call or argument).
After reboot, since setup did add lang support, the functions will not error
out. However, you will still be using Bulgarian for string comparisons,
which is not such a great thing, and can be downright awful in any non-US
English database as Greek or Japanese with Bulgarian string compares can
return the wrong values.
The moral of the story? In Access 2000, *always* provide a Compare argument
(do not take defaults!), and never let it be the equivalent of the
vbDatabaseCompare option. Your data will thank you for it!
Problems with this site? Please contact the webmaster
with your comments, questions, or suggestions.