• • •

Redondeo Entero

Este CheckBox aparece en aquellas columnas de la base de datos que tienen un tipo de datos entero. Marcando esta opción, los datos de tipo numérico con decimales serán redondeados a un entero durante la fase de lectura de los datos.

Para garantizar resultados predecibles, Excel To Database implementa el estándar MidpointRounding.AwayFromZero. Ver MidpointRounding Enumeración.
Esto asegura que un valor como 2.5 siempre se convierta en 3, independientemente de si el driver de la base de datos utiliza redondeo bancario o truncado.

Cuando se intenta cargar un número no entero en un campo de tipo entero y esta opción no está marcada ni marcada la opción Sin Errores de Conversión se produce un error de conversión. Ello es debido a que el dato no puede convertirse al tipo de datos deseado, y por tanto se intenta cargar el contenido de la celda como una cadena de caracteres.
El mensaje que Excel To Database presenta será similar al siguiente:

Celda: A3, Valor: 2.1, Tabla: Tabla Redondeo Enteros, Columna: Byte
  El contenido de la Celda no ha podido convertirse al tipo de datos Byte
Celda: A3, Valor: 2.1, Tabla: Tabla Redondeo Enteros, Columna: Byte
  La cadena de entrada no tiene el formato correcto.No se puede almacenar "2.1" en la columna Byte. El tipo esperado es Byte.

En estos casos se produce una excepción que hace que no se inicie la fase de carga de datos. La solución para este problema es marcar la opción Sin Errores de Conversión.

El software, también actúa como un filtro inteligente: si el redondeo excede la capacidad física del tipo de dato (ej. campo de tipo Byte: redondear 255.5 produce una salida de 256, que excede la capacidad del campo), se genera una advertencia controlada. Recomendamos usar la opción Sin Errores de Conversión para gestionar estos casos mediante nulos o valores por defecto.

MS Access: Redondeo Entero

Para mostrar el comportamiento de esta opción con MS Access se utiliza la Base de Datos del apartado anterior que contiene la siguiente tabla y el Libro Excel del apartado anterior. Del Libro Excel se utilizará la Hoja mostrada en la figura siguiente:

Option Compare Database
Option Explicit

Public Sub CreaTablaRedondeoEnteros()
On Error Resume Next

  CurrentProject.Connection.Execute "DROP TABLE [Tabla Redondeo Enteros]"

On Error GoTo Sub_Err

  CurrentProject.Connection.Execute "CREATE TABLE [Tabla Redondeo Enteros](" & _
    "[Id] COUNTER NOT NULL, " & _
    "[Proveedor Datos] TEXT (255) NOT NULL, " & _
    "[Driver] TEXT (255) NOT NULL, " & _
    "[Byte] BYTE, " & _
    "[Entero] SHORT, " & _
    "[Entero Largo] LONG " & _
  ")"

  Dim db As Object, tbl As Object, fld As Object

  Set db = CurrentDb
  db.TableDefs.Refresh
  Set tbl = db.TableDefs("Tabla Redondeo Enteros")
  tbl.Fields.Refresh
  Set fld = tbl.Fields("Proveedor Datos")
  fld.AllowZeroLength = False
  fld.Properties.Append fld.CreateProperty("UnicodeCompression", 1, True)
  Set fld = tbl.Fields("Driver")
  fld.AllowZeroLength = False
  fld.Properties.Append fld.CreateProperty("UnicodeCompression", 1, True)

  Set fld = tbl.Fields("Byte")
  fld.Properties.Append fld.CreateProperty("Description", 10, "1 Bytes")
  Set fld = tbl.Fields("Entero")
  fld.Properties.Append fld.CreateProperty("Description", 10, "Entre -32.768 y 32.767 - 2 Bytes")
  Set fld = tbl.Fields("Entero Largo")
  fld.Properties.Append fld.CreateProperty("Description", 10, "Entre -2.147.483.648 y 2.147.483.647 - 4 Bytes")

  CurrentProject.Connection.Execute "CREATE UNIQUE INDEX PrimaryKey ON [Tabla Redondeo Enteros] (Id ASC) WITH PRIMARY"

