Como entusiasta do ASP, costumo usar objetos ADO em páginas ASP para operar bancos de dados ODBC. Sinto que é muito conveniente usar ASP para criar sistemas de aplicativos 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, tive uma ideia. 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 WEB 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, para que você possa usar totalmente o vantagens de programação de DELPHI e ASP para melhorar ISAPI/NSAPI/CGI.
----Após programação e teste, você pode usar objetos ADO com sucesso para acessar o banco de dados ODBC no DELPHI. Agora vou anotar a experiência e compartilhá-la com você.
---- 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, então você pode usar os métodos e propriedades do objeto 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 é usado 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 com o 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('ADODB.Connection')
---- O método usado para estabelecer uma conexão é Open, e a sintaxe de uso é (tome o objeto AConnection como exemplo):
---- AConnection.Open(ConnectionString, UserId, Senha)
----Os três parâmetros são todos do tipo string, onde UserId e Password são o nome de usuário e senha, usados para acessar
---- Usado no banco de dados, pode ser omitido porque 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=driver;SERVIDOR=banco de dados=usuário;
---- em:
---- Provedor: Provedor de dados, o padrão é MSDASQL, é Microsoft OLEDB, geralmente omitido
---- DSN: A fonte de dados do sistema OBDC (DSN) correspondente ao banco de dados a ser aberto, que é um parâmetro opcional.
---- DRIVER: O nome do driver utilizado para o banco de dados ser aberto, como o acesso correspondente
----Microsoft Access Driver(*.mdb), é um parâmetro opcional
---- SERVIDOR: Nome do servidor onde está localizado o banco de dados a ser aberto. Está disponível nesta máquina (local) e é um parâmetro opcional.
---- DATABASE: O nome do banco de dados a ser aberto, um parâmetro opcional
---- UID: Nome de usuário, usado 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 todos opcionais, mas informações suficientes devem ser fornecidas para descrever uma fonte de dados do sistema.
---- Se um DSN do sistema ODBC tiver sido definido, denominado MyDsn, você poderá usar a seguinte instrução 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 corretos. A instrução a seguir pode criar um DSN de sistema ODBC temporário, correspondente a um banco de dados ACCESS, o caminho é
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Driver do Microsoft Access (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- Depois de estabelecer um ADODB.Connection, se você não precisar retornar os resultados da operação (como exclusão, modificação, atualização, etc.), poderá realizar operações SQL normais no banco de dados. Neste momento, use outro. método Execute de ADODB.Connection A sintaxe de uso é:
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 de banco de dados.
---- 2. Objeto de conjunto de dados (ADODB.RecordSet)
---- Se você deseja realizar operações de consulta e retornar resultados de consulta, ou se deseja operar a tabela de dados de forma mais conveniente, você precisa usar o objeto de conjunto de dados.
---- O objeto de conjunto de dados ADODB.RecordSet funciona 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 de obtenção de dados da tabela de dados é o método Open. O método de uso específico é:
ARecordSet.Open(strCommand,ActiveConnection,intCursorType,intLockType,intCommandType);
---- Entre eles: 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. O parâmetro específico intCommandType precisa ser especificado.
---- ActiveConnection: A conexão de banco de dados a ser usada é um objeto ADODB.Connection.
---- 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 tabela de dados (TTable) ou procedimento armazenado (StoredProc). Para parâmetros opcionais, consulte Comentários no programa.
---- Se você executar uma consulta SQL, poderá usar a seguinte instrução:
ARecordSet.Open('Selecione * de wfjcommu',adOpenStatic,adLockOptimistic,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[FieldNo]:Campos[FieldNo]Campos['FieldName']:FieldByName('FieldName')
----3. Outros objetos comuns (objetos correspondentes ao Delphi):
----
ADODB.Campo: TFieldADODB.Parâmetro: TParaADODB.Error: EDBEngineErrorADODB.Command: Nenhum ADODB.Property: Nenhum
---- Vamos dar uma olhada em um exemplo de aplicação. É melhor ouvir o que os outros dizem do que ver você mesmo o exemplo real. 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.
---- No nosso exemplo, o banco de dados utilizado é Test.MDB. Existe uma tabela de dados chamada wfjcommu, que possui cinco campos: AName, Portable, Tel, BP e PostAddress, que representam nome, número de celular, número de telefone. e número do pager, respectivamente.
----
procedimento TForm1.Button1Click(Sender: TObject);{*************************************** *********************
---- Use ADO para operar o banco de dados ODBC Neste programa, uma fonte de dados temporária do sistema ODBC será criada, apontando para um banco de dados MsAccess, e então as tabelas de dados nele serão exibidas, adicionadas, modificadas, excluídas e consultadas. Observação: clique em Usos. A instrução contém a unidade ComObj
************************************************** * ***}const{ Algumas declarações constantes, consulte adovbs.inc para detalhes }{ ---- Descrição constante de CommandType---- } adCmdUnknown = 0008;//Desconhecido, precisa ser julgado 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;//A adição, modificação e exclusão de dados por outros usuários são visíveis adOpenStatic = 3;//A adição, modificação e exclusão 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, bloqueia de acordo com um único registro adLockOptimistic = 3;//Bloquear por um único registro ao atualizar após modificação adLockBatchOptimistic = 4;//Bloquear o registro ao atualizar em lotes var AConnection, ARecordSet: variante longintTemp: integer strTemp: string; Fonte de dados ODBC, apontando para um banco de dados MsAccess e usando este DSN para estabelecer uma conexão de banco de dados} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {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 de dados é o seguinte********'); Exibe o nome de domínio de cada campo} strTemp := '; for intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); {Exibe o conteúdo de cada campo} enquanto não ARecordSet.eof começa strTemp := '; .contagem - 1 do strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Mover para a próxima linha, Próximo final; {Adicionar um registro} ARecordSet.AddNew;//Adicionar, Acrescentar ARecordSet.Fields [ 'AName'] := '1'; //Acesse ARecordSet.Fields['Portable'] usando FieldByName := '2'; ARecordSet.Fields(2) := '3'; //Acessar ARecordSet.Fields(3) := '4'; ; ARecordSet.Update;//Atualizar, Post 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 campo} enquanto não é ARecordSet .eof começa strTemp := ';para intIndex := 0 para ARecordSet Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; //Mover para o próximo registro, Próximo final; {Modificar o último registro} ARecordSet.Fields['AName'] := '11'; 'Portátil'] := '22'; //Acessar ARecordSet.Fields(3) como Fields[index] := '44'; primeiro item, Primeiro memo1.lines.add('********O conteúdo da tabela de dados após a modificação do último registro é o seguinte**********'); de cada campo } enquanto não ARecordSet.eof começa strTemp := ';for intIndex := 0 para ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Mover para o próximo registro, Próximo final; {Excluir o último registro} ARecordSet.MoveLast;//Mover para a última linha, Última ARecordSet.delete;//Excluir, excluir ARecordSet.Update;//Atualização, não necessária no Delphi ARecordSet.MoveFirst;//Mover para a primeira linha, 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 campo} enquanto não ARecordSet.eof comece strTemp := '; para intIndex := 0 para ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.value+';';memo1.lines.add( ARecordSet.MoveNext ); /Mover para a próxima barra, Próximo final ARecordSet.Close;{Fechar o conjunto de dados} {Use a instrução SQL para consultar, consulte os registros chamados "Zhang San"} {Observe que na instrução SQL, a string deve ser colocada entre aspas simples} ARecordSet.open( 'select * from wfjcommu where AName = 'Zhang San' ', AConnection, adOpenStatic, adLockOptimistic, adCmdText ); memo1.lines.add('********O conteúdo de Zhang San é o seguinte******'); + IntToStr ( ARecordSet.RecordCount ) + 'matching records' ); {exibe o conteúdo de cada campo} enquanto não ARecordSet.eof começa strTemp := 'para intIndex := 0 to ARecordSet.Fields.count - 1 do strTemp : = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Mover para a próxima barra, Próximo final; {Fechar o conjunto de dados e a conexão do banco de dados} AConnection.close;end;