Na aplicação de banco de dados DELPHI, normalmente temos duas maneiras de acessar o banco de dados. Uma é pesquisar no banco de dados BDE
engine, ou seja, utilizando o driver de banco de dados que acompanha o DELPHI. A vantagem desse método é que ele é rápido, mas seu escopo de aplicação é limitado.
Quando a versão do banco de dados é atualizada, pode não ser possível operar o novo banco de dados. Outro método é através de ODBC, que tem vantagens;
A questão é que ele pode ser fornecido com o sistema operacional (como WINDOWS) e pode ser adaptado a uma variedade de bancos de dados como uma interface padrão. Em preparação
Durante o processo, podemos escolher um dos métodos de acordo com as nossas necessidades.
Ao usar ODBC para acessar o banco de dados, o método usual é configurar uma fonte de dados do sistema ODBC no painel de gerenciamento ODBC.
(DSN do sistema) e, em seguida, defina um alias de banco de dados (Alias) no DBD ou no programa para corresponder ao DSN, para que você possa usar
O banco de dados pode ser operado com segurança. Acredito que os programadores que usaram DELPHI para fazer aplicações de banco de dados já estejam familiarizados com esse aspecto, e não conheço muitos.
Disse. Em aplicações práticas, o autor encontrou tal situação. Nosso aplicativo de banco de dados depende da fonte de dados do sistema ODBC.
O programa aplicativo que acessa e opera o banco de dados funciona bem até que um dia, uma pessoa que está familiarizada com o sistema WINDOWS, mas não está familiarizada com ele
Usuários muito experientes modificam ou excluem acidentalmente nosso DSN de sistema predefinido...
Portanto, o autor começou a estudar como definir dinamicamente o conteúdo do DSN do sistema ODBC no programa, para que eu possa aumentar meu próprio programa.
A ordem é sólida. Depois de um dia inteiro pesquisando o registro do WINDOWS, finalmente descobri o segredo para configurar o DSN com o gerenciador ODBC.
(“Existe justiça no céu e na terra, e você sempre será recompensado por seus esforços!” Isso não é um anúncio!) Estou anotando para compartilhar com todos e também peço conselhos de especialistas.
O segredo do DSN definido pelo programa de gerenciamento ODBC está no registro. Se você não acredita, pode ir para HKEY_LOCAL_MACHINESoftwareODBC.
Dê uma olhada, isso definitivamente fará você sentir que já tem meio sucesso.
Primeiro, vamos dar uma olhada no driver de banco de dados ODBC instalado no sistema. em HKEY_LOCAL_MACHINESoftwareODBC
ODBCInst.INI armazena informações sobre o driver de banco de dados ODBC instalado. A partir daqui você pode verificar o número do ODBC instalado.
Informações como o arquivo DLL correspondente ao driver do banco de dados. Em cada valor-chave dos drivers ODBCInst.INIODBC, o nome da chave é o driver
O nome (como Driver de acesso da Microsoft (*.mdb)) e o valor da chave são "Instalado", indicando que o driver foi instalado. existir
ODBCInst.INIDriverName (DriverName é um nome de driver, como Microsoft Access Driver (*.mdb))
, há informações detalhadas sobre o driver. Obtemos principalmente o caminho e o nome do arquivo DLL correspondente ao driver ODBC aqui, ou seja.
O valor da chave do nome da chave Driver é geralmente "C: WINDOWSSYSTEMFileName.DLL".
Em seguida, observe as informações de registro do DSN do sistema. Em HKEY_LOCAL_MACHINESoftwareODBCODBC.INI, o sistema é armazenado.
As informações de registro do DSN, os parâmetros DSN que definimos no painel de gerenciamento ODBC estão aqui.
Vamos dar uma olhada nas etapas para criar um DSN do sistema ODBC. Ou seja, após concluirmos as configurações dos parâmetros no painel de gerenciamento ODBC, o gerenciamento ODBC.
Como o programa registra informações de DSN no registro? Considere a criação de um DSN de sistema do tipo Ms Access97 chamado MyAccess como exemplo.
Os parâmetros que especificamos incluem principalmente tipo de banco de dados (Microsoft Access Driver (*.mdb)), nome da fonte de dados (MyAccess),
Descrição da fonte de dados (My ACCESS), caminho do banco de dados (C:InetpubwwwrootTest.mdb), outros parâmetros como nome de usuário,
Senha do usuário, exclusiva, somente leitura, banco de dados do sistema, diretório padrão, tamanho do buffer, número de linhas de varredura, tempo limite da página, etc.
Parâmetros padrão. Neste momento, o sistema de registro DSN geralmente deve ter as seguintes etapas:
1. Adicione uma chave de string nas fontes de dados HKEY_LOCAL_MACHINESoftwareODBCODBC.INIODBC
O valor é MyAccess = Microsoft Access Driver(*.mdb), onde estão o nome da fonte de dados e o tipo de banco de dados, respectivamente.
Isso serve para registrar um nome DSN do sistema no registro.
2. Crie uma subchave (SubKey) MyAccess em HKEY_LOCAL_MACHINESoftwareODBCODBC.INI, ou seja, crie
Crie uma chave como HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess e, em seguida, crie algumas
Valor chave, uma descrição detalhada das informações de configuração de um DSN do sistema. As informações principais são (o conteúdo em [] é o comentário do autor).
DBQ=C:InetpubwwwrootTest.mdb [String, indicando caminho do banco de dados]
Description=Meu ACCESS [string, representando a descrição do banco de dados]
Driver=C:PWIN98Systemodbcjt32.dll [String, indicando driver, ODBCINST.INI visível]
DriverId=0x00000019(25) [Número, indicando identificação do motorista, não pode ser alterado]
FIL=Ms Access; [String, pode estar relacionado ao Filtro]
SafeTransaction=0x00000000 [Número, pode indicar o número de operações transacionais suportadas]
UID="" [String, indicando o nome do usuário, aqui está uma string vazia]
3. Crie uma subchave (SubKey)Engines em HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess,
Em seguida, crie uma subchave (SubKey) Jet abaixo dela, ou seja, crie uma chave como
HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccessEnginesJet e, em seguida, crie alguns abaixo dele
Valor chave, que descreve detalhadamente as informações de configuração do mecanismo de banco de dados de um DSN do sistema. As informações principais são as seguintes (o conteúdo em [] é a anotação do autor):
ImplicitCommitSync=Sim [String, pode indicar se as modificações nos dados são refletidas imediatamente]
MaxBufferSize=0x00000200(512) [número que indica o tamanho do buffer]
PageTimeout=0x00000005(5) [número que indica o tempo limite da página]
Threads=0x00000003(3) [número, possivelmente indicando o número máximo de threads suportados]
UserCommitSync=Sim [String, pode indicar se as modificações nos dados serão refletidas imediatamente para o usuário]
Acima estão as informações básicas para estabelecer um DSN do sistema (outras informações, como opções ou opções avançadas, também são definidas aqui, mas porque o padrão
informações, não listadas no registro), operamos o registro de acordo com as etapas acima no programa, e também podemos adicionar um DSN do sistema ou modificar sua configuração.
No programa de exemplo a seguir, um DSN do sistema será criado de acordo com as etapas acima. Preste atenção aos comentários no programa.
{************************************************* ***** ****
Neste procedimento será criada uma fonte de dados do sistema ODBC (DSN),
Nome da fonte de dados: MyAccess Descrição da fonte de dados: Minha nova fonte de dados
Tipo de banco de dados: ACCESS97
Banco de dados correspondente: C:Inetpubwwwroot est.mdb
************************************************** * *****}
{Observe que o registro deve ser incluído na instrução USES}
Procedimento TForm1.Button1Click(Remetente: TObject);
var
registrarTemp : TRegistry;
bData: array[0..0] de bytes;
começar
registerTemp := TRegistry.Create; //Cria uma instância do Registro
com registradorTemp do
começar
RootKey:=HKEY_LOCAL_MACHINE;//Define o valor da chave raiz como HKEY_LOCAL_MACHINE
//Encontrar fontes de dados de softwareODBCODBC.INIODBC
se OpenKey('Fontes de dados SoftwareODBCODBC.INIODBC',True) então
Begin // Registra um nome DSN
WriteString('MyAccess', 'Driver Microsoft Access (*.mdb)' );
fim
outro
start // Falha ao criar valor-chave
memo1.lines.add('Falha ao adicionar fonte de dados ODBC');
saída;
fim;
CloseKey;
//Encontrar ou criar SoftwareODBCODBC.INIMyAccess e gravar informações de configuração DSN
se OpenKey('SoftwareODBCODBC.INIMyAccess',True) então
começar
WriteString( 'DBQ', 'C:inetpubwwwroot est.mdb' );//diretório do banco de dados
WriteString( 'Descrição', 'Minha nova fonte de dados' );//Descrição da fonte de dados
WriteString( 'Driver', 'C:PWIN98SYSTEModbcjt32.dll' );//Arquivo DLL do driver
WriteInteger('DriverId', 25 ); //ID do motorista
WriteString( 'FIL', 'Ms Access;' ); // Base do filtro
WriteInteger( 'SafeTransaction', 0 ); //Número de operações de transação suportadas
WriteString('UID', '); //Nome de usuário
bDados[0] := 0;
WriteBinaryData( 'Exclusivo', bData, 1 ); //Modo não exclusivo
WriteBinaryData( 'ReadOnly', bData, 1 ); //Modo não somente leitura
fim
else //Falha ao criar valor-chave
começar
memo1.lines.add('Falha ao adicionar fonte de dados ODBC');
saída;
fim;
CloseKey;
//Encontre ou crie SoftwareODBCODBC.INIMyAccessEnginesJet
//Escreve informações de configuração do mecanismo de banco de dados DSN
se OpenKey('SoftwareODBCODBC.INIMyAccessEnginesJet',True) então
começar
WriteString('ImplicitCommitSync', 'Sim');
WriteInteger('MaxBufferSize', 512 ); //Tamanho do buffer
WriteInteger('PageTimeout', 10); //Tempo limite da página
WriteInteger( 'Threads', 3 ); //O número de threads suportados
WriteString('UserCommitSync', 'Sim');
fim
else //Falha ao criar valor-chave
começar
memo1.lines.add('Falha ao adicionar fonte de dados ODBC');
saída;
fim;
CloseKey;
memo1.lines.add('Adicionar nova fonte de dados ODBC com sucesso');
Livre;
fim;
fim;
O programa acima foi depurado e passado em PWIN98+DELPHI3.0.
A seguir estão as informações que precisam ser definidas para criar um DSN de tipos de banco de dados comuns ([] é o conteúdo do comentário, exceto para comentários especiais, cada parâmetro pode ser visto na descrição anterior):
1. Acesso(Driver Microsoft Access(*.mdb))
DBQ, Descrição, Driver[odbcjt32.dll], DriverID[25], FIL[Ms Access;],
SafeTransaction[o padrão é 0], UID[o padrão é vazio],
EnginesJetImplicitCommitSync[o padrão é Sim], EnginesJetMaxBufferSize[padrão 512],
EnginesJetPageTimeout[o padrão é 512], EnginesJetThreads[o padrão é 3],
EnginesJetUserCommitSync [padrão Sim]
Configurações opcionais: SystemDb[string, caminho para banco de dados do sistema],
ReadOnly[binário, se deve abrir no modo somente leitura, 1 significa sim, o padrão é 0],
Exclusivo[binário, se deve abrir em modo exclusivo, 1 significa sim, o padrão é 0],
PWD [string, senha do usuário]
2. Excel(Driver Microsoft Excel(*.xls))
DBQ[Excel97(=caminhoxxx.xls), 5.0/7.0(=caminhoxxx.xls), 4.0(=caminho), 3.0(=caminho)],
Descrição, Driver[odbcjt32.dll],
DefaultDir[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)],
DriverID[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)],
FIL[Excel5.0;], Somente leitura, SafeTransaction, UID,
EnginesExcelImplicitCommitSync, EnginesExcelMaxScanRows[número, número de linhas verificadas, o padrão é 8],
MotoresExcelThreads, MotoresExcelUserCommitSync,
EnginesExcelFirstRowHasName[binário, se a primeira linha é o nome de domínio, 1 significa sim, o padrão é 1]
Nota: DBQ do Excel97 e Excel7.0/5.0 corresponde a um arquivo XLS, enquanto Excel4.0 e Excel3.0 correspondem a um diretório;
DefaultDir corresponde a um diretório, que é o caminho correspondente ao DBQ no Excel97 e Excel7.0/5.0.
É igual ao DBQ no Excel4.0 e Excel3.0; o DriverID de cada versão é diferente.
3. dBase(Driver dBase da Microsoft(*.dbf))
DefaultDir[string, diretório onde está localizado o arquivo do banco de dados], Descrição, Driver[odbcjt32.dll],
DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID,
MotoresXbaseImplicitCommitSync,
EnginesXbaseCollating[String, base de classificação, pode ser ASCII, Internacional, Norueguês-Dinamarquês,
sueco-finlandês],
EnginesXbaseDeleted[binário, se deve não exibir registros excluídos de forma reversível, 0 significa exibição, o padrão é 1],
EnginesXbasePageTimeout[o padrão é 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [binário, se deve usar o número aproximado de linhas, 1 é sim, padrão 0]
Nota: (O DriverId das duas versões do dBaseIV e dBase5.0 é diferente)
4. Foxpro(Driver Microsoft Foxpro(*.dbf))
DefaultDir[o diretório onde o arquivo do banco de dados está localizado], Descrição, Driver[odbcjt32.dll],
DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID,
EnginesXbaseCollating[String, base de classificação, pode ser ASCII, Internacional],
EnginesXbaseDeleted[binário, se deve não exibir registros excluídos de forma reversível, 0 significa exibição, o padrão é 1],
EnginesXbasePageTimeout[o padrão é 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [binário, se deve usar o número aproximado de linhas, 1 é sim, padrão 0]
Nota: (O DriverId das versões Foxpro2.5 e Foxpro2.6 são diferentes)
Transforme o programa acima em um controle COM ou ActiveX, que pode ser usado em muitas linguagens de programação de alto nível, como DELPHI, C++Buider, VB, VC e PB.