Utilisez des objets ADO pour accéder aux données ODBC dans les programmes DELPHI
-------------------------------------------------- ----------------------------------
En tant que passionné d'ASP, j'utilise souvent des objets ADO dans les pages ASP pour faire fonctionner des bases de données ODBC. Je pense qu'il est en effet très pratique d'utiliser ASP pour créer des systèmes d'applications Web. Bien que dans ma carrière de programmeur, l'auteur préfère les produits de la série Borland et soit un peu répugnant aux produits Microsoft, je suis une exception par rapport à ASP. Un jour, je me suis soudain rendu compte que l'objet ADO était un objet OLE standard. Ce serait formidable si ADO pouvait être utilisé pour faire fonctionner la base de données dans une application Delphi. Surtout lorsque vous utilisez DELPHI comme application de base de données réseau, si le site Web est un site WINNT et prend en charge les pages ASP, vous pouvez utiliser des objets ADO pour accéder à la base de données ODBC sans télécharger un BDE aussi volumineux sur le site. De cette façon, vous pouvez profiter pleinement des avantages de programmation de DELPHI et ASP pour améliorer ISAPI/NSAPI/CGI. Après la programmation et les tests, vous pouvez utiliser avec succès les objets ADO pour accéder aux bases de données ODBC dans Delphi. Je vais maintenant écrire mon expérience et la partager avec tout le monde, afin que nous puissions avoir une autre méthode d'accès aux bases de données ODBC.
Dans Delphi 32 bits, vous pouvez déclarer une variable variante (telle qu'AVariant), puis créer un objet OLE via CreateOleObject, tel que AVariant:=CreateOleObject (« ADODB.Connection ») pour obtenir une instance de l'objet de connexion à la base de données, puis vous pouvez utiliser Les méthodes et propriétés de cet objet sont utilisées pour faire fonctionner la base de données ODBC.
Ce qui suit est une brève introduction aux objets ADO utilisés pour accéder aux bases de données ODBC ainsi qu'à leurs méthodes et propriétés.
1. Objet de connexion à la base de données (ADODB. Connection)
Cet objet est utilisé pour établir une connexion avec la base de données ODBC, et toutes les opérations sur la base de données sont effectuées via cette connexion.
L'objet de connexion à la base de données ADODB Connection fonctionne comme l'objet TDatabase dans Delphi.
La méthode pour établir un objet de connexion est (AConnection est une variable de type Variant) :
AConnection:=CreateOleObject('A DODB.Connexion')
La méthode utilisée pour établir une connexion est Open, et la syntaxe d'utilisation est (en prenant l'objet AConnection comme exemple) :
AConnection.Open (ConnectionString, UserId, PassWord)
Les trois paramètres sont tous de type chaîne, où UserId et Password sont le nom d'utilisateur et le mot de passe de l'utilisateur, qui peuvent être omis lorsqu'ils sont utilisés pour accéder à la base de données, car le nom d'utilisateur et le mot de passe de l'utilisateur peuvent également être spécifiés dans ConnectionString. ConnectionString est une chaîne utilisée pour décrire les informations de la source de données ODBC. Son format est :
'PRvider=ProviderName ; DSN=DSNName ; DRIVER=pilote ; DATABASE=base de données ; PWD=mot de passe ;
dans:
Fournisseur : fournisseur de données, MSDASQL par défaut, Microsoft OLEDB, généralement omis ;
DSN : La source de données du système OBDC (DSN) correspondant à la base de données à ouvrir est un paramètre facultatif ;
DRIVER : Le nom du driver utilisé dans la base de données à ouvrir, tel que l'accès correspondant au Microsoft Access Driver (*.mdb), qui est un paramètre facultatif ;
SERVEUR : Le nom du serveur où se trouve la base de données à ouvrir, disponible sur cette machine (local), et est un paramètre facultatif ;
DATABASE : Le nom de la base de données à ouvrir, qui est un paramètre facultatif ;
UID : le nom d'utilisateur, utilisé pour accéder à la base de données, est un paramètre facultatif ;
PWD : Le mot de passe utilisateur, utilisé pour accéder à la base de données, est un paramètre facultatif.
Les paramètres ci-dessus sont facultatifs, mais des informations suffisantes doivent être fournies pour décrire une source de données système.
Si un DSN système ODBC a été défini et est nommé MyDsn, vous pouvez utiliser l'instruction suivante pour établir une connexion à la base de données :
AConnection.Open('DSN=MonDsn');
Afin d'éviter les erreurs d'exécution de l'application lorsque le DSN n'existe pas ou que ses paramètres sont modifiés par d'autres, vous pouvez utiliser ADODB.Connection pour créer une source de données ODBC temporaire. Cela peut garantir que les paramètres du DSN système que nous utilisons sont corrects. . L'instruction suivante peut créer un DSN système ODBC temporaire, correspondant à une base de données ACCESS, le chemin est C:Inetpub wwwroot test.mdb :
AConnection.open('Driver= {Pilote Microsoft Access (*.mdb)};DBQ=C:inetpub wwwroot est.mdb')
Après avoir établi un ADODB.Connection, s'il n'est pas nécessaire de renvoyer les résultats de l'opération (tels que suppression, modification, mise à jour, etc.), vous pouvez effectuer des opérations SQL normales sur la base de données. À ce stade, une autre méthode d'ADODB.Connection. , Exécuter, est utilisé. La syntaxe est la suivante :
AConnection.Execute( strSQL);
Parmi eux, strSQL est l'instruction SQL permettant d'effectuer l'opération. Par exemple, l'opération de suppression peut être : supprimer de wfjcommu. Utilisez AConnection.Close pour fermer une connexion à une base de données.
2. Objet ensemble de données (ADODB. RecordSet)
Si vous souhaitez effectuer des opérations de requête et renvoyer les résultats de la requête, ou si vous souhaitez utiliser la table de données plus facilement, vous devez utiliser l'objet dataset.
L'objet ensemble de données ADODB.RecordSet agit comme un objet TTable ou TQuery dans Delphi.
La méthode pour créer un objet ensemble de données est (ARecordSet est une variable de type Variant) :
ARecordSet :=CreateOleObject ('ADODB.RecordSet')
La méthode pour obtenir les données de la table de données est la méthode Open. La méthode d'utilisation spécifique est la suivante :
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType);
dans:
strCommand : chaîne, qui est un paramètre de commande. Il peut s'agir d'un nom de table, d'une instruction SQL ou d'un nom de procédure stockée (StoredProc) sur le serveur. Le paramètre spécifique doit être spécifié par le paramètre suivant intCommandType.
ActiveConnection : la connexion à la base de données à utiliser est un objet de connexion ADODB.
intCursorType : entier long, type de curseur de l'ensemble de données, paramètres facultatifs, veuillez consulter les commentaires dans le programme.
intLockType : entier long, le type de verrouillage de la table de données, paramètres facultatifs, veuillez vous référer aux commentaires dans le programme.
intCommandType : entier long, le type de paramètre de commande, utilisé pour indiquer le rôle de strCommand. Vous pouvez spécifier strCommand en tant que commande (telle qu'une instruction SQL) ou table de données (TTable) ou procédure stockée (StoredProc). paramètres, veuillez consulter les commentaires dans le programme.
Pour exécuter une requête SQL, vous pouvez utiliser l'instruction suivante :
ARecordSet.Open('Select * from wfjcommu',adOpenStatic,ad LockOptimistic,adCmdText);
Les autres propriétés et méthodes courantes comparées à TTable et TQuery sont les suivantes (voir le fichier d'aide ASP pour plus de détails) :
eof, bof : eof, bof. MoveFirst, MoveLast : First, LastMovePrevious, MoveNext : Prior, NextMove : MoveByAddNew : appendUpdate : PostClose : fermer
Supprimer plus Mettre à jour : supprimer, toutes les modifications apportées à la table de données doivent utiliser Mise à jour pour rendre l'opération efficace, ce qui est différent de Delphi.
Champs[FieldNo] : Champs[FieldNo]
Champs['FieldName'] : FieldByName('FieldName')
3. Autres objets communs (objets correspondant à Delphi) :
ADODB.Field : TField ADODB.Paramètre : TPara ADODB.Erreur : EDBEngineError
ADODB.Command : Aucun ADODB.Property : Aucun
Regardons un exemple d'application :
procédure TForm1.Button1Click(Expéditeur : TObject);
{*************************************************** ***** ****
Utilisez ADO pour exploiter la base de données ODBC
Dans ce programme, une source de données système ODBC temporaire sera créée, pointant vers une base de données MsAccess, puis les tables de données qu'elle contient seront affichées, ajoutées, modifiées, supprimées et interrogées.
REMARQUE : Veuillez inclure l'unité ComObj dans la déclaration Uses.
************************************************** ****}
const{Quelques déclarations constantes, veuillez consulter adovbs.inc pour plus de détails}
{----Description constante de CommandType----}
adCmdUnknown = 0008;//Inconnu, doit être jugé par le système, lent, valeur par défaut
adCmdText = 0001;//Instruction de commande telle qu'une instruction SQL
adCmdTable = 0002; //Nom de la table de données
adCmdStoredProc = 0004;//Nom de la procédure stockée
{----Description constante de CursorType----}
adOpenForwardOnly = 0;//n'est accessible que dans un seul sens, de l'avant vers l'arrière, ce qui est la valeur par défaut
adOpenKeyset = 1;//Les modifications apportées aux données par d'autres utilisateurs sont visibles, mais les ajouts et suppressions par d'autres utilisateurs ne sont pas visibles.
adOpenDynamic = 2; //Les ajouts, modifications et suppressions de données par d'autres utilisateurs sont visibles
adOpenStatic = 3; //Les ajouts, modifications et suppressions de données par d'autres utilisateurs ne sont pas visibles
{----Description constante de LockType---}
adLockReadOnly = 1; //Lecture seule, la valeur par défaut
adLockPessimistic = 2; //Lors de la modification, verrouiller par enregistrement unique
adLockOptimistic = 3; //Lors de la mise à jour après modification, verrouillage par enregistrement unique
adLockBatchOptimistic = 4; //Verrouillage de l'enregistrement lors de la mise à jour par lots
var
AConnection, ARecordSet : variante ;
longintTemp : entier ;
strTemp : chaîne ;
intIndex : entier ;
commencer
{Créez une source de données ODBC temporaire, pointez vers une base de données MsAccess et utilisez ce DSN pour établir une connexion à la base de données}
AConnection := CreateOleObject('ADODB.Connection');
AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwroot est');
{Créer un objet d'ensemble de données et extraire les données de la table de données}
ARecordSet := CreateOleObject('ADODB.RecordSet');
ARecordSet.open( 'wfjcommu',AConnection,adOpenStatic,adLockOptimistic,adCmdTable );
memo1.lines.clear;
memo1.lines.add('Le contenu original de la table de données ******** est le suivant********');
{Afficher le nom de domaine de chaque domaine}
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].name+';';
memo1.lines.add( strTemp );
{Afficher le contenu de chaque domaine}
alors que ARecordSet.eof ne le fait pas
commencer
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Passer à la barre suivante, Suivant
fin;
{Ajouter un enregistrement}
ARecordSet.AddNew;//Ajouter, Ajouter
ARecordSet.Fields['AName'] := '1';//Accès par FieldByName
ARecordSet.Fields['Portable'] := '2';
ARecordSet.Fields(2) := '3';//Accès sous forme de Fields[index]
ARecordSet.Fields(3) := '4';
ARecordSet.Fields(4) := '5';
ARecordSet.Update;//Mise à jour, publication
ARecordSet.MoveFirst;//Déplacer vers le premier élément, Premier
memo1.lines.add('********Le contenu du tableau de données après l'ajout d'un enregistrement est le suivant*********');
{Afficher le contenu de chaque domaine}
alors que ARecordSet.eof ne le fait pas
commencer
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Passer à la barre suivante, Suivant
fin;
{Modifier le dernier enregistrement}
ARecordSet.MoveLast ;
ARecordSet.Fields['AName'] := '11';//Accès à l'aide de FieldByName
ARecordSet.Fields['Portable'] := '22';
ARecordSet.Fields(2) := '33';//Accès sous forme de Fields[index]
ARecordSet.Fields(3) := '44';
ARecordSet.Fields(4) := '55';
ARecordSet.Update;//Mise à jour, publication
ARecordSet.MoveFirst;//Déplacer vers le premier élément, Premier
memo1.lines.add('********Le contenu de la table de données après modification du dernier enregistrement est le suivant********');
{Afficher le contenu de chaque domaine}
alors que ARecordSet.eof ne le fait pas
commencer
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Passer à la barre suivante, Suivant
fin;
{supprimer le dernier enregistrement}
ARecordSet.MoveLast;//Déplacer vers la dernière barre, Last
ARecordSet.delete;//Supprimer, supprimer
ARecordSet.Update;//Mise à jour, non nécessaire dans Delphi
ARecordSet.MoveFirst;//Déplacer vers le premier élément, Premier
memo1.lines.add('********Le contenu de la table de données après la suppression du dernier enregistrement est le suivant********');
{Afficher le contenu de chaque domaine}
alors que ARecordSet.eof ne le fait pas
commencer
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Passer à la barre suivante, Suivant
fin;
ARecordSet.Close;{Fermer l'ensemble de données}
{Utilisez l'instruction SQL pour interroger les enregistrements nommés "Zhang San"}
{Notez que dans les instructions SQL, les chaînes doivent être placées entre guillemets simples}
ARecordSet.open( 'select * from wfjcommu où AName = ''Zhang San''',
AConnection, adOpenStatic, adLockOptimistic, adCmdText );
memo1.lines.add('********Le contenu de Zhang San est le suivant********');
memo1.lines.add( 'Total' + IntToStr( ARecordSet.RecordCount ) + 'Enregistrements correspondants' );
{Afficher le contenu de chaque domaine}
alors que ARecordSet.eof ne le fait pas
commencer
strTemp := '';
pour intIndex := 0 à ARecordSet.Fields.count - 1 faire
strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';
memo1.lines.add( strTemp );
ARecordSet.MoveNext;//Passer à la barre suivante, Suivant
fin;
{Fermer l'ensemble de données et la connexion à la base de données}
ARecordSet.close;
AConnection.close;
fin;
Écouter les autres dire qu’il vaut mieux en faire l’expérience soi-même en voyant des exemples concrets. Dans cet exemple, nous montrerons comment utiliser les objets ADO pour interroger, ajouter des enregistrements, modifier des enregistrements et supprimer des enregistrements dans une table de données. Veuillez vous référer aux commentaires du programme pour une utilisation spécifique. Si vous avez une certaine expérience en programmation de bases de données Delphi, je pense que ce n'est pas difficile à comprendre.
La base de données utilisée dans notre exemple est Test.MDB, qui possède une table de données appelée wfjcommu, avec cinq champs AName, Portable, Tel, BP et PostAddress, qui représentent le nom, le numéro de téléphone mobile, le numéro de téléphone, le numéro de pager et l'adresse postale. respectivement.
Le programme ci-dessus a été débogué et passé sous PWIN98+ Delphi 3.0+PWS (Personal Web Server) 4.0.