Numéro d'article: 112746 - Dernière mise à jour: jeudi 18 janvier 2007 - Version: 2.1

ACC : How to base sous-formulaires sur des requêtes SQL directes

Sommaire

Agrandir tout | Réduire tout

Résumé

Avancé : La nécessité de codage expert, l'interopérabilité et compétences multi-utilisateur.

Cet article décrit comment utiliser une requête SQL directe pour la source d'enregistrement d'un formulaire. Il suppose que vous savez comment créer et utiliser des requêtes SQL directes.

Vous devez garder les considérations suivantes à l'esprit lorsque vous utilisez des requêtes SQL directes pour les sources d'enregistrement de formulaires :
  • Sources d'enregistrement de requête SQL directe de SQL sont en lecture seule.
  • Le Générateur de requêtes n'enregistre pas la chaîne de connexion sauf si vous enregistrez la requête.
  • Vous ne pouvez pas utiliser un sous-formulaire lié ou un sous-état avec une requête SQL directe en tant que sa source d'enregistrement.

Plus d'informations

Requêtes SQL directes sont en lecture seule

Formulaires basés sur des requêtes SQL directes sont en lecture seule, car SQL pass-par l'intermédiaire de requêtes sont en lecture seule. Le jeu d'enregistrements renvoyé par une SQL pass-par le biais d'une requête est un jeu d'enregistrements de capture instantanée ou en lecture seule. Ce comportement est voulu par la conception même du produit. Dans l'ordre pour que le formulaire puisse être mis à jour, basez votre formulaire sur une table attachée avec un index unique.

Le Générateur de requêtes n'enregistre pas la chaîne de connexion

Concepteur de requêtes de la propriété RecordSource affiche une fenêtre semblable à la fenêtre de création d'une requête. Cette fenêtre vous permet de construire la chaîne SQL ou la requête pour la propriété source (RecordSource). Le Générateur de requêtes définira la propriété RecordSource à une chaîne SQL si la chaîne SQL n'est pas enregistrée comme requête. Si vous enregistrez la chaîne sous la forme d'une requête, le nom de la requête sera utilisé en tant que la propriété RecordSource.

Lorsque vous utilisez une requête SQL directe créée à l'aide du Générateur de requêtes, le ODBC chaîne de connexion défini de cette requête n'est pas renvoyée dans le cadre de la propriété RecordSource chaîne SQL. Cela peut générer le message d'erreur "Impossible de trouver d'entrée de table ou requête '[table du serveur ODBC]'», car sans chaîne de connexion ODBC, le formulaire recherchera une table locale, au lieu d'une table sur le serveur. Si vous enregistrez la chaîne SQL sous la forme d'une requête, la propriété RecordSource contiendra le nom de la requête au lieu de la chaîne SQL et le formulaire sera en mesure de récupérer les données distantes correctement.

Requêtes SQL directes ne pouvez pas utiliser les propriétés ChampsFils (LinkChildFields) / ChampsPères (LinkMasterFields)

La meilleure façon d'utiliser des données basées sur des serveurs dans un sous-formulaire est pour attacher la table distante et puis basez le sous-formulaire sur la pièce jointe.

Si vous basez un sous-formulaire directement sur une requête SQL directe, le message d'erreur suivant peut s'afficher lorsque vous ouvrez le formulaire :
   In Microsoft Access 7.0 and 97:

      You can't use a pass-through query or a non-fixed column crosstab
      query as a record source for a subform or subreport.

   In Microsoft Access 1.x and 2.0:

      The crosstab query underlying a subform or subreport must have fixed
      column headings.
				

Cette erreur se produit dans Microsoft Access 7.0 et 97 si vous avez ChampsPères et ChampsFils (LinkChildFields) défini pour le sous-formulaire ou sous-état. Pour utiliser une requête SQL directe en tant que source d'enregistrement du sous-formulaire dans Microsoft Access 1.x et 2.0, vous devez définir dynamiquement la propriété de source du sous-formulaire dans l'événement Load du formulaire principal. Voici un exemple de procédure événementielle OnLoad propriété dans le formulaire principal MainForm dynamiquement définit la propriété source du sous-formulaire SPTSubForm :
   Sub MainForm_OnLoad
     Me!SPTSubForm.Form.RecordSource = "[<Name of SQL pass-through query>]"
   End Sub
				

Le sous-formulaire proprement dit doit être enregistré sans une propriété RecordSource (source). Notez que le sous-formulaire ne fonctionnera pas si les propriétés ChampsPères et ChampsFils (LinkChildFields) sont définies. Si vous avez besoin de filtrer les enregistrements du sous-formulaire basé sur une valeur dans le formulaire principal, votre requête de base sur les tables attachées, ou modifier l'objet QueryDef afin que la requête inclut la valeur dans le formulaire principal.

Références

Pour plus d'informations sur les requêtes SQL directes, recherchez dans le sommaire pour "requêtes pass-through", ou formulez votre question au Compagnon Office de Microsoft Access 97.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 1.0 Standard
  • Microsoft Access 1.1 Standard
  • Microsoft Access 2.0 Standard
  • Microsoft Access 95 Standard
  • Microsoft Access 97 Standard
Mots-clés : 
kbmt kbhowto kbusage KB112746 KbMtfr
Traduction automatiqueTraduction 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: 112746  (http://support.microsoft.com/kb/112746/en-us/ )
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.
Retired KB ArticleExclusion 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.
 

Traductions disponibles