Pergunta

O que é melhor (e por que razões) para usar para se conectar ao MS SQL, Oracle ou Firebird de um aplicativo Delphi Win32 -? ADO ou DBX (banco de dados Express)

Ambos permitem que você se conectar aos principais bancos de dados. Eu gosto da maneira ADO faz tudo com uma mudança seqüência de conexão eo fato de que ADO e os drivers estão incluídos no Windows então nada extra para implantar (ao que parece, me corrija se eu estiver errado).

DBX também é flexível e posso compilar os controladores em meu aplicativo, que não posso?

Estou realmente interessado em ter uma única fonte, se possível, com a capacidade de variar bancos de dados, dependendo do departamento de TI do cliente / preferências.

Mas o que é mais fácil de programa, o melhor, usa memória de forma mais eficiente? Quaisquer outras coisas para diferenciá-los em?

Obrigado, Richard

Foi útil?

Solução

ADO é simples de usar e é lá, você só deve certificar-se de instalar o driver cliente correponding no lado do cliente.

Eu encontrei DBX mais flexível e é melhor integrado no IDE e outras tecnologias como DataSnap.

Para o mesmo efeito do que você, eu usei DBX com drivers de terceiros de DevArt . Você pode compilar os drivers com o seu pedido, se você comprar as fontes motoristas.

Outras dicas

No início da Delphi, as pessoas elogiou o multi-SGBD apoio em Delphi. Todos os amei o BDE (porque essa era a única maneira de fazer isso).

Mas quando se olha para os clientes ao longo de mais, em seguida, na última década, eu vi uma diminuição constante de apoio multi-DBMS em suas aplicações.

O custo de suportar vários SGBD de uma aplicação é alta.

Não só porque você tem que ter conhecimento de cada DBMS, mas também porque cada DBMS tem seu próprio conjunto de peculiaridades, onde você tem que se adaptar para a sua camada de acesso a dados. Estes não só incluem diferenças na sintaxe e tipos de dados subjacentes, mas também a otimização estratégias.

Além disso, alguns DBMS trabalhar melhor com ADO, alguns melhor com uma conexão direta (como pular o seu cliente Oracle todos juntos).

Finalmente testar todas as combinações de seu software com sistemas de vários DBMS é muito intensivo.

Eu estive envolvido em alguns projetos onde tivemos que mudar o backend DBMS e / ou a tecnologia de acesso de dados (a partir ou seja BDE para DBX, ou de DBX para uma conexão direta). Alterar o backend sempre foi muito mais doloroso do que mudar a tecnologia de acesso de dados. Multi-tier abordagens fez um pouco mais fácil, mas aumentou os graus de liberdade e por isso os esforços de teste.

Alguns dos produtos que eu vejo que o apoio multi-DBMS estão em aplicações de mercado verticais onde o cliente final já tem sua própria infra-estrutura de DBMS e as necessidades de aplicação para se adaptar a isso. Por exemplo, em áreas governamentais holandeses, a Oracle tem sido muito forte, mas SQL Server estabeleceu bastante uma base de usuários bem.

Então, você precisa pensar sobre o que combinações de DBMS você quer apoio, não só em termos de funcionalidade, mas também em termos de custos.

Se você furar a um DBMS, então não faz sentido ir para uma camada de acesso de dados genérico como BDE, DBX ou ADO: vale a pena fazer uma conexão mais direta possível. Minha experiência me ensinou que estas combinações funcionam bem:

Espero que isso lhe dá alguma introspecção nas possibilidades e limitações do suporte a vários DBMS de suas aplicações Delphi.

- jeroen

Regra geral: todas as camadas de componentes possivelmente irá adicionar uma camada adicional de bugs. ADO e DBX são invólucros de componentes em torno de funcionalidade de banco de dados padrão, assim, ambos são igualmente fortes. Assim, a escolha adequada deve ser baseada em outros fatores, como os bancos de dados que você deseja usar. Se você deseja se conectar ao MS-Access ou SQL Server, ADO seria a escolha melhor, pois é mais nativo para esses bancos de dados. Mas Firebird e Oracle são mais nativo para os componentes DBX.

Eu, pessoalmente, tendem a usar o ADO da API cru, embora. Então, novamente, eu não usar componentes data-aware em meus projetos. É menos RAD, eu sei. Mas muitas vezes precisam trabalhar desta forma, porque eu geralmente write cliente / aplicativos de servidor com várias camadas entre o banco de dados ea GUI, tornando as coisas mais complicadas.

Os meus dois centavos:. DBX é significativamente mais rápido (em ambos Oracle e SQL), e significativamente mais mimado e mais difícil de implantar

Se o desempenho é um fator, eu iria com DBX. Caso contrário, eu tinha acabado de usar ADO para simplificar.

Como já foi dito, DBX pode ter a vantagem em desempenho bruto em certos casos ou em circunstâncias específicas, mas ADO é a base para um muito maior número de aplicações no mundo por isso, embora o desempenho do ADO pode ser relativamente mais pobres, claramente isso não significa que "inaceitavelmente" pobre.

Para mim, e informado por grandes projetos que tenho trabalhado, o maior "problema" com DBX é que não importa o quão bom ele pode ser, é uma tecnologia de infra-estrutura de chave fornecida por uma empresa de linguagem / ferramentas.

Qualquer um que aplicações construídas sobre a tecnologia BDE anterior vai testemunhar a perturbação causada quando essa tecnologia é obsoleto e não mais suportada. Enquanto nenhuma tecnologia é imune a depreciação por ela do provedor, ADO tem claramente a vantagem quando se trata de suporte da indústria para além do fornecedor de tecnologia se.

Por essa razão eu me agora sempre usar ADO. Apenas mudando a seqüência de conexão nem sempre é a única coisa com que se preocupar quando se muda de um tipo de banco de dados para outro no entanto. Armazenados sintaxe chamada de procedimento pode variar de um provedor ADO para outro, e você ainda tem que prestar atenção a sintaxe SQL que você usa, se você pretende implantar contra vários motores de SQL diferentes, onde o suporte SQL podem variar de para outro.

Para mitigar esses problemas que eu uso meu próprio encapsulamento do modelo ADO objeto. Este encapsulamento não tenta transformar o modelo de objeto em algo que não se assemelha a ADO, ele simplesmente expõe as partes do ADO que eu preciso para usar diretamente em uma forma mais ObjectPascal amigável (e "tipo" seguro) (por exemplo enum tipos e conjuntos para constantes e bandeiras etc, ao invés de apenas dezenas se não centenas de constantes inteiras).

Meu encapsulamento também cuida de algumas das variações menores em diferentes comportamentos do fornecedor / requisitos, tais como as diferenças mencionadas anteriormente na sintaxe chamada de procedimento armazenado.

Eu deveria dizer também que semelhante a um outro cartaz, eu há muito tempo parou utilizado "dados controles conscientes", que abre esta abordagem. Se você precisa ou desejo de usar dados controles conscientes e deseja usar ADO, então você não pode usar ADO diretamente e em vez disso deve encontrar alguma encapsulamento que expõe o ADO através do VCL conjunto de dados modelo.

ADO é o mundo da Microsoft

DBX foi criada no início (Delphi 6) para a plataforma de cruz e Kylix

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