Depois de terminar o seu Solução de banco de dados Delphi, a etapa final é implantá-lo com êxito no computador do usuário.
ConnectionString On-The-Fly
Se você estava usando componentes dbGo (ADO), oConnectionString propriedade do TADOConnection especifica as informações de conexão para o armazenamento de dados.
Obviamente, ao criar aplicativos de banco de dados que devem ser executados em várias máquinas, a conexão com a fonte de dados não deve ser codificada no executável. Em outras palavras, o banco de dados pode estar localizado em qualquer lugar no computador do usuário (ou em algum outro computador em uma rede) - a cadeia de conexão usada no objeto TADOConnection deve ser criada em tempo de execução. Um dos locais sugeridos para armazenar os parâmetros da cadeia de conexão é o Registro do Windows (ou, você pode optar por usar o "comum" Arquivos INI).
Em geral, para criar a cadeia de conexão em tempo de execução, é necessário
a) coloque o caminho completo para o banco de dados no registro; e
b) sempre que você iniciar o aplicativo, leia as informações do Registro, "crie" o ConnectionString e "abra" o ADOConnection.
Base de dados... Conectar!
Para ajudar você a entender o processo, criamos um aplicativo "esqueleto" de amostra que consiste em um formulário (formulário principal do aplicativo) e um módulo de dados. Os Módulos de Dados da Delphi fornecem uma ferramenta organizacional conveniente que é usada para isolar as partes do seu aplicativo que lidam com a conectividade do banco de dados e as regras de negócios.
o OnCreate O evento do Módulo de Dados é onde você coloca o código para construir dinamicamente o ConnectionString e se conectar ao banco de dados.
procedimento TDM.DataModuleCreate (Remetente: TObject); inícioE se DBConnect então ShowMessage ('Conectado ao banco de dados!') outro ShowMessage ('NÃO conectado ao banco de dados!'); fim;
Nota: O nome do módulo de dados é "DM". O nome do componente TADOConnection é "AdoConn".
o DBConnect função faz o trabalho real de se conectar ao banco de dados, aqui está o código:
funcTDM.DBConnect: booleano; var conStr: string; ServerName, DBName: string; inícioServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Fornecedor = sqloledb;' + 'Fonte de dados =' + ServerName + ';' + 'Catálogo inicial =' + DBName + ';' + 'User ID = myUser; Senha = minha senha '; Resultado: = false; AdoConn. Fechar; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Falso;E se (NÃO AdoConn. Conectado) entãoexperimentar AdoConn. Aberto; Resultado: = Verdadeiro; excetoem E: Exceção FazinícioMessageDlg ('Ocorreu um erro ao conectar. o banco de dados. Erro: '+ # 13 # 10 + e Mensagem, mtError, [mbOk], 0);E seNÃO TDatabasePromptForm. Executar (ServerName, DBName) então Resultado: = falso. outroinício WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // chama esta função Resultado: = DBConnect; fim; fim; fim; fim; //DBConnect
A função DBConnect se conecta ao banco de dados MS SQL Server - o ConnectionString é construído usando o local connStr variável.
O nome do servidor de banco de dados é armazenado no diretório Nome do servidor variável, o nome do banco de dados é mantido no DBName variável. A função começa lendo esses dois valores no registro (usando o método personalizado ReadRegistry () procedimento). Depois que o ConnectionString é montado, simplesmente chamamos AdoConn. Aberto método. Se esta chamada retornar "true", nos conectamos com sucesso ao banco de dados.
Nota: Como estamos transmitindo explicitamente informações de login por meio do ConnectionString, o campo Desde o módulo de dados é criado antes do formulário principal, você pode chamar com segurança os métodos do módulo de dados no OnCreate do MainForm evento.LoginPrompt A propriedade está definida como false para impedir uma caixa de diálogo de login desnecessária.
A "diversão" começa se ocorrer uma exceção. Embora possa haver muitas razões para o método Open falhar, vamos supor que o nome do servidor ou o nome do banco de dados esteja incorreto.
Se for esse o caso, daremos uma chance ao usuário especificar os parâmetros corretos, exibindo um formulário de diálogo personalizado.
O aplicativo de amostra também contém um formulário adicional (DatabasePromptForm) que permite ao usuário especificar o servidor e o nome do banco de dados para o componente Connection. Este formulário simples fornece apenas duas caixas de edição. Se você quiser fornecer uma interface mais amigável, poderá adicione duas ComboBoxes e preencha-as enumerando os SQL Servers disponíveis e recuperando bancos de dados em um SQL Server.
O formulário DatabasePrompt fornece um personalizado método de classe chamado Execute que aceita dois parâmetros variáveis (var): ServerName e DBName.
Com os "novos" dados fornecidos por um usuário (nome do servidor e do banco de dados), simplesmente chamamos a função DBConnect () novamente (recursivamente). Obviamente, as informações são armazenadas primeiro no Registro (usando outro método personalizado: WriteRegistry).
Verifique se o DataModule é o primeiro "formulário" criado!
Se você tentar criar esse projeto simples por conta própria, poderá ter exceções de Violação de Acesso ao executar o aplicativo.
Por padrão, o primeiro formulário adicionado ao aplicativo passa a ser o MainForm (o primeiro criado). Quando você adiciona um módulo de dados ao aplicativo, o módulo de dados é adicionado à lista de "formulários de criação automática" como o formulário criado após o formulário principal.
Agora, se você tentar chamar alguma das propriedades ou métodos do Módulo de Dados no evento OnCreate do MainForm, receberá uma exceção de Violação de Acesso - pois o módulo de dados ainda não foi criado.
Para resolver esse problema, você precisa alterar manualmente a ordem criada do módulo de dados - e configurá-lo como o primeiro formulário criado pelo aplicativo (usando a caixa de diálogo Propriedades do projeto ou editando a Arquivo de origem de projetos).
Como o módulo de dados é criado antes do formulário principal, você pode chamar com segurança os métodos do módulo de dados no evento OnCreate do MainForm.