none
Replace columna Access RRS feed

  • Pregunta

  • Hola saludos cordiales a todos.

    Tengo este problema para reemaplazar "'" y ",". La comilla "'" siempre esta en el inicio de lo registros y la coma "," simper esta al final la "," hay ocasiones que es 1 o 2 "," las que estan al final. Lo primero es que no encuentro la forma de reemplazar esos caracteres desde VB.NET en Access lo hago asi:

    UPDATE Tablita SET Tablita.Circuits = Replace(Circuits,"'","");

    Pero desde Visual no se como hacerlo, lo he estado intentando pero no lo he conseguido:

    cmd.CommandText = "UPDATE Tablita SET Tablita.Circuits = Replace(Circuits,"" '"","""");"

    Pero me marca un error que la function no esta definida: Undefined function 'Replace' in expression.Que es lo que estoy haciendo mal.

    Estos son algunos datos que quiero reemplazar:

    <tfoot></tfoot>
    Tablita
    Circuits
    '2667,BA,
    '2670,,
    '1934,,
    '1498,,
    '2667,BA,

    Pueden ayudarme a solucionar el problema por favor.

    Saludos

    DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    miércoles, 13 de abril de 2016 14:39

Respuestas

  • "Dany Solis" escribió:

    > cmd.CommandText = "UPDATE Tablita SET Tablita.Circuits = Replace(Circuits,"" '"","""");"
    >
    > Pero me marca un error que la function no esta definida: Undefined function 'Replace' in expression.

    Hola:

    No voy a poner en duda que estás conectándote a una base de datos Microsoft Access, pero por el mensaje de error que obtienes, parece todo lo contrario. Desde luego, por ahora no encuentro motivo alguno para que no puedas incluir la función Replace en la consulta UPDATE, salvo que estés utilizando el proveedor de datos Microsoft.Jet.OLEDB.4.0, en cuyo caso deberías de cambiarlo por el proveedor Microsoft.ACE.OLEDB.12.0.

    ¿Tienes algún inconveniente para publicar la cadena de conexión EXACTA que está utilizando el objeto Connection asociado al objeto Command llamado 'cmd', para conectarte a esa supuesta base de datos de Access donde deseas ejecutar la función Replace?

    Por cierto, me imagino que el objeto llamado 'cmd' será del tipo OleDbCommand. ¿Correcto?

    Función Replace

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 13 de abril de 2016 16:11
    Moderador

