Use objetos ADO para acessar dados ODBC em programas DELPHI
-------------------------------------------------- ----------------------------------
Como entusiasta do ASP, costumo usar objetos ADO em páginas ASP para operar bancos de dados ODBC. Sinto que é realmente muito conveniente usar ASP para criar sistemas de aplicativos da Web. Embora em minha carreira de programação o autor prefira os produtos da série Borland e seja um pouco repulsivo aos produtos da Microsoft, sou uma exceção ao ASP. Um dia, de repente me ocorreu que o objeto ADO é um objeto OLE padrão. Seria ótimo se o ADO pudesse ser usado para operar o banco de dados em uma aplicação Delphi. Especialmente ao usar DELPHI como um aplicativo de banco de dados de rede, se o site for um site WINNT e suportar páginas ASP, você poderá usar objetos ADO para acessar o banco de dados ODBC sem carregar um BDE tão grande no site. Desta forma, você pode aproveitar ao máximo as vantagens de programação do DELPHI e ASP para criar ISAPI/NSAPI/CGI melhores. Após programação e teste, você pode usar objetos ADO com sucesso para acessar bancos de dados ODBC em Delphi. Agora vou anotar minha experiência e compartilhá-la com todos, para que possamos ter outro método de acesso a bancos de dados ODBC.
No Delphi de 32 bits, você pode declarar uma variável variante (como AVariant) e, em seguida, criar um objeto OLE por meio de CreateOleObject, como AVariant:=CreateOleObject ('ADODB.Connection') para obter uma instância do objeto de conexão de banco de dados, e então você pode usar Os métodos e propriedades deste objeto são usados para operar o banco de dados ODBC.
A seguir está uma breve introdução aos objetos ADO usados para acessar bancos de dados ODBC e seus métodos e propriedades.
1. Objeto de conexão de banco de dados (ADODB. Connection)
Este objeto é utilizado para estabelecer uma conexão com o banco de dados ODBC, e todas as operações no banco de dados são realizadas através desta conexão.
O objeto de conexão de banco de dados ADODB Connection funciona como o objeto TDatabase no Delphi.
O método para estabelecer um objeto de conexão é (AConnection é uma variável do tipo Variant):
AConnection:=CreateOleObject('A DODB.Connection')
O método usado para estabelecer uma conexão é Open, e a sintaxe de uso é (tomando o objeto AConnection como exemplo):
AConnection.Open (ConnectionString, UserId, PassWord)
Os três parâmetros são todos do tipo string, onde UserId e Password são o nome de usuário e a senha do usuário, que podem ser omitidos quando usados para acessar o banco de dados, pois o nome de usuário e a senha do usuário também podem ser especificados em ConnectionString. ConnectionString é uma string usada para descrever informações de fonte de dados ODBC. Seu formato é:
'PRovider=ProviderName;DSN=DSNName;driver=servidor;banco de dados=usuário;
em:
Provedor: Provedor de dados, MSDASQL por padrão, Microsoft OLEDB, geralmente omitido;
DSN: A fonte de dados do sistema OBDC (DSN) correspondente ao banco de dados a ser aberto é um parâmetro opcional;
DRIVER: Nome do driver utilizado no banco de dados a ser aberto, como o acesso correspondente ao Driver Microsoft Access (*.mdb), que é um parâmetro opcional;
SERVIDOR: Nome do servidor onde está localizado o banco de dados a ser aberto, disponível nesta máquina (local), e é um parâmetro opcional;
DATABASE: Nome do banco de dados a ser aberto, que é um parâmetro opcional;
UID: nome de usuário, utilizado para acessar o banco de dados, é um parâmetro opcional;
PWD: A senha do usuário, utilizada para acessar o banco de dados, é um parâmetro opcional.
Os parâmetros acima são opcionais, mas devem ser fornecidas informações suficientes para descrever uma fonte de dados do sistema.
Se um DSN do sistema ODBC tiver sido definido e for denominado MyDsn, será possível usar a instrução a seguir para estabelecer uma conexão com o banco de dados:
AConnection.Open('DSN=MeuDsn');
Para evitar erros de execução do aplicativo quando o DSN não existe ou suas configurações são modificadas por outros, você pode usar ADODB.Connection para criar uma fonte de dados ODBC temporária. Isso pode garantir que as configurações dos parâmetros do DSN do sistema que usamos estão corretas. . A instrução a seguir pode criar um DSN de sistema ODBC temporário, correspondente a um banco de dados ACCESS, o caminho é C:Inetpub wwwroot test.mdb:
AConnection.open('Driver= {Driver Microsoft Access (*.mdb)};DBQ=C:inetpub wwwroot est.mdb')
Depois de estabelecer um ADODB.Connection, se não houver necessidade de retornar os resultados da operação (como exclusão, modificação, atualização, etc.), você pode realizar operações SQL normais no banco de dados. Neste momento, outro método de ADODB.Connection. , Executar, é usado.
AConnection.Execute(strSQL);
Entre eles, strSQL é a instrução SQL para realizar a operação. Por exemplo, a operação de exclusão pode ser: delete from wfjcommu. Use AConnection.Close para fechar uma conexão com o banco de dados.
2. Objeto de conjunto de dados (ADODB. RecordSet)
Se desejar realizar operações de consulta e retornar resultados de consulta, ou se desejar operar a tabela de dados de forma mais conveniente, você precisará usar o objeto conjunto de dados.
O objeto de conjunto de dados ADODB.RecordSet atua como um objeto TTable ou TQuery no Delphi.
O método para criar um objeto de conjunto de dados é (ARecordSet é uma variável do tipo Variant):
ARecordSet:=CreateOleObject('ADODB.RecordSet')
O método para obter dados da tabela de dados é o método Open. O método de uso específico é:
ARecordSet.Open(strCommand,ActiveConnection,int CursorType,intLockType, intCommandType);
em:
strCommand: String, que é um parâmetro de comando. Pode ser um nome de tabela, uma instrução SQL ou um nome de procedimento armazenado (StoredProc) no servidor.
ActiveConnection: A conexão com o banco de dados a ser utilizada é um objeto ADODB.
intCursorType: inteiro longo, tipo de cursor do conjunto de dados, parâmetros opcionais, veja os comentários no programa.
intLockType: inteiro longo, tipo de bloqueio da tabela de dados, parâmetros opcionais, consulte os comentários no programa.
intCommandType: Inteiro longo, o tipo de parâmetro de comando, usado para indicar a função de strCommand. Você pode especificar strCommand como um comando (como uma instrução SQL) ou uma tabela de dados (TTable) ou um procedimento armazenado (StoredProc). parâmetros, consulte os comentários no programa.
Para executar uma consulta SQL, você pode usar a seguinte instrução:
ARecordSet.Open('Selecione * de wfjcommu',adOpenStatic,ad LockOptimistic,adCmdText);
Outras propriedades e métodos comuns comparados com TTable e TQuery são os seguintes (consulte o arquivo de ajuda ASP para obter detalhes):
eof,bof: eof,bof. MoveFirst, MoveLast: Primeiro, LastMovePrevious, MoveNext: Prior, NextMove: MoveByAddNew: appendUpdate: PostClose: fechar
Delete mais Update: delete, todas as modificações na tabela de dados devem usar Update para tornar a operação efetiva, o que é diferente do Delphi.
Campos[CampoNo]: Campos[CampoNo]
Campos['NomeCampo']: FieldByName('NomeCampo')
3. Outros objetos comuns (objetos correspondentes ao Delphi):
ADODB.Campo: TField ADODB.Parâmetro: TPara ADODB.Error: EDBEngineError
ADODB.Command: Nenhum ADODB.Property: Nenhum
Vejamos um exemplo de aplicação:
procedimento TForm1.Button1Click(Remetente: TObject);
{************************************************* ***** ****
Use ADO para operar banco de dados ODBC
Neste programa, será criada uma fonte de dados temporária do sistema ODBC, apontando para um banco de dados MsAccess, e então as tabelas de dados nele contidas serão exibidas, adicionadas, modificadas, excluídas e consultadas.
NOTA: Inclua a unidade ComObj na instrução Uses
************************************************** * ***}
const{Algumas declarações de constantes, consulte adovbs.inc para obter detalhes}
{----Descrição constante do CommandType----}
adCmdUnknown = 0008;//Desconhecido, precisa ser avaliado pelo sistema, lento, valor padrão
adCmdText = 0001; // Instrução de comando como instrução SQL
adCmdTable = 0002; //Nome da tabela de dados
adCmdStoredProc = 0004;//Nome do procedimento armazenado
{----Descrição constante do CursorType----}
adOpenForwardOnly = 0;//só pode ser acessado em uma direção, da frente para trás, que é o valor padrão
adOpenKeyset = 1;//As modificações nos dados feitas por outros usuários são visíveis, mas as adições e exclusões feitas por outros usuários não são visíveis.
adOpenDynamic = 2; //Adições, modificações e exclusões de dados por outros usuários são visíveis
adOpenStatic = 3; //Adições, modificações e exclusões de dados por outros usuários não são visíveis
{----Descrição constante de LockType---}
adLockReadOnly = 1; //Somente leitura, o valor padrão
adLockPessimistic = 2; //Ao modificar, bloquear por registro único
adLockOptimistic = 3; //Ao atualizar após modificação, bloquear por registro único
adLockBatchOptimistic = 4; //Bloqueio de registro durante atualização em lote
var
AConnection, ARecordSet: variante;
longintTemp : inteiro;
strTemp: string;
intIndex: inteiro;
começar
{Crie uma fonte de dados ODBC temporária, aponte para um banco de dados MsAccess e use este DSN para estabelecer uma conexão de banco de dados}
AConnection := CreateOleObject('ADODB.Connection');
AConnection.Open('Driver={Driver Microsoft Access (*.mdb)};DBQ=C:inetpubwwwroot est');
{Crie um objeto de conjunto de dados e extraia dados da tabela de dados}
ARecordSet := CreateOleObject('ADODB.RecordSet');
ARecordSet.open( 'wfjcommu',AConnection,adOpenStatic,adLockOptimistic,adCmdTable );
memo1.lines.clear;
memo1.lines.add('O conteúdo original da tabela ********data é o seguinte********');
{Exibir o nome de domínio de cada domínio}
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].nome+';';
memo1.lines.add(strTemp);
{Exibir o conteúdo de cada domínio}
enquanto não ARecordSet.eof faça
começar
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add(strTemp);
ARecordSet.MoveNext;//Mover para a próxima barra, Próximo
fim;
{Adicionar um registro}
ARecordSet.AddNew;//Adicionar,Anexar
ARecordSet.Fields['AName'] := '1';//Acesso por FieldByName
ARecordSet.Fields['Portátil'] := '2';
ARecordSet.Fields(2) := '3';//Acesso na forma de Campos[índice]
ARecordSet.Fields(3) := '4';
ARecordSet.Fields(4) := '5';
ARecordSet.Update;//Atualizar, Postar
ARecordSet.MoveFirst; //Mover para o primeiro item, Primeiro
memo1.lines.add('********O conteúdo da tabela de dados após adicionar um registro é o seguinte********');
{Exibir o conteúdo de cada domínio}
enquanto não ARecordSet.eof faça
começar
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add(strTemp);
ARecordSet.MoveNext;//Mover para a próxima barra, Próximo
fim;
{Modifique o último registro}
ARecordSet.MoveLast;
ARecordSet.Fields['AName'] := '11';//Acesso usando FieldByName
ARecordSet.Fields['Portátil'] := '22';
ARecordSet.Fields(2) := '33';//Acesso na forma de Campos[índice]
ARecordSet.Fields(3) := '44';
ARecordSet.Fields(4) := '55';
ARecordSet.Update;//Atualizar, Postar
ARecordSet.MoveFirst; //Mover para o primeiro item, Primeiro
memo1.lines.add('********O conteúdo da tabela de dados após a modificação do último registro é o seguinte********');
{Exibir o conteúdo de cada domínio}
enquanto não ARecordSet.eof faça
começar
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add(strTemp);
ARecordSet.MoveNext;//Mover para a próxima barra, Próximo
fim;
{excluir último registro}
ARecordSet.MoveLast; //Mover para o último compasso, Último
ARecordSet.delete;//Excluir, excluir
ARecordSet.Update;//Atualização, não necessária no Delphi
ARecordSet.MoveFirst; //Mover para o primeiro item, Primeiro
memo1.lines.add('********O conteúdo da tabela de dados após a exclusão do último registro é o seguinte********');
{Exibir o conteúdo de cada domínio}
enquanto não ARecordSet.eof faça
começar
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add(strTemp);
ARecordSet.MoveNext;//Mover para a próxima barra, Próximo
fim;
ARecordSet.Close;{Fechar o conjunto de dados}
{Use a instrução SQL para consultar os registros chamados "Zhang San"}
{Observe que nas instruções SQL, as strings devem ser colocadas entre aspas simples}
ARecordSet.open( 'selecione * de wfjcommu onde AName = ''Zhang San''',
AConnection,adOpenStatic,adLockOptimistic,adCmdText );
memo1.lines.add('********O conteúdo de Zhang San é o seguinte********');
memo1.lines.add('Total' + IntToStr( ARecordSet.RecordCount ) + 'Registros correspondentes');
{Exibir o conteúdo de cada domínio}
enquanto não ARecordSet.eof faça
começar
strTemp := '';
para intIndex:= 0 para ARecordSet.Fields.count - 1 faça
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add(strTemp);
ARecordSet.MoveNext;//Mover para a próxima barra, Próximo
fim;
{Fechar conjunto de dados e conexão com o banco de dados}
ARecordSet.close;
AConnection.close;
fim;
Ouvir os outros dizerem que é melhor experimentar você mesmo vendo exemplos reais. Neste exemplo, demonstraremos como usar objetos ADO para consultar, adicionar registros, modificar registros e excluir registros em uma tabela de dados. Consulte os comentários no programa para uso específico. Se você tiver alguma experiência em programação de banco de dados Delphi, acredito que não seja difícil de entender.
O banco de dados usado em nosso exemplo é Test.MDB, que possui uma tabela de dados chamada wfjcommu, com cinco campos AName, Portable, Tel, BP e PostAddress, que representam nome, número de celular, número de telefone, número de pager e endereço para correspondência. respectivamente.
O programa acima foi depurado e passado em PWIN98+ Delphi 3.0+PWS (Personal Web Server) 4.0.