REVISIÓN: Error en # eliminado al insertar registros con la clave principal CHAR

Seleccione idioma Seleccione idioma
Id. de artículo: 264766 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se inserta un nuevo registro en una tabla ODBC vinculada que tiene un campo de texto de longitud fija (CHAR) como clave principal, # eliminado aparece en todos los campos en el nuevo registro.

Nota Si a continuación, cierre y vuelva a abrir la tabla vinculada, del registro recién insertado aparece y está correctamente insertado.

Causa

Muchos controladores ODBC agrega espacios para (o "rellenar") un campo CHAR cuando el número de caracteres que se insertan es menor que la longitud máxima del campo. Microsoft Jet 4.0 incorrectamente volver lee el valor insertado, relleno y lo compara con el valor original, unpadded. Como los dos valores son diferentes, Jet informa a Microsoft Access que no se encuentra el registro recién insertado.

Solución

Para resolver este problema, instale el service pack más reciente de Jet 4.0. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
239114Cómo: Obtener el Service Pack más reciente para el motor de base de datos Microsoft Jet 4.0

Solución

Utilice un campo texto de longitud variable (VARCHAR) como clave principal para la tabla.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se ha corregido en Service Pack 6 (SP6) de Jet 4.0.

Más información

Pasos para reproducir este comportamiento

Puede reproducir este problema mediante la vinculación a una base de datos DB2, Oracle o Microsoft SQL Server. El problema no parece producirse a menos que tiene al menos 60 o más registros en la tabla vinculada.

Si examina una traza ODBC realizada durante la operación de inserción, verá que Jet inserta reselects correctamente el registro, y que no se producen errores en la traza. El problema se produce después Jet recupera el registro y intenta comparar el valor de clave reselected con el valor escrito por el usuario.

Para reproducir este comportamiento, siga estos pasos:
  1. Ejecute el siguiente código de Microsoft Visual Basic para generar la tabla de prueba y registros:
    Sub GenerateTestTable()
    Dim conn As Object
    Dim i As Long, sql as String
       Set conn = CreateObject("adodb.connection")
       ' Change connection string to point to your SQL Server if needed.
       conn.Open "Provider=SQLOLEDB;Server=(Local);Database=Pubs;UID=sa;PWD=;"
       On Error Resume Next
       conn.Execute "drop table tmp_chartest"
       On Error GoTo 0
       sql = "create table tmp_chartest(f1 char(5) primary key, f2 char(10))"
       conn.Execute sql
        For i = 1 To 70
            sql = "insert into tmp_chartest (f1,f2) values ('"
            sql = sql & Format(i, "000") & "','XXXXXXXXXX')"
            conn.Execute sql
        Next i
        conn.Close
        Set conn = Nothing
    End Sub
    					
  2. Inicie Microsoft Access 2000 y vincular a la tabla tmp_chartest que se creó en el paso anterior.
  3. Abra la tabla recién vinculada y desplazarse al último registro de la tabla.
  4. Agregar un nuevo registro con un campo F1 = 071 y campo F2 = XXXXXXXXXX.
  5. Ficha fuera del registro, y verá # eliminado aparece en todos los campos.

Propiedades

Id. de artículo: 264766 - Última revisión: domingo, 23 de febrero de 2014 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft Access 2000 Service Pack 1
  • Microsoft Access 2002 Standard Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbbug kbdatabase kbfix kbjet KB264766 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 264766

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com