Comment faire pour accéder à plusieurs bases de données dans une requête SQL dans Visual Basic 3.0

Traductions disponibles Traductions disponibles
Numéro d'article: 113701 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Lors de l'accès aux données à partir de plusieurs sources de données simultanément dans une seule requête, vous souhaiterez probablement utiliser la méthode la plus rapide et plus générale--attacher les tables à partir des sources de données différents à une seule base de données Microsoft Access. À ce stade, les requêtes qui s'étendent sur deux bases de données différentes peuvent être construites comme si toutes les tables, attachés ou locales, étaient locales dans la base de données Microsoft Access.
Attacher des tables a performances puissantes et administratifs d'avantages--en particulier si vous exécutez des requêtes à plusieurs reprises. Toutefois, vous souhaiterez prendre l'itinéraire plus lent que décrit dans cet article lorsque vous avez besoin d'utiliser des requêtes ad hoc qui englobent deux ou plusieurs bases de données. Cet article explique comment construire ces requêtes de base de données croisées, plus lents.

Plus d'informations

Il existe deux méthodes que vous pouvez utiliser pour spécifier une base de données en dehors de celle qui est actuellement ouvert.

Méthode 1

Microsoft Access SQL fournit une clause in qui vous permet de vous connecter à une base de données externe (une base de données autre que la base de données en cours). Cette méthode est le cas, toutefois, vous limite à une seule base de données externe à la fois.

La clause IN compose de deux parties, nom de la base de données et la chaîne de connexion. Le nom de la base de données est un chemin d'accès complet au fichier ou au répertoire contenant le fichier de la base de données et la chaîne de connexion contient le type de base de données et d'autres paramètres selon vos besoins.

Pour spécifier une base de données externe, ajoutez un point-virgule (;) pour la connexion partie et placez-le entre guillemets simples ou doubles. L'exemple suivant utilise la clause IN pour spécifier une table (clients) dans une base de données dBASE IV (ventes):
SELECT Customers.CustomerID
FROM Customers
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE Customers.CustomerID Like "A*"
				
dans Visual Basic, vous pouvez créer une feuille de réponse dynamique à partir de l'exemple ci-dessus en utilisant le code Visual Basic suivant :
Dim db As Database
Dim ds As Dynaset
Dim sql As String

' Open a database:
Set db = OpenDatabase("C:\VB\BIBLIO.MDB")

' Build the select statement, referencing the external dBASE IV file:
sql = "SELECT Customers.CustomerID, FROM Customers"
sql = sql & " IN 'C:\DBASE\DATA\SALES' 'dBASE IV;'"
sql = sql & " WHERE Customers.CustomerID Like 'A*'"

' Create the recordset:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

Méthode 2

Le moteur de Microsoft Access intégré à Visual Basic version 3.0 peut analyser les requêtes SQL pour inclure la chaîne de connexion utilisée pour ouvrir un objet de base de données. La clause FROM de l'instruction SQL accepte un nom de table qualifié complet, qui permet le sélection élective de la chaîne de connexion dans square brackets avant le nom de la table. La chaîne de connexion est séparée par un point à partir du nom de table. Cette méthode vous permet de vous connecter à plusieurs bases de données externes en même temps.

Vous pouvez accéder à n'importe quelle table dans une des deux bases de données à l'intérieur d'une instruction select unique en utilisant cette syntaxe :
SELECT tbl1.fld1,tbl2.fld1
FROM [odbc;dsn=datasource;database=pubs;Username= <username>;PWD=<strong password>].tbl1,
[dbase iii;database=C:\DBASE3].tbl2
WHERE tbl1.fld1 = tbl2.fld1
				
cet exemple joint deux tables à partir de deux bases de données différentes, une une source de données ODBC et l'autre un dBASE III table dans le répertoire C:\DBASE3.

En règle générale, la chaîne de connexion utilisée ici entre crochets est identique à la propriété Connect d'un objet TableDef lors de l'attachement ou le quatrième paramètre de l'instruction OpenDatabase. Il sera dans un des trois formes en fonction de la base de données (ODBC, ISAM ou Microsoft Access).

Pour les bases de données ODBC :
   [odbc;dsn=datasource;database=thedatabasename;Username=<username>;
PWD=<strong password>]
				
bases de données ISAM pour :
   [paradox 3.X;database=C:\DATABASE\PARADOX3]
   [foxpro 2.5;database=C:\DATABASE\FOX25]
   [dbase iv;database=C:\DATABASE\DBASEIV]
   [btrieve;database=C:\DATABASE\BTRIEVE\FILE.DDF]
				
