Ajouter une base de données Visual FoxPro à SQL Server en tant que serveur lié

Cet article explique comment ajouter et interroger par programmation une source de données Visual FoxPro en tant que serveur lié à partir de Visual FoxPro.

Version d’origine du produit : Visual FoxPro
Numéro de la base de connaissances d’origine : 199131

Résumé

SQL Server 7.0 et SQL Server 2000 autorisent l’ajout de sources de données externes en tant que serveurs liés. Cette fonctionnalité permet de distribuer des requêtes hétérogènes sur des sources de données OLE DB. Cet article explique comment ajouter et interroger par programmation une source de données Visual FoxPro en tant que serveur lié à partir de Visual FoxPro.

Informations supplémentaires

sp_addlinkedserverest une nouvelle procédure stockée introduite dans SQL Server 7.0 et SQL Server 2000. sp_addlinkedserver crée un serveur lié, qui permet d’accéder à la distribution de requêtes hétérogènes sur des sources de données OLE DB.

La syntaxe pour l’ajout d’un serveur lié à partir de Transact - SQL est la suivante :

 sp_addlinkedserver [@server =] 'server',
 [@srvproduct =] 'product_name',
 [@provider =] 'provider_name',
 [@datasrc =] 'data_source',
 [@location =] 'location',
 [@provstr =] 'provider_string',
 [@catalog =] 'catalog'[@server =] 'server' Is the name of the linked server to
 create with sp_addlinkedserver.

[@srvproduct =] 'product_name' Is the product name of the OLE DB data
 source to add as a linked server.

[@provider =] 'provider_name' Is the unique provider identifier of the
 OLE DB provider corresponding to the
 data source.

[@datasrc =] 'data_source' Is the name of the data source, as
 interpreted by the OLE DB provider.

[@location =] 'location' Is the location of or path to the
 database as interpreted by the OLE DB
 provider.

[@provstr =] 'provider_string' Is the OLE DB provider-specific.

[@catalog =] 'catalog' Is the catalog to be used when making a
 connection to the OLE DB provider.

L’extrait de code suivant ajoute la base de données Testdata.DBC Visual FoxPro du répertoire SAMPLES\DATA à SQL Server en tant que serveur lié. Cet extrait de code suppose que Visual FoxPro et SQL Server sont exécutés sur le même ordinateur.

Remarque

L’utilisateur, Nom d’utilisateur, doit disposer des autorisations nécessaires pour effectuer ces opérations sur la base de données.

 Source_Path=IIF(VAL(SUBSTR(VERSION(),15,2))=6,HOME(2),HOME()+"SAMPLES\")
 Connect_String='DRIVER={SQL Server};' + ;
 'SERVER=MY_SERVER;DATABASE=PUBS;UID=UserName;PWD=StrongPassword'
 gnConnHandle=SQLSTRINGCONN(Connect_String)
 IF gnConnHandle > 0
 * Create a command string to pass to SQL Server via SQLExec
 SQLCommand="sp_addlinkedserver 'VFP','','MSDASQL',NULL,NULL,"+ ;
 "'DRIVER={Microsoft Visual FoxPro Driver};" + ;
 "SourceDB="+Source_Path+"DATA\TESTDATA.DBC;SourceType=DBC;NULL'"* CREATE the LINKED Server"
 Create_Linked_Server=SQLExec(gnConnHandle,SQLCommand)
 IF Create_Linked_Server > 0
 * The linked server was successfully created
 * Run the query
 =RunQuery()
 ELSE
 * The Linked Server either already exists or the command failed.
 * Test for existence of linked server with aerror()
 =AERROR(s_failed)
 IF "VFP' ALREADY EXISTS."$UPPER(s_failed[1,2])
 * The linked server exists, so run the query
 =RunQuery()
 ELSE
 * The linked server doesn't exist, so display a message
 =MESSAGEBOX(s_failed[1,2],32,'Failed')
 ENDIF
 ENDIF
 =SQLDISCONN(gnConnHandle)
 ENDIF

PROCEDURE RunQuery
 SQLCommand="SELECT * FROM OPENQUERY(VFP,'SELECT * FROM CUSTOMER')"
 QRYVal=SQLExec(gnConnHandle,SQLCommand,'SQLRESULTS')
 IF QRYVal > 0
 SELECT SQLResults
 BROW
 ELSE
 =AERROR(L_Server)
 =MESSAGEBOX(L_Server[1,2],32,'Query Failed')
 ENDIF
 RETURN

Après avoir exécuté l’extrait de code, ouvrez SQL Server Entreprise Manager et développez le nœud Serveurs liés. Un serveur lié nommé VFP a été ajouté.

References

Pour plus d’informations sur sp_addlinkedserver, recherchez sp_addlinkedserver dans le fichier d’aide de référence Transact - SQL.