Sub_Exit:
  Set fld = Nothing
  Set tbl = Nothing
  If Not db Is Nothing Then db.Close
  Set db = Nothing
  Exit Sub
  
Sub_Err:
  MsgBox "Se ha producido un error en 'CreaTablaRedondeoEnteros'." & vbNewLine & vbNewLine & vbTab & Err.Description, , "Error Nº: " & Err.Number
  Resume Sub_Exit
  Resume
End Sub

MS Access: Hoja Excel para Redondeo Entero

MS Access: Hoja Excel para Redondeo Entero

Los mensajes mostrados por Excel To Database al intentar cargar la Hoja son los siguientes (opciónes "Redondeo Entero" marcada y "Sin Errores de Conversión" no marcada):

Celda: A3, Valor: 2.1, Tabla: Tabla Redondeo Enteros, Columna: Byte
    Opción "Redondeo Entero" marcada. Valor Redondeado: 2

Celda: B3, Valor: 2.49, Tabla: Tabla Redondeo Enteros, Columna: Entero
    Opción "Redondeo Entero" marcada. Valor Redondeado: 2

Celda: C3, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Entero Largo
    Opción "Redondeo Entero" marcada. Valor Redondeado: 3

Celda: A4, Valor: 2.4599999999995100, Tabla: Tabla Redondeo Enteros, Columna: Byte
    Opción "Redondeo Entero" marcada. Valor Redondeado: 2

Celda: B4, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Entero
    Opción "Redondeo Entero" marcada. Valor Redondeado: 3

Celda: C4, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Entero Largo
    Opción "Redondeo Entero" marcada. Valor Redondeado: 3

Celda: A6, Valor: 255.5, Tabla: Tabla Redondeo Enteros, Columna: Byte
    El contenido de la Celda no ha podido convertirse al tipo de datos Byte
Celda: A6, Valor: 255.5, Tabla: Tabla Redondeo Enteros, Columna: Byte
    La cadena de entrada no tiene el formato correcto.No se puede almacenar '255.5' en la columna Byte. El tipo esperado es Byte.

Celda: B6, Valor: 32767.5, Tabla: Tabla Redondeo Enteros, Columna: Entero
    El contenido de la Celda no ha podido convertirse al tipo de datos Int16
Celda: B6, Valor: 32767.5, Tabla: Tabla Redondeo Enteros, Columna: Entero
    La cadena de entrada no tiene el formato correcto.No se puede almacenar '32767.5' en la columna Entero. El tipo esperado es Int16.

Celda: C6, Valor: 2147483647.5, Tabla: Tabla Redondeo Enteros, Columna: Entero Largo
    El contenido de la Celda no ha podido convertirse al tipo de datos Int32
Celda: C6, Valor: 2147483647.5, Tabla: Tabla Redondeo Enteros, Columna: Entero Largo
    La cadena de entrada no tiene el formato correcto.No se puede almacenar '2147483647.5' en la columna Entero Largo. El tipo esperado es Int32.

Obsérvese que 2.49 es redondeado a 2, mientras que 2.5 es redondeado a 3. También se pueden observar los errores de conversión de tipo de datos cuando el redondeo hace que se desborde la capacidad del campo.

La fase de carga de datos no llega a lanzarse debido a los datos que superan la capacidad del campo. Marcando la opción "Sin errores de conversión" estos datos serán sustituidos por NULL o el valor por defecto y se procederá con la fase de carga de datos.

Excel To Database considera que son tipos de datos enteros los siguientes: Byte, Entero y Entero Largo.

SQL Server: Redondeo Entero

Excel To Database considera que son tipos de datos enteros los siguientes: Tinyint, Int y Bigint. Aunque a los tipos de datos Decimal/Numeric se les indique que la escala es de 0 dígitos, no son considerados como números enteros. Para ellos se le habrá de aplicar la opción "Redondeo Decimal" descrita en el siguiente apartado. Tampoco se considera como entero el tipo de datos Bit.

El comportamiento de Excel To Database con SQL Server para esta opción es el mismo que el descrito para MS Access.

Para mostrar el comportamiento de esta opción con SQL Server se utiliza la tabla descrita a continuación y el Libro Excel del apartado anterior. Del Libro Excel se utilizará la Hoja mostrada en la figura siguiente:

DROP TABLE IF EXISTS [dbo].[Tabla Redondeo Enteros];
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tabla Redondeo Enteros](
  [Bit]                     [bit]           NULL,
  [Tinyint]                 [tinyint]       NULL,
  [Int]                     [int]           NULL,
  [BigInt]                  [bigint]        NULL,

  [Provider]                [varchar](10) COLLATE Modern_Spanish_100_CS_AS NOT NULL,
  [Driver]                  [varchar](50) COLLATE Modern_Spanish_100_CS_AS NOT NULL,
  [Identidad]               [int]                            IDENTITY(1,1) NOT NULL,
PRIMARY KEY CLUSTERED 
(
  [Identidad] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
       ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

SQL Server: Hoja Excel para Redondeo Enteros

SQL Server: Hoja Excel para Redondeo Enteros

Oracle: Redondeo Entero

Para mostrar el comportamiento de esta opción con Oracle se utiliza la siguiente tabla.

CREATE TABLE "Tabla Redondeo Enteros" (
  Id NUMBER(6) GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  Provider               VARCHAR2(10 CHAR),
  Driver                 VARCHAR2(50 CHAR),

  "Int 2"                NUMBER(2),
  "Redondeo 100 (5, -2)" NUMBER(5, -2)
);

El Libro a utilizar es el Libro del apartado anterior, el cual contiene la Hoja de la figura siguiente:

Oracle: Hoja Excel para Redondeo Entero

Oracle: Hoja Excel para Redondeo Entero

En primer lugar, indicar que sólo con el Managed Driver se detectan campos con tipos de datos entero. Con los drivers Oracle® Provider for OLE DB y Oracle ODBC Driver el tipo de datos detectado es decimal. Así, esta opción sólo aparecerá con el Managed Driver.

  • Bugs en Managed Driver (Bulk Copy) (CheckBox "Usar Arrays" no marcada)

    Volver a resaltar que con el Managed Driver y la característica Bulk Copy (opción "Usar Arrays" no marcada) existe un problema similar al descrito en el apartado "Truncar Cadenas". El driver permite la inserción de CUALQUIER COSA sin que ésta tenga que cumplir ninguna de las restricciones definidas en los campos de la tabla.
    Así, por ejemplo, si no se realizan las comprobaciones que hace Excel To Database se obtendría la siguiente carga:

    Oracle: Error Carga Redondeo Entero

    Oracle: Error Carga Redondeo Entero

    Como se puede apreciar, existen registros para el campo "Int 2" que superan ampliamente la restricción de no superar los 2 dígitos. Esto puede hacer que la tabla se quede en un estado inconsistente y, por ejemplo, que la instrucción 'SELECT * FROM "Tabla Redondeo Enteros" ORDER BY ID;' no funcione en "Oracle SQL Developer" como ocurría en el apartado anterior.

    Excel To Database contiene una serie de chequeos para que este tipo de cosas no ocurran. Así, en el "Panel de Resultados" se muestran mensajes del estilo:

    Celda: A7, Valor: 99.6, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 100
    Celda: A7, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
        El Managed Driver de Oracle con NO Arrays contiene un bug que permite insertar datos que no cumplen las restricciones de la columna.
        Marque la opción "Sin Errores de Conversión" para cargar el valor por defecto.
        No se ejecutará la Fase de carga de datos.
    
  • Comportamiento de la opción "Redondeo Entero"

    Cuando esta opción no se encuentra marcada, la Fase de Carga de Datos se inicia. Así, cuando un dato no ha podido convertirse al tipo de datos deseado se intenta cargar la cadena de texto almacenada en la celda de la Hoja. Lo mas probable es que se produzca un error de conversión de tipo de datos y se detenga dicha Fase de Carga de Datos.
    Los mensajes que se muestran para los proveedores de datos OLE DB y ODBC son totalmente distintos a los del Managed Driver, ya que estos proveedores no detectan que los campos almacenan datos de tipo entero, sino "decimal" con precisión y escala. Sin embargo, se muestran dichos mensajes para compararlos con el Managed Driver que si los detecta.

    Celda: B2, Valor: 12345, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 5 es inferior Abs(Escala) 2
        Es posible que el Proveedor de Datos o la Base de Datos redondee el dato.
    
    Celda: A3, Valor: 2.49, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        El contenido de la Celda no ha podido convertirse al tipo de datos Int16
    
    Celda: B3, Valor: 123456, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 6 es inferior Abs(Escala) 2
        Es posible que el Proveedor de Datos o la Base de Datos redondee el dato.
    
    Celda: A4, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        El contenido de la Celda no ha podido convertirse al tipo de datos Int16
    
    Celda: B4, Valor: 1234567, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 7 es inferior Abs(Escala) 2
        Es posible que el Proveedor de Datos o la Base de Datos redondee el dato.
    
    Celda: A5, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
    
    Celda: B5, Valor: 12345678, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 8 es inferior Abs(Escala) 2
        Es posible que el Proveedor de Datos o la Base de Datos redondee el dato.
    
    Celda: A6, Valor: 99.1, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        El contenido de la Celda no ha podido convertirse al tipo de datos Int16
    
    Celda: B6, Valor: 49.5, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100
        El contenido de la Celda no ha podido convertirse al tipo de datos Int64
    
    Celda: A7, Valor: 99.6, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        El contenido de la Celda no ha podido convertirse al tipo de datos Int16
    
    Celda: B7, Valor: 49.4, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100
        El contenido de la Celda no ha podido convertirse al tipo de datos Int64
    
    .NET Connections (Managed Driver (Array Binding) (CheckBox "Usar Arrays" marcado))
    
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'.
        Comando Insert: insert into "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") values(:0, :1, :2, :3)
    {
      "$id": "1",
      "$type": "System.FormatException, mscorlib",
      "Message": "La cadena de entrada no tiene el formato correcto.",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "Source": "mscorlib",
      "HResult": -2146233033
    }
    
    Conexiones OLE DB (Oracle® Provider for OLE DB)
    
    Fila: 4
    Comando: INSERT INTO "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") VALUES (?, ?, ?, ?)
    Comando Select: SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    Excepción:
    {
      "$id": "1",
      "$type": "System.Data.OleDb.OleDbException, System.Data",
      "ErrorCode": -2147217833,
      "Errors": {
        "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.OleDb.OleDbError, System.Data",
            "Message": "ORA-01438: value larger than specified precision allowed for this column",
            "NativeError": 0,
            "Source": "OraOLEDB",
            "SQLState": ""
          }
        ]
      },
      "Message": "ORA-01438: value larger than specified precision allowed for this column",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "Source": "OraOLEDB",
      "HResult": -2147217833
    }
    
        Columna: Redondeo 100    Valor: 12345678
        Columna: Int 2    Valor: 100
        Columna: DRIVER    Valor: OraOLEDB.Oracle
        Columna: PROVIDER    Valor: OLE DB
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'. Error en la Fila: 4
        Query que indica las columnas utilizadas de la Tabla:
        SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    {
      "$id": "1",
      "$type": "System.Data.OleDb.OleDbException, System.Data",
      "ErrorCode": -2147217833,
      "Errors": {
        "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.OleDb.OleDbError, System.Data",
            "Message": "ORA-01438: value larger than specified precision allowed for this column",
            "NativeError": 0,
            "Source": "OraOLEDB",
            "SQLState": ""
          }
        ]
      },
      "Message": "ORA-01438: value larger than specified precision allowed for this column",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "Source": "OraOLEDB",
      "HResult": -2147217833
    }
    
    Nº Filas insertadas: 0
    
    Conexiones ODBC (Oracle ODBC Driver)
    
    Fila: 4
    Comando: INSERT INTO "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") VALUES (?, ?, ?, ?)
    Comando Select: SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    Excepción:
    {
      "$id": "1",
      "$type": "System.Data.Odbc.OdbcException, System.Data",
      "Errors": {
        "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.Odbc.OdbcError, System.Data",
            "Message": "[Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
            "SQLState": "HY000",
            "NativeError": 1438,
            "Source": "SQORA32.DLL"
          }
        ]
      },
      "Source": "SQORA32.DLL",
      "ErrorCode": -2146232009,
      "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "HResult": -2146232009
    }
    
        Columna: Redondeo 100    Valor: 12345678
        Columna: Int 2    Valor: 100
        Columna: DRIVER    Valor: {Oracle en OraDB21Home1}
        Columna: PROVIDER    Valor: ODBC
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'. Error en la Fila: 4
        Query que indica las columnas utilizadas de la Tabla:
        SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    {
      "$id": "1",
      "$type": "System.Data.Odbc.OdbcException, System.Data",
      "Errors": {
        "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.Odbc.OdbcError, System.Data",
            "Message": "[Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
            "SQLState": "HY000",
            "NativeError": 1438,
            "Source": "SQORA32.DLL"
          }
        ]
      },
      "Source": "SQORA32.DLL",
      "ErrorCode": -2146232009,
      "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "HResult": -2146232009
    }
    
    Nº Filas insertadas: 0
    

    Cuando se marca la opción "Redondeo Entero", el redondeo puede hacer que se supere la capacidad del campo y por tanto se produzca el típico error de desbordamiento de la capacidad del campo. Los mensajes que aparecen en los ficheros de .log serán similares a los siguientes.
    Los mensajes para los proveedores OLE DB u ODBC son similares a los anteriores con la salvedad de que ahora se han redondeado los datos.

    Celda: B2, Valor: 12345, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 12300
    
    Celda: A3, Valor: 2.49, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 2
    
    Celda: B3, Valor: 123456, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 123500
    
    Celda: A4, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 3
    
    Celda: B4, Valor: 1234567, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 1234600
    
    Celda: A5, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
    
    Celda: B5, Valor: 12345678, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 12345700
    
    Celda: A6, Valor: 99.1, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 99
    
    Celda: B6, Valor: 49.5, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 0
    
    Celda: A7, Valor: 99.6, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 100
    Celda: A7, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
    
    Celda: B7, Valor: 49.4, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 0
    
    .NET Connections (Managed Driver (Array Binding) (CheckBox "Usar Arrays" marcado)) Opción "Redondeo Entero" marcada
    
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'.
        Comando Insert: insert into "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") values(:0, :1, :2, :3)
    {
      "$id": "1",
      "$type": "Oracle.ManagedDataAccess.Client.OracleException, Oracle.ManagedDataAccess",
      "OracleLogicalTransaction": {
        "$type": "Oracle.ManagedDataAccess.Client.OracleLogicalTransaction, Oracle.ManagedDataAccess",
        "Committed": null,
        "UserCallCompleted": null,
        "ConnectionString": null,
        "LogicalTransactionId": null
      },
      "Errors": {
        "$type": "Oracle.ManagedDataAccess.Client.OracleErrorCollection, Oracle.ManagedDataAccess",
        "$values": [
          {
            "$id": "2",
            "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
            "DataSource": "",
            "Message": "ORA-24381: error(s) in array DML
    https://docs.oracle.com/error-help/db/ora-24381/",
            "Number": 24381,
            "ParseErrorOffset": 97,
            "Procedure": "",
            "Source": "Oracle Data Provider for .NET, Managed Driver",
            "ArrayBindIndex": -1
          },
          {
            "$id": "3",
            "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
            "DataSource": "",
            "Message": "ORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/",
            "Number": 1438,
            "ParseErrorOffset": -1,
            "Procedure": "",
            "Source": "Oracle Data Provider for .NET, Managed Driver",
            "ArrayBindIndex": 3
          },
          {
            "$id": "4",
            "$type": "Oracle.ManagedDataAccess.Client.OracleError, Oracle.ManagedDataAccess",
            "DataSource": "",
            "Message": "ORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/",
            "Number": 1438,
            "ParseErrorOffset": -1,
            "Procedure": "",
            "Source": "Oracle Data Provider for .NET, Managed Driver",
            "ArrayBindIndex": 5
          }
        ]
      },
      "DataSource": "",
      "Message": "ORA-24381: error(s) in array DML
    https://docs.oracle.com/error-help/db/ora-24381/\nORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/\nORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/",
      "Procedure": "",
      "Source": "Oracle Data Provider for .NET, Managed Driver",
      "Number": 24381,
      "IsRecoverable": false,
      "ErrorCode": -2147467259,
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "HResult": -2147467259
    }
    
        Error en la Fila Excel: '5' Error de Oracle: '1438'
        Mensaje: ORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/
        Valores:
            Redondeo 100: 12345700
            Int 2: 100
            DRIVER: Managed Driver (Arrays)
            PROVIDER: .NET
        Error en la Fila Excel: '7' Error de Oracle: '1438'
        Mensaje: ORA-01438: value larger than specified precision allowed for this column
    https://docs.oracle.com/error-help/db/ora-01438/
        Valores:
            Redondeo 100: 0
            Int 2: 100
            DRIVER: Managed Driver (Arrays)
            PROVIDER: .NET
    
    Conexiones OLE DB (Oracle® Provider for OLE DB) Opción "Redondeo Entero" marcada
    
    Fila: 4
    Comando: INSERT INTO "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") VALUES (?, ?, ?, ?)
    Comando Select: SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    Excepción:
    {
      "$id": "1",
      "$type": "System.Data.OleDb.OleDbException, System.Data",
      "ErrorCode": -2147217833,
      "Errors": {
        "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.OleDb.OleDbError, System.Data",
            "Message": "ORA-01438: value larger than specified precision allowed for this column",
            "NativeError": 0,
            "Source": "OraOLEDB",
            "SQLState": ""
          }
        ]
      },
      "Message": "ORA-01438: value larger than specified precision allowed for this column",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "Source": "OraOLEDB",
      "HResult": -2147217833
    }
    
        Columna: Redondeo 100    Valor: 12345700
        Columna: Int 2    Valor: 100
        Columna: DRIVER    Valor: OraOLEDB.Oracle
        Columna: PROVIDER    Valor: OLE DB
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'. Error en la Fila: 4
        Query que indica las columnas utilizadas de la Tabla:
        SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    {
      "$id": "1",
      "$type": "System.Data.OleDb.OleDbException, System.Data",
      "ErrorCode": -2147217833,
      "Errors": {
        "$type": "System.Data.OleDb.OleDbErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.OleDb.OleDbError, System.Data",
            "Message": "ORA-01438: value larger than specified precision allowed for this column",
            "NativeError": 0,
            "Source": "OraOLEDB",
            "SQLState": ""
          }
        ]
      },
      "Message": "ORA-01438: value larger than specified precision allowed for this column",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "Source": "OraOLEDB",
      "HResult": -2147217833
    }
    
    Conexiones ODBC (Oracle ODBC Driver)  Opción "Redondeo Entero" marcada
    
    Fila: 4
    Comando: INSERT INTO "Tabla Redondeo Enteros" ("Redondeo 100", "Int 2", "DRIVER", "PROVIDER") VALUES (?, ?, ?, ?)
    Comando Select: SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    Excepción:
    {
      "$id": "1",
      "$type": "System.Data.Odbc.OdbcException, System.Data",
      "Errors": {
        "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.Odbc.OdbcError, System.Data",
            "Message": "[Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
            "SQLState": "HY000",
            "NativeError": 1438,
            "Source": "SQORA32.DLL"
          }
        ]
      },
      "Source": "SQORA32.DLL",
      "ErrorCode": -2146232009,
      "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "HResult": -2146232009
    }
    
        Columna: Redondeo 100    Valor: 12345700
        Columna: Int 2    Valor: 100
        Columna: DRIVER    Valor: {Oracle en OraDB21Home1}
        Columna: PROVIDER    Valor: ODBC
    Se ha producido una excepción al intentar cargar la Tabla 'Tabla Redondeo Enteros'. Error en la Fila: 4
        Query que indica las columnas utilizadas de la Tabla:
        SELECT "Redondeo 100", "Int 2", "DRIVER", "PROVIDER" FROM "Tabla Redondeo Enteros"
    {
      "$id": "1",
      "$type": "System.Data.Odbc.OdbcException, System.Data",
      "Errors": {
        "$type": "System.Data.Odbc.OdbcErrorCollection, System.Data",
        "$values": [
          {
            "$id": "2",
            "$type": "System.Data.Odbc.OdbcError, System.Data",
            "Message": "[Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
            "SQLState": "HY000",
            "NativeError": 1438,
            "Source": "SQORA32.DLL"
          }
        ]
      },
      "Source": "SQORA32.DLL",
      "ErrorCode": -2146232009,
      "Message": "ERROR [HY000] [Oracle][ODBC][Ora]ORA-01438: value larger than specified precision allowed for this column\n",
      "Data": {
        "$type": "System.Collections.ListDictionaryInternal, mscorlib"
      },
      "InnerException": null,
      "HelpLink": null,
      "HResult": -2146232009
    }
    

    Marcando la opción "Sin Errores de Conversión", estos datos problemáticos serán sustituidos por NULL o el valor por defecto indicado en los Mapeos.
    A continuación se muestra la salida en el Panel de Resultados cuando estas dos opciones se encuentran marcadas. Tenga en cuenta que Excel To Database redondea los datos con MidpointRounding.AwayFromZero. Ver MidpointRounding Enumeración.

    Celda: B2, Valor: 12345, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 12300
    
    Celda: A3, Valor: 2.49, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 2
    
    Celda: B3, Valor: 123456, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 123500
    
    Celda: A4, Valor: 2.5, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 3
    
    Celda: B4, Valor: 1234567, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 1234600
    
    Celda: A5, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
        Se intentará cargar la celda como NULL (o el valor por defecto). Opción "Sin Errores de Conversión" marcada.
    
    Celda: B5, Valor: 12345678, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 12345700
    
    Celda: A6, Valor: 99.1, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 99
    
    Celda: B6, Valor: 49.5, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 0
    
    Celda: A7, Valor: 99.6, Tabla: Tabla Redondeo Enteros, Columna: Int 2
        Opción "Redondeo Entero" marcada. Valor Redondeado: 100
    Celda: A7, Valor: 100, Tabla: Tabla Redondeo Enteros, Columna: Int 2, Precisión: 2
        El Nº de dígitos '3' supera los permitidos '2'
        Se intentará cargar la celda como NULL (o el valor por defecto). Opción "Sin Errores de Conversión" marcada.
    
    Celda: B7, Valor: 49.4, Tabla: Tabla Redondeo Enteros, Columna: Redondeo 100, Precisión: 10, Escala: -2
        Nº de ceros significativos a la izquierda del separador decimal 0 es inferior Abs(Escala) 2
        Opción "Redondeo Entero" marcada. Valor redondeado: 0
    

Preguntas Frecuentes

¿Qué algoritmo de redondeo utiliza la aplicación?

Utiliza AwayFromZero, donde los valores intermedios (.5) siempre redondean hacia el número superior más alejado del cero.

¿Por qué recibo un error de formato al cargar decimales en enteros?

Porque la base de datos no puede convertir "2.1" directamente a un entero. Debes marcar la opción Redondeo Entero para que el software realice la conversión antes de la carga.