Todas las respuestas

  • "Dany Solis" escribió:

    > cmd.CommandText = "UPDATE Tablita SET Tablita.Circuits = Replace(Circuits,"" '"","""");"
    >
    > Pero me marca un error que la function no esta definida: Undefined function 'Replace' in expression.

    Hola:

    No voy a poner en duda que estás conectándote a una base de datos Microsoft Access, pero por el mensaje de error que obtienes, parece todo lo contrario. Desde luego, por ahora no encuentro motivo alguno para que no puedas incluir la función Replace en la consulta UPDATE, salvo que estés utilizando el proveedor de datos Microsoft.Jet.OLEDB.4.0, en cuyo caso deberías de cambiarlo por el proveedor Microsoft.ACE.OLEDB.12.0.

    ¿Tienes algún inconveniente para publicar la cadena de conexión EXACTA que está utilizando el objeto Connection asociado al objeto Command llamado 'cmd', para conectarte a esa supuesta base de datos de Access donde deseas ejecutar la función Replace?

    Por cierto, me imagino que el objeto llamado 'cmd' será del tipo OleDbCommand. ¿Correcto?

    Función Replace

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    miércoles, 13 de abril de 2016 16:11
    Moderador
  • Claro Mr. Enrique no hay ningun problema.

    Este es todo el codigo del boton:

    Private Sub BtnDep2_Click(sender As Object, e As EventArgs) Handles BtnDep2.Click
    
            Dim cadenaConexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Locations\Loc.mdb"
    
            Dim MiConexion As String = "cadenaConexion"
            Dim cmd As OleDbCommand
    
            Using cnn As New OleDbConnection(cadenaConexion)
    
                cmd = New OleDbCommand
                cmd.Connection = cnn
                cnn.Open()
    
                'Primer Update
                cmd.CommandText = "DELETE(Tablita.BeforeIG) FROM(Tablita) WHERE (((Tablita.BeforeIG) Is Null));"
                cmd.ExecuteNonQuery()
    
                'Segundo Update
                cmd.CommandText = "DELETE Tablita.TypeChg FROM Tablita WHERE (((Tablita.TypeChg)=""Type"")) OR (((Tablita.TypeChg)=""LEADCODE-CHG"")) OR (((Tablita.TypeChg)=""PROCESS TIME""));"
                cmd.ExecuteNonQuery()
                'Tercer UpDATe
                cmd.CommandText = "DROP TABLE RequestID"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "SELECT Tablita.AfterFG INTO RequestID FROM Tablita WHERE (((Tablita.BeforeIG)=""Request id""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DELETE Tablita.BeforeFG, Tablita.AfterFG, Tablita.BeforeIG FROM Tablita WHERE (((Tablita.BeforeIG)=""Request id"")) OR (((Tablita.BeforeFG)=""From Plant""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DROP TABLE Creado"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "SELECT Tablita.BeforeFG AS Created, Tablita.BeforeIG AS Fecha INTO Creado FROM Tablita WHERE (((Tablita.BeforeFG)=""Creation Date""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DELETE Tablita.BeforeFG, Tablita.BeforeIG FROM Tablita WHERE (((Tablita.BeforeFG)=""Creation Date""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DROP TABLE BFOLD"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "SELECT Tablita.BeforeFG AS OrigenOld, Tablita.BeforeIG AS DatosOld INTO BFOLD FROM Tablita WHERE (((Tablita.BeforeFG)=""From Board Family"")) OR (((Tablita.BeforeFG)=""From Board Family to PN Ver"")) OR (((Tablita.BeforeFG)=""From MBOM Ver""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DROP TABLE BFNEW"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "SELECT Tablita.AfterFG AS DestinoNew, Tablita.AfterIG AS DatosNew INTO BFNEW FROM Tablita WHERE (((Tablita.AfterFG)=""To Board Family"")) OR (((Tablita.AfterFG)=""To Board Family to PN Ver"")) OR (((Tablita.AfterFG)=""To MBOM Ver""));"
                cmd.ExecuteNonQuery()
    
                cmd.CommandText = "DELETE Tablita.Circuits FROM Tablita WHERE (((Tablita.Circuits) Is Null));"
                cmd.ExecuteNonQuery()
    
    
                cmd.CommandText = "UPDATE Tablita SET Tablita.Circuits = Replace(Circuits,"" '"","""");"
                cmd.ExecuteNonQuery()
    
                MessageBox.Show("Correcto")
    
            End Using
    
    
        End Sub

    Y si como comenta el cmd es el OleDbCommand.

    Saludos

    DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    miércoles, 13 de abril de 2016 20:09
  • Enrique:

    Para utilizar la función Replace con el proveedor de datos Microsoft.Jet.OLEDB.4.0, entiendo que deberás tener instalado en el equipo alguna versión de Microsoft Access 2000-2003, obviamente de 32 bits. Pero si no es así y en cambio sí tienes instalado Microsoft Access 2007 o superior, entonces deberás hacer uso en tu cadena de conexión del proveedor Microsoft.ACE.OLEDB.12.0, compilando tu proyecto para 32 ó para 64 bits dependiendo de si la versión de Access 2007 o superior es de 32 o de 64 bits.

    Tienes que tener en cuenta que la función Replace no es propiamente de Access, si no de Visual Basic para Aplicaciones, que es una biblioteca que suelen utilizar los productos Microsoft Office, entre ellos, Microsoft Access, de ahí que no tengas ningún tipo de problema al utilizar la función Replace desde el propio Microsoft Access. Pero para utilizarla desde una consulta SQL que deseas ejecutar desde tu aplicación de Visual Basic .NET, el motor Microsoft Jet o Microsoft ACE necesitará saber si en el equipo existe alguna versión disponible de Visual Basic para Aplicaciones, más conocido por sus siglas VBA. ¿Qué tienes Access instalado? Ya dispones de dicha biblioteca.

    Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Locations\Loc.mdb"



    Señor Enrique perdon por no leer correctamente su respuesta antes.

    He cambiado la cadena de conexion como me lo sugiere y asunto arreglado.

    La duda que tengo es que yo no tengo instalada ninguna version de Access 2007 o superior, tengo instalada la version de Access 2000-2003 de 32 bits y mi sistema operativ0 es Win7 de 64 bits y el resto del Office es el 2010 igualmente de 32bits.

    Por ello no acabo de entender porque no funciona la cadena de conexion con el proveedor "Microsoft.Jet.OLEDB.4.0".

    El equipo tiene instalada una version de Access RunTime pero esta nunca la he usado, tendra algo que ver esto...?

    Saludos

    DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    viernes, 15 de abril de 2016 14:35
  • Me falto agregar una imagen acerca de mi Access que tengo instalado.

    Access


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    viernes, 15 de abril de 2016 15:06
  • "Dany Solis" escribió:

    > La duda que tengo es que yo no tengo instalada ninguna version de Access 2007 o superior,
    > tengo instalada la version de Access 2000-2003 de 32 bits y mi sistema operativ0 es Win7
    > de 64 bits y el resto del Office es el 2010 igualmente de 32bits.
    >
    > Por ello no acabo de entender porque no funciona la cadena de conexion con el
    > proveedor "Microsoft.Jet.OLEDB.4.0".

    Pues ya me has dejado "fuera de juego", porque yo se lo achacaba a no tener instalada una versión de Access 2000-2003, pero por la imagen que has publicado, está claro que sí dispones de ella. Pues lo siento mucho, pero ignoro por completo el motivo que obtengas el error cuando utilizas el proveedor Microsoft.Jet.OLEDB.4.0. Si lo crees necesario, mejor será que acudas a un foro propio de Access para ver si algún experto que participe en el mismo te puede indicar el motivo del error cuando ejecutas la consulta SQL con el proveedor Microsoft.Jet.OLEDB.4.0. ¿?

    > El equipo tiene instalada una version de Access RunTime pero esta nunca la
    > he usado, tendra algo que ver esto...?

    Si te ha funcionado con el proveedor Microsoft.ACE.OLEDB.12.0 es porque éste lo tienes instalado en tu equipo, ya que de lo contrario hubieras obtenido el oportuno error, y si tu no lo has instalado explícitamente, éste se habrá instalado con la versión del RunTime de Microsoft Access que comentas.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    sábado, 16 de abril de 2016 15:05
    Moderador
  • Gracias señor Enrique por sus repuestas, ya publique el problema con el proveedor "Microsoft.Jet.OLEDB.4.0 en un foro de Access.

    Foro de Access y vba

    Saludos

    DS


    Aprendiz de todos maestro de nadie. Saludos desde Cd. Juarez Chihuahua Mexico. DS.

    miércoles, 20 de abril de 2016 14:55