bases de données pour Microsoft Access :
   [;database=C:\VB\BIBLIO.MDB]
				
Remarque le premier point-virgule pour les bases de données Microsoft Access est important. C'est exactement la même chaîne que nécessaire pour remplir la propriété Connect d'un objet TableDef avant de joindre la table à une base de données du format Microsoft Access. Le premier point-virgule est un espace réservé pour la spécification de format de base de données inutiles et permet la «base de données = "clause à suivre.

Exemple de code d'une requête de base de données multiples

Cet exemple montre comment créer une feuille de réponse dynamique joignant deux tables à partir de deux sources de données, un serveur SQL Server à une et l'autre une base de données Microsoft Access. La table TestTab est sur le serveur SQL Server et la table T1 est dans la base de données Microsoft Access.

Remarque<username>Vous devez modifier <nom_utilisateur> et < mot de passe fort > pour les valeurs correctes avant d'exécuter ce code. Assurez-vous que le nom d'utilisateur possède les autorisations appropriées effectuer cette opération sur la base de données.
Dim db As database
Dim ds As dynaset
Dim sql As String, Uid$, Pwd$

Set db = OpenDatabase("C:\VB\BIBLIO.MDB")
' This obtains a valid database object. It does not have to be a Microsoft
' Access database; the following works equally as well:
' Set db = OpenDatabase("C:\FOXPRO25\", 0, 0, "foxpro 2.5")

' The values here are hard-coded, but you could prompt the user for their
' user id and password.
Uid$ = <username>
Pwd$ = <strong password>

' Build the select statement, concatenating the user's id and password:
sql = "SELECT T1.F2, TestTab.F2, TestTab.F3"
sql = sql & " FROM [;database=C:\ACCESS\DB1.MDB].T1 , "
sql = sql & " [odbc;dsn=texas;database=playpen;Username=" & Uid$
sql = sql & ";PWD=" & Pwd$ & "].TestTab"
sql = sql & " WHERE T1.F1 = TestTab.F1"

' Execute the select query:
Set ds = db.CreateDynaset(sql)

' Loop through and display the records:
While Not ds.EOF
   For i = 0 To ds.Fields.Count - 1
      Print ds(i); "  ";
   Next i
   Print
   ds.MoveNext
Wend
				

Spécial note concernant sécurisés des bases de données Microsoft Access

Si la base de données Microsoft Access est sécurisée, l'application Visual Basic doit exécuter la SetDataAccessOption et commandes SetDefaultWorkspace avant d'exécuter toutes les données accèdent à du code connexe. Cela est nécessaire pour réussir à ouvrir une session car Microsoft Access n'utilise pas le «nom d'utilisateur = "et" PWD = "sections de la chaîne de connexion. Par exemple :
   ' Establish the location of the SYSTEM.MDA files if in another
   ' directory other than the \WINDOWS directory:
   SetDataAccessOption 1, "C:\MYDIR\MYAPP.INI"
   ' Log on to a valid account:
   SetDefaultWorkspace "admin", "<password>"
				
lorsque cela est fait, les requêtes vers la base de données Microsoft Access sécurisée réussira. Toutefois, notez que, en raison de ce processus, il existe une limitation intégrée pour cette technique ad hoc ; seul sécurisé la base de données Microsoft Access est accessible avec une requête ad hoc. Cela est dû au fait que lorsque le moteur Microsoft Access est initialisé dans une session avec une combinaison de nom et le mot de passe d'utilisateur particulier, ces valeurs sont conservées jusqu'à ce que la session (session de l'environnement, VB.EXE ou programme exécutable Visual Basic) se termine.

Toutefois, si plus de deux bases de données Microsoft Access sécurisées est nécessaire d'accéder d'une requête, la meilleure approche consiste à déplacer les tables réels à partir de bases de données sécurisées dans une base de données sécurisée. Pour ce faire, vous devez modifier le mot de passe pour le compte d'administrateur pour "" temporairement pendant les opérations de transfert. Puis vous pouvez utiliser le code Visual Basic, par exemple celles contenues dans l'exemple d'accès aux données Visdata, pour copier les tables.

Références

Pour plus d'informations sur la sécurité de Microsoft Access, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
105990INFO : Comment Visual Basic 3.0 handles sécurité définie par Microsoft Access

Propriétés

Numéro d'article: 113701 - Dernière mise à jour: vendredi 1 septembre 2006 - Version: 3.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 3.0 Édition professionnelle
Mots-clés : 
kbmt kbhowto kbsqlprog KB113701 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 113701
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com