Pergunta

O cenário em questão relaciona-se com o tão caluniado Microsoft Jet Database Engine . A afirmação foi que a Data Access Objects tecnologia (DAO) acesso a dados é 'nativo' para Jet , a implicação é que a criação de um objeto via o modelo DAO é 'superior' a fazer o mesmo por meio de código SQL executado de dentro do Microsoft Access interface do usuário.

Além disso, foi afirmado que, se você não poderia criar algo via DAO, então, por definição, não é 'nativo' para Jet.

Para mim, esta definição de 'nativo' parece estar perdido. Há uma série de objetos Jet que, por razões políticas históricas e da Microsoft, foram omitidos ou apenas parcialmente implementadas no DAO (restrições CHECK, tipos de largura fixa de dados, o tipo de dados DECIMAL, tipos de dados compressíveis, etc), mas foram incluídos no SQL linguagem de definição de dados do Jet (DDL). A intuição só me diz que Jet SQL DDL deve ser considerado 'nativo' para o motor Jet.

Então, minha pergunta é: por que uma tecnologia aparentemente externo (DAO) ser considerado 'nativo' e outra tecnologia aparentemente interna (SQL DDL) ser considerado 'não-nativos'? Eu deveria estar incomodando-me sobre se algo é 'nativo' ou de outra forma?

Foi útil?

Solução

Talvez eu esteja errado aqui, mas eu sempre entendeu assim:

  • o motor de base de dados MS Jet é por todos os meios um motor de base de dados (fraca potência ou não)
  • interface de que é "nativo" para o mundo exterior é um dialeto SQL

Considerando o seguinte:

  • DAO é uma das camadas de abstração de banco de dados da Microsoft, projetados para uso em um ambiente COM como VBA ou scripts do Windows
  • foi desenvolvido com o Access (que pode ser encarado como uma interface de usuário / ferramenta de relatórios para MS Jet, uma vez que MS Jet pode existir sem MS Access), e é fortemente empacotado com o MS Jet e MS Access, no entanto, é na mesma categoria onde ADO estaria em

Outras dicas

Esta questão não é realmente postou em boa fé, na minha opinião - é inteiramente dirigida a mim e os comentários que tenho vindo a fazer em reponse aos seus comentários. Eu já respondeu a todas as questões em outros lugares, mas apenas para tornar as coisas claras, deixe-me delinear a história do Jet.

Jet foi introduzida no início dos anos 90, juntamente com o Access. Entre versão 1 e 2, MS adquirida FoxPro e incorporada sua tecnologia "Rushmore" em Jet. Algures ao longo deste período de tempo, desenvolveu MS DAO como a camada de interface para o Jet. Eu não sei para um fato que DAO já teve uma existência como algo além de uma camada de interface de dados que Jet usado para todos os acesso a dados, mas é assim que olharam para mim. Jet foi uma bastante boa escolha para isso, pois com ODBC e ISAMs instaláveis, poderia fazer apenas sobre qualquer um dos formatos de banco de dados, em seguida,-comuns parecem e se comportam em seu aplicativo da mesma forma como os dados Jet nativos pareciam e se comportavam. Naqueles dias, o mercado de banco de dados desktop foi dominado por dBase e suas variantes e Paradox. Estes foram todos os motores db área de trabalho, e não bancos de dados do servidor. Acesso a bases de dados do servidor era geralmente através de ODBC, mas não estava naquele momento tão importante para os desenvolvedores de aplicativos db desktop. Jet gerido bastante bem a ligação a fontes de dados ODBC e utilizá-los muito eficiente, embora, às vezes, cometem erros (e é por isso ODBCDirect foi introduzido em Jet, que seria ignorar certos aspectos dos dados do Jet processamento motor).

Agora, paralelamente à ascensão de Acesso / Jet / DAO, Visual Basic foi o produto quente para desenvolvimento de aplicativos do Windows generalizada e antes do florescimento da Web, VB foi linguagens de programação mais amplamente utilizado no mundo. DAO e Jet fornecido desenvolvedores VB com uma interface para todos os tipos de armazenamentos de dados, e as ferramentas de desenvolvimento VB foram bem integrado com eles. Assim, depois de ODBC, DAO tornou-se camada de interface de dados chave do MS, utilizando o motor Jet para trabalhar com todos os tipos de dados.

Naturalmente, este teve seus problemas e também foi muito limitante em que Jet / DAO (e VB) foram todas as ferramentas orientadas para o ambiente de trabalho. Pelos anos 90 mid-de-final MS estava tentando expandir a partir de um fornecedor de softwares de desktop, do sistema operacional de desktop e ferramentas de desenvolvimento para um provedor de software empresarial. Então, MS necessário para desenvolver interfaces de dados mais robustos, algo como ODBC para servidores de banco de dados, mas com todas as características modernas que bancos de dados de servidor mais recentes oferecidos. OLEDB foi a resposta para este com ADO como a camada de interface no topo do OLEDB (apenas como DAO é a camada de interface no topo do Jet). Embora o objetivo da DAO era fornecer acesso a muitas lojas de dados através do motor de banco de dados Jet, OLEDB foi uma camada de interface de dados mais neutro, como ODBC, uma camada de abstração de banco de dados e ADO foi a interface para que a camada de interface de dados neutra.

Sobre a questão de DDL "nativo", é um facto que, antes de Jet 4 houve um apoio muito pobre para SQL DDL. Ou seja, não eram características do Jet que não eram controláveis ??via SQL DDL. Em vez disso, você tinha que usar DAO para controlar esses recursos. Enquanto o do Jet Database Engine Programmer certamente inclui exemplos de DDL ao lado dos exemplos DAO, os exemplos DAO são capazes de fazer muito mais porque o Jet DDL SQL nunca apoiou todas as características de bancos de dados Jet.

A repartição que parece ser tão confuso surgiu por causa da política de MS internos. Em 1999, quando o MS introduzido Access 2000 (com a nova versão do Jet, 4.0), MS queria se aposentar DAO em favor da ADO. MS fez ADO a camada de interface de dados padrão no Access, mesmo quando não fazia sentido usar o ADO (ou seja, o seu armazenamento de dados foi Jet). Como parte deste esforço, MS não actualizar completamente DAO para apoio incorporar para todos os novos recursos do Jet 4 - em vez disso, colocar os seus esforços nesta frente no ADO. O resultado foi que a camada de interface de dados nativo do Jet, DAO, suporte faltava para Jet características que a camada de interface neutra banco de dados, ADO, oferecido. This foi, na minha opinião, uma forma particular de douchebaggery por parte da Microsoft. MS intencionalmente não estava atualizando camada de interface nativo do Jet, a fim de forçá-lo a usar a interface não-nativo. Assim, em vez de DAO-> Jet, você tinha que usar ado-> OLEDB-> Jet, mesmo que para algumas coisas que eram aspectos nativas do Jet Database Engine (tais como alguns tipos de dados para os campos).

O objetivo da Microsoft era para matar DAO inteiramente, e realmente, para matar-se Jet. Eles queriam clientes para se deslocar para SQL Server.

Mas uma série de coisas aconteceu. Por um lado, com base em COM ADO, que era, não poderia caber muito bem com .NET e, portanto, com base em COM clássico ADO acabou sendo abandonado e ADO.NET criado para tomar o seu lugar. As semelhanças ou afinidades entre ADO e ADO.NET são bastante superficial e são baseadas em completamente diferentes modelos de interação de dados, com ADO.NET sendo quase inteiramente concebido em torno da idéia de dados desconectados, enquanto ADO não foi (embora certamente suportado certos tipos de desligado dados de acesso).

Com o ADO indo para fora da janela, MS tinha um buraco no meio da sua linha de produtos. O desenvolvedor VB clássico ou desenvolvedor Access não estava indo para ver muito benefício em .NET, porque todo o modelo de acesso a dados não se encaixava. Assim, pela liberação de Access 2002, MS tinha mudou de curso e colocar DAO volta em seu lugar como a camada de padrão de interface de dados para dados Jet (e todos os outros armazenamentos de dados Jet pode trabalhar com via, por exemplo, ODBC, etc.). Infelizmente, enquanto MS foi agora depreciativo ADO para uso com Jet, eles não optar por corrigir a versão aleijada do DAO que foi com ele. Talvez eles não fazem isso porque por este ponto da decisão tinha sido tomada de desembolsar o Jet existente 4 em um mecanismo de banco de dados de propriedade do grupo de desenvolvimento Access. Esta se tornou a ACE e é, para todos os efeitos, Jet 4.5. Uma nova versão do DAO foi lançado (embora disfarçado um pouco com o seu nome user-friendly ser "Biblioteca Microsoft Office 12.0 Acesso de banco de dados de objeto", enquanto o nome da DLL é agora ACEDAO.DLL). Eu não sei até que ponto as características ausentes no DAO 3.6 (a versão Jet 4) foram adicionadas à versão ACE de DAO. Eu não sei porque eu não necessidade qualquer um desses recursos para que nem sequer sabem o que são.

Em qualquer caso, neste momento, existe agora o desenvolvimento em curso sobre Jet (que tinha sido prometido que Jet 4 foi o fim) e sobre o nativo camada de interface de dados para ele (DAO, que também tinha sido prometido estava morto). Este desenvolvimento contínuo é agora dentro do grupo aplicativo Access da Microsoft (em oposição ao Windows, onde Jet 4 anteriormente estava sendo mantida).

A Microsoft adicionou modos de compatibilidade no Access para usar o que eles chamam de ANSI-92 modo SQL. Isto é suposto para permitir que você escrever SQL que é "compatível" com dialeto SQL do SQL Server. Bem, ele suporta algumas coisas (você pode usar os curingas SQL Server e usar () para tabelas derivadas em vez de screwy do Jet []. Como Alias), mas não está muito perto de TSQL. Mas fora do Access, a única maneira de usar este modo SQL "ANSI-92" é usar ADO para se conectar ao Jet. si DAO ainda usa velho dialeto SQL do Jet. Isso mostra que Jet não está fornecendo suporte para este modo de si mesmo, mas ele está sendo prestados por camadas acima Jet.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top