ID do artigo: 214854 - Última revisão: sexta-feira, 5 de dezembro de 2003 - Revisão: 4.1

INFO: Aprimorados ODBC DataType mapeamentos com o Jet 4.0

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

O Microsoft Data Access Components (MDAC) versão 2.1 instala o mecanismo de banco de dados do Microsoft Jet 4.0. O mecanismo de banco de dados Microsoft Jet é usado, o driver de ODBC do Microsoft Access, o Microsoft Jet OLE DB Provider e o Microsoft Data Access Objects (DAO) para fornecer acesso a bancos de dados do formato do Microsoft Access, bem como vários ISAM do Jet e ODBC fontes de dados.

Por exemplo, você pode usar o ActiveX Data Objects (ADO), objetos de dados remoto (RDO) ou Data Access Objects (DAO) para obter acesso ao Microsoft Jet, usando qualquer um dos seguintes métodos:

   ADO -> OLE DB -> Jet OLE DB Provider -> Jet 
   ADO -> OLE DB -> MSDASQL -> ODBC -> Access ODBC Driver -> Jet
   DAO -> Jet
   RDO -> ODBC -> Access ODBC Driver -> Jet
				

Observação : "MSDASQL" acima é o Microsoft ODBC Provider para OLEDB, que é um provedor OLE DB que pode conversar com qualquer driver de ODBC (e assim permitir ADO falar com qualquer driver de ODBC).

Microsoft Jet próprio permite acesso aos seguintes fontes de dados:

   Jet -> ODBC -> Non-ODBC Desktop Driver -> Any non-Jet data source
   Jet -> Jet ISAM Driver -> Jet ISAM data source
   Jet -> Microsoft Access database
				

Observação : um "driver do ODBC Desktop" é qualquer um dos drivers ODBC da Microsoft que usa o Microsoft Jet internamente para acessar uma fonte de dados. Não há suporte para usando qualquer um dos drivers do ODBC Desktop do Jet. Por exemplo, usar o driver de ODBC do Microsoft Excel não tem suporte do Jet. Jet suporta usando o driver ISAM do Microsoft Excel, para que o driver ISAM do Excel possa ser usado em vez disso, nesse caso específico. Você pode verificar se um driver de ODBC é um driver ODBC para área de trabalho Examinando o nome do arquivo driver no painel de controle administrador ODBC sob a seção de drivers. Se o nome do arquivo driver for Odbcjt32.dll, o driver é um driver ODBC para desktop e não há suporte para uso com o Jet via ODBC.

Microsoft Jet 4.0 fornece um conjunto aprimorado de tipo de dados ODBC para mapeamentos de tipo de dados Jet versus o mecanismo de banco de dados Microsoft Jet 3.5. Por exemplo, mapas do Jet 4.0 SQL_DECIMAL e campos do tipo SQL_NUMERIC para um novo de dados Jet 4.0 tipo chamado decimal, fornecendo um mapeamento mais próximo para o tipo de dados ODBC real. O tipo de dados Jet 4.0 decimal é um dados numérico exato tipo (chamado um inteiro dimensionado) que armazena valores de (10 ^ 28) -1 a-(10^28). Com o tipo de dados decimal, você pode definir campos com precisão e escala de (1,0) até (28,28). Jet 3.5 mapeia campos SQL_DECIMAL e SQL_NUMERIC para o tipo de dados numéricos mais próximo do Jet acordo com a precisão e escala do campo ODBC, que tipo de dados Jet numérico, como Double em certos casos resultados no mapeamento de um não-exato (ponto flutuante).

Mais Informações

Antes do mecanismo de banco de dados Microsoft Jet mapeia seus tipos de dados para uma tabela ODBC, ele chama a função de API ODBC SQLColumns para coletar informações sobre o tipo de dados ODBC, precisão e escala para cada coluna na tabela. Usando essa informações de tipo ODBC, Jet corresponde a cada tipo de dados ODBC com o tipo de dados Jet apropriado. Este artigo resume o tipo de dados ODBC para mapeamentos de tipo de dados Jet usado pelo Jet 3.5 e o Jet 4.0.

Observação: O tipo de dados Jet LongBinary está listado como "Ole Object" na interface do usuário designer de tabela Microsoft Access.

ODBC para mapeamentos de tipo de dados Jet

ODBC SQL Type     Precision  Scale Jet 3.5 Type Jet 40 Type
-----------------------------------------------------------
SQL_BIT           N/A        N/A   Boolean      Boolean
SQL_TINYINT       N/A        N/A   Byte*        Byte*
SQL_TINYINT       N/A        N/A   Integer*     Integer*
SQL_SMALLINT      N/A        N/A   Integer      Integer
SQL_INTEGER       N/A        N/A   Long         Long
SQL_REAL          N/A        N/A   Single       Single
SQL_FLOAT         N/A        N/A   Double       Double
SQL_DOUBLE        N/A        N/A   Double       Double
SQL_DECIMAL       0 To 4     0     Integer      Decimal
SQL_DECIMAL       5 To 9     0     Long         Decimal
SQL_DECIMAL       10 to 15   0     Double       Decimal
SQL_DECIMAL       <=15       >0    Double       Decimal
SQL_DECIMAL       16 To 28   N/A   Text         Decimal
SQL_DECIMAL       > 28       N/A   Text         Text
SQL_NUMERIC       0 To 4     0     Integer      Decimal
SQL_NUMERIC       5 To 9     0     Long         Decimal
SQL_NUMERIC       10 to 15   0     Double       Decimal
SQL_NUMERIC       <=15       >0    Double       Decimal
SQL_NUMERIC       16 To 28   N/A   Text         Decimal
SQL_NUMERIC       > 28       N/A   Text         Text
SQL_CHAR          <= 255     N/A   Text         Text
SQL_CHAR          > 255      N/A   Memo         Memo
SQL_VARCHAR       <= 255     N/A   Text         Text
SQL_VARCHAR       > 255      N/A   Memo         Memo
SQL_LONGVARCHAR   N/A        N/A   Memo         Memo
SQL_WCHAR         <= 255     N/A   Unsupported  Text
SQL_WCHAR         > 255      N/A   Unsupported  Memo
SQL_WVARCHAR      <= 255     N/A   Unsupported  Text
SQL_WVARCHAR      > 255      N/A   Unsupported  Memo
SQL_WLONGVARCHAR  N/A        N/A   Unsupported  Memo
SQL_DATE          N/A        N/A   DateTime     DateTime
SQL_TIME          N/A        N/A   DateTime     DateTime
SQL_TIMESTAMP     N/A        N/A   DateTime     DateTime
SQL_BINARY        <=255      N/A   Binary       Binary
SQL_BINARY        256 To 510 N/A   LongBinary   Binary
SQL_BINARY        > 510      N/A   LongBinary   LongBinary
SQL_VARBINARY     <=255      N/A   Binary       Binary
SQL_VARBINARY     256 To 510 N/A   LongBinary   Binary
SQL_VARBINARY     > 510      N/A   LongBinary   LongBinary
SQL_LONGVARBINARY N/A        N/A   LongBinary   LongBinary
SQL_GUID          N/A        N/A   Text         Guid

* An unsigned SQL_TINYINT maps to a Jet Byte, a signed SQL_TINYINT
  maps to an Jet Integer. 
				

Especial mapeamentos de tipo de dados ODBC para Jet para SQL Server

Se o Microsoft Jet é conversar com o driver ODBC do Microsoft SQL Server, os mapeamentos de tipo de dados adicionais seguir ocorrem:
ODBC SQL Type     Precision  Scale Jet 3.5 Type Jet 40 Type
-----------------------------------------------------------
SQL_DECIMAL       10         4     Currency     Currency

SQL_DECIMAL       19         4     Currency     Currency
SQL_NUMERIC       10         4     Currency     Currency
SQL_NUMERIC       19         4     Currency     Currency
				

Código para verificação de mapeamentos de tipo de dados

O seguinte código de exemplo pode ser usado para verificar a maioria dos mapeamentos nas tabelas acima. Execute o código usando o DAO 3.5 e DAO 3.6 (obtido com o Office 2000) para verificar os mapeamentos de tipo de dados Jet 3.5 e o Jet 4.0, respectivamente.

Observação: O código requer um servidor de banco de dados Microsoft SQL Server 7.0; você precisará ajustar a seqüência de caracteres de conexão se o banco de dados do SQL Server estiver em um computador diferente (alterar a SERVER=(Local); símbolo para SERVER = nome do servidor;).
   Option Explicit

   ' Various constant strings.
   Const strConnect = "ODBC;Driver=SQL Server;SERVER=(Local);" & _
      "DATABASE=Pubs;UID=sa;PWD=;"
   Const strSelectSQL = "select * from tmpAllTypes"
   Const strDropTableSQL = "drop table tmpAllTypes"
   ' Outputs a listing of ODBC -> Jet Data Type mappings using a
   ' SQL Server 7.0 table as the data source.
   Sub ODBCJetMapTest()
      Dim eng As New DAO.DBEngine
      Dim qd As DAO.QueryDef
      Dim db As DAO.Database
      Dim rs As DAO.Recordset
      Dim f As DAO.Field
      Dim strSQL As String

      ' Verify DAO version used.
      ' Reference "Microsoft DAO 3.51 Object Library" to see 
      ' Jet 3.5 mappings or "Microsoft DAO 3.6 Object Library"
      ' to view Jet 4.0 ODBC mappings.
      Debug.Print "ODBCJetMapTest is using DAO version " & _
         eng.Version & "."

      ' Open SQL Server database connection.
      Set db = eng.OpenDatabase("", False, False, strConnect)

      ' Verify SQL Server version.
      Set qd = db.CreateQueryDef("")
      qd.Connect = strConnect
      qd.sql = "exec sp_server_info 500"
      Set rs = qd.OpenRecordset()
      Debug.Print "SQL Server version is " & _
         rs.Fields("attribute_value") & _
         " (version 7.X or greater required)."
      rs.Close

      ' Drop and re-create test table.
      On Error Resume Next
      db.Execute strDropTableSQL, dbSQLPassThrough
      On Error GoTo 0

      ' Build our create table SQL.
      strSQL = "CREATE TABLE tmpAllTypes("

      ' Common numeric mappings.
      AddField strSQL, "SQL_BIT", "bit", Empty
      AddField strSQL, "SQL_TINYINT", "tinyint", Empty
      AddField strSQL, "SQL_SMALLINT", "smallint", Empty
      AddField strSQL, "SQL_INTEGER", "int", Empty
      AddField strSQL, "SQL_REAL", "real", Empty
      AddField strSQL, "SQL_FLOAT", "float", Empty

      ' Decimal mappings.
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(4, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(5, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(9, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(10, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(15, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(16, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(28, 0)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(4, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(5, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(9, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(10, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(15, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(16, 1)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(28, 1)

      ' SQL Server specific mappings -> Currency.
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(10, 4)
      AddField strSQL, "SQL_DECIMAL", "decimal", Array(19, 4)

      ' Numeric mappings.
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(4, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(5, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(9, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(10, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(15, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(16, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(28, 0)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(4, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(5, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(9, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(10, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(15, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(16, 1)
      AddField strSQL, "SQL_NUMERIC", "numeric", Array(28, 1)

      ' Character mappings.
      AddField strSQL, "SQL_CHAR", "char", Array(255)
      AddField strSQL, "SQL_CHAR", "char", Array(256)
      AddField strSQL, "SQL_VARCHAR", "varchar", Array(255)
      AddField strSQL, "SQL_VARCHAR", "varchar", Array(256)
      AddField strSQL, "SQL_WCHAR", "nchar", Array(255)
      AddField strSQL, "SQL_WCHAR", "nchar", Array(256)
      AddField strSQL, "SQL_WVARCHAR", "nvarchar", Array(255)
      AddField strSQL, "SQL_WVARCHAR", "nvarchar", Array(256)

      ' Binary mappings.
      AddField strSQL, "SQL_BINARY", "binary", Array(255)
      AddField strSQL, "SQL_BINARY", "binary", Array(256)
      AddField strSQL, "SQL_BINARY", "binary", Array(510)
      AddField strSQL, "SQL_BINARY", "binary", Array(511)
      AddField strSQL, "SQL_LONGVARBINARY", "image", Empty

      ' Date mappings.
      AddField strSQL, "SQL_TIMESTAMP", "datetime", Empty
      
      ' Specialized mappings.
      AddField strSQL, "SQL_GUID", "uniqueidentifier", Empty, ")"

      ' Create table.
      db.Execute strSQL, dbSQLPassThrough

      ' Open recordset on table and dump out ODBC -> Jet mappings.
      Set rs = db.OpenRecordset(strSelectSQL, dbOpenForwardOnly, _
         dbReadOnly, dbReadOnly)
      For Each f In rs.Fields
         Debug.Print f.Name & " maps to " & GetJetTypeString(f.Type) & "."
      Next f
      rs.Close
      On Error Resume Next
      db.Execute strDropTableSQL, dbSQLPassThrough
      On Error GoTo 0
      db.Close

   End Sub
   ' Function to return string constant for Jet Type.
   Function GetJetTypeString(lngDataTypeEnum As Long) As String
      Dim strReturn As String
      strReturn = "UNKNOWN"
      Select Case lngDataTypeEnum
         Case dbBigInt: strReturn = "dbBigInt"
         Case dbBinary: strReturn = "dbBinary"
         Case dbBoolean: strReturn = "dbBoolean"
         Case dbByte: strReturn = "dbByte"
         Case dbChar: strReturn = "dbChar"
         Case dbCurrency: strReturn = "dbCurrency"
         Case dbDate: strReturn = "dbDate"
         Case dbDecimal: strReturn = "dbDecimal"
         Case dbDouble: strReturn = "dbDouble"
         Case dbFloat: strReturn = "dbFloat"
         Case dbGUID: strReturn = "dbGUID"
         Case dbInteger: strReturn = "dbInteger"
         Case dbLong: strReturn = "dbLong"
         Case dbLongBinary: strReturn = "dbLongBinary"
         Case dbMemo: strReturn = "dbMemo"
         Case dbNumeric: strReturn = "dbNumeric"
         Case dbSingle: strReturn = "dbSingle"
         Case dbText: strReturn = "dbText"
         Case dbTime: strReturn = "dbTime"
         Case dbTimeStamp: strReturn = "dbTimeStamp"
         Case dbVarBinary: strReturn = "dbVarBinary"
      End Select
      GetJetTypeString = strReturn
   End Function
   ' Function to append a SQL token to a SQL string.
   Sub AddField(sql As String, FieldName As String, SQLType As String, _
   PS As Variant, Optional Terminator As String = ",")
      If IsEmpty(PS) Then
         sql = sql & FieldName & " " & SQLType
      Else
         sql = sql & FieldName & "_" & Format(PS(0), "00")
         If UBound(PS) = 0 Then
            sql = sql & " " & SQLType
            sql = sql & "(" & PS(0) & ")"
         Else
            sql = sql & "_" & Format(PS(1), "00") & " " & SQLType
            sql = sql & "(" & PS(0) & "," & PS(1) & ")"
         End If
      End If
      sql = sql & Terminator
   End Sub
				

Referências

Para obter mais informações sobre mapeamentos de tipo de dados ODBC e Jet, consulte o capítulo 9 "Desenvolvimento de aplicativo cliente/servidor" do guia do programador do Microsoft Jet banco de dados , Second Edition.

A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft OLE DB Provider for Jet 4.0
Palavras-chave: 
kbmt kbdatabase kbinfo kbjet kbprovider KB214854 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 214854  (http://support.microsoft.com/kb/214854/en-us/ )