Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/06/2012, 08:19
Canal_on
 
Fecha de Ingreso: julio-2007
Mensajes: 16
Antigüedad: 16 años, 9 meses
Puntos: 2
Pregunta Un replace 'dinamico' que no funciona...

Hola!

Estoy haciendo una pequeña aplicación de aficionado, en la que tengo que eliminar de una cadena (en realidad del campo Apellido) determinados caracteres: espacios vacíos, guión, apostrofos... etc. Son caracteres a quitar para generar un 'NombreUsuario' limpio de esos caracateres extraños.

Lo he hecho, claro, con un Replace, y funciona normalmente... Pero al darle una pensada, quería hacer que los cacracteres a eliminar los pueda tomar de una variable, que controlo desde la base de datos. Para ello, genero un "Scripting.Dictionary" (esto lo aprendí en este foro... y lo uso bastante en otras aplicaciones).

Lo hice primero poniendo en ese campo (que luego se convierte en variable) el codigo Crh$(32) (por ejemplo: ese es el espacio vacio...). lo hago así:

Código:
'================PRIMERO CARGAMOS TODAS LAS VARIABLES QUE GESTIONAN LA APLICACIÓN =========
codigo_aplicacion = 5

Set variables1 = CreateObject("ADODB.Recordset")
Set variables1 = db.Execute("Select * from aplicacion_web where codigo=" & codigo_aplicacion & "")
Set variables = CreateObject("Scripting.Dictionary")

Do While Not variables1.EOF
    strclave = variables1("clave")
    strvalor = variables1("valor")
    variables.Add strclave, strvalor
    variables1.movenext
 Loop

strClavesArray = variables.Keys
  strValoresArray = variables.Items
  
Dim caracteres() As String


caracteres = Split(variables.Item("chrEliminar"), ",")
MsgBox (variables.Item("chrEliminar"))

'Esto está aquí para comprobar que se han cargado...
For i = 0 To UBound(caracteres())
MsgBox (caracteres(i))
Next
'==========================================================================================
La variable se llama 'chrEliminar' y contiene los distintos Chr$() separados por ",".

Luego para poder hacer el replace de forma 'dinámica', lo hago así:


Código:
Set rsdatos2 = CreateObject("ADODB.Recordset")
Set rsdatos2 = db.Execute(todaselect, 1, 1)

el_apell1 = rsdatos2("apell1")
el_apell2 = rsdatos2("apell2")
el_nombre = rsdatos2("nombre")
'Este lo pongo para probar 'a manini...:
el_nombre_limpio = Replace(el_nombre, Chr$(32), "")

cuantos = UBound(caracteres())
For i = 0 To cuantos

que_buscar = caracteres(i)
'MsgBox (que_buscar)
el_apell1 = Replace(el_apell1, que_buscar, "")
el_apell2 = Replace(el_apell2, que_buscar, "")
el_nombre = Replace(el_nombre, que_buscar, "")
Next


MsgBox (el_apell1)
MsgBox (el_nombre)
MsgBox (el_nombre_limpio)

... Pues no funciona... tanto el_apell1, como el_apell2 y el_nombre no aplica el replace. Sin embargo el_nombre_limpio que he generado 'a manini'... si que funciona

La variable "que_buscar" la he generado para poderle aplicar funciones de conversión previas, del tipo de cstr(), pero nada...

En cada una de las iteraciones del Do While muestro con un Msgbox el valor, y lo saca bien : Chr$(32), por ejemplo, y aparentemente sin comillas ni caracteres previos extraños...

seguro que es algo fácil... pero se me escapa


Gracias por contestar!!!

Fernando