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 facilmente operado. Acredito que os programadores que usaram DELPHI para fazer aplicações de banco de dados já estejam muito 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 para configurar o DSN pelo programa de gerenciamento ODBC está no registro. Se você não acredita, pode ir para HKEY_LOCAL_MACHINE/Software/ODBC. 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_MACHINE/Software/ODBC/ 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.INI/ODBC, 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.INI/DriverName (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:/WINDOWS/SYSTEM/FileName.DLL". Em seguida, observe as informações de registro do DSN do sistema. Em HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.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:/Inetpub/wwwroot/Test.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 em HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC Data Sources 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_MACHINE/Software/ODBC/ODBC.INI, ou seja, crie Crie uma chave como HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess e, em seguida, crie algumas Valor chave, que descreve detalhadamente as 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:/Inetpub/wwwroot/Test.mdb [String, indicando caminho do banco de dados] Description=Meu ACCESS [string, representando a descrição do banco de dados] Driver=C:/PWIN98/System/odbcjt32.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_MACHINE/Software/ODBC/ODBC.INI/MyAccess, Em seguida, crie uma subchave (SubKey)Jet abaixo dela, ou seja, crie uma chave como HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet e 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, podendo também 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:/Inetpub/wwwroot/test.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 software/ODBC/ODBC.INI/Fontes de dados ODBC se OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',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 Software/ODBC/ODBC.INI/MyAccess e gravar informações de configuração DSN se OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) então começar WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//diretório do banco de dados WriteString( 'Descrição', 'Minha nova fonte de dados' );//Descrição da fonte de dados WriteString( 'Driver', 'C:/PWIN98/SYSTEM/odbcjt32.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 do 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 software/ODBC/ODBC.INI/MyAccess/Engines/Jet //Escreve informações de configuração do mecanismo de banco de dados DSN se OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',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], Motores/Jet/ImplicitCommitSync[o padrão é Sim], Motores/Jet/MaxBufferSize[o padrão 512], Motores/Jet/PageTimeout[o padrão é 512], Motores/Jet/Threads[o padrão é 3], Motores/Jet/UserCommitSync [o 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(=caminho/xxx.xls), 5.0/7.0(=caminho/xxx.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, Engines/Excel/ImplicitCommitSync, Engines/Excel/MaxScanRows[número, número de linhas verificadas, o padrão é 8], Mecanismos/Excel/Threads、Motores/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[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, Mecanismos/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[String, base de classificação, pode ser ASCII, Internacional, Norueguês-Dinamarquês, sueco-finlandês], Engines/Xbase/Deleted[binário, se deve não exibir registros excluídos de forma reversível, 0 significa exibição, o padrão é 1], Engines/Xbase/PageTimeout[o padrão é 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binário, se deve usar o número aproximado de linhas, 1 significa 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, Engines/Xbase/Collating[String, base de classificação, pode ser ASCII, Internacional], Engines/Xbase/Deleted[binário, se deve não exibir registros excluídos de forma reversível, 0 significa exibição, o padrão é 1], Engines/Xbase/PageTimeout[o padrão é 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [binário, se deve usar o número aproximado de linhas, 1 significa sim, padrão 0] Nota: (O DriverId de 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. |