La forma recomendada para evitar problemas de comparación por representación interna de tipo es forzar ambos valores a la misma representación antes de buscar/comparar. En ObjectScript, el operador unario + convierte una expresión string a representación numérica; el operador _ concatena y fuerza a representación string. [1][2]
En tu caso, si stmtRsOs.Exame contiene un valor numérico como 1666, una opción práctica es convertir explícitamente el valor antes del Find(), por ejemplo usando +stmtRsOs.Exame si quieres comparación numérica, o stmtRsOs.Exame_"" si quieres comparación textual. [1][2]
El motivo es que en ObjectScript y especialmente en estructuras $LIST, valores “idénticos” pueden tener representaciones internas distintas; el documento muestra que listas como $lb("230") y $lb(230) no tienen necesariamente la misma representación interna, aunque conceptualmente representen el mismo valor. También indica que “Generally you can apply the unary-plus operator, +, to an ObjectScript string expression to change it from string representation into an ObjectScript numeric representation.” [1]
Así que, para garantizar consistencia, usa la misma conversión en ambos lados del proceso: guarda y busca como número, o guarda y busca como string, pero no mezcles representaciones. [1]
Ejemplos posibles:
If (..ListaProcedimento.Find(+stmtRsOs.Exame) = "") Quit
o
If (..ListaProcedimento.Find(stmtRsOs.Exame_"") = "") Quit
Si los valores de la lista representan códigos numéricos, la opción con + es la más adecuada; si quieres tratarlos como texto, usa _"". [1][2]
Sources:
- Inicie sesión para enviar comentarios