2015-08-03 1 views
0

J'ai une base de données MS-Access 2010 dans laquelle les tables Sybase sont liées via un FNA nommé ODBC.Comment ajouter des lignes à une table liée ODBC dans MS-Access 2010

Je peux très bien lire les tableaux liés, mais leur écriture s'avère beaucoup plus difficile. J'essaie d'utiliser l'insertion ci-dessous dans sql pour ajouter des données d'une table d'accès nommée _ModelVersion à la table liée nommée DBA__ModelVersion. Parfois, cela fonctionne un peu de temps mais surtout je reçois une erreur qui dit « ODBC - insérer sur une table liée 'DBA__Collectors de violation a échoué d'authentification. »

strQuery63 = "INSERT INTO [DBA__ModelVersion] (ID, EDXVersion, template, DatVersion, DbVersion, AccessVersion) " & _ 
      "SELECT [_ModelVersion].ID, [_ModelVersion].EDXVersion,[_ModelVersion].ProjectTemplate, [_ModelVersion].DatVersion, [_ModelVersion].DbVersion, [_ModelVersion].AccessVersion " & _ 
      "FROM _ModelVersion " 


DoCmd.SetWarnings False 
DoCmd.RunSQL strQuery63 
DoCmd.SetWarnings True 

une autre méthode utiliser? Je ne suis pas sûr que ce soit important, mais j'ai des listes déroulantes qui utilisent la table liée comme source et avant que cette requête soit exécutée, une fonction dmax est également utilisée sur la table liée en question. J'ai lu que créer une procédure stockée sur la base de données sybase et l'appeler à partir de l'accès serait la voie à suivre mais je n'ai aucune idée de comment faire cela, et encore moins obtenir la procédure stockée pour extraire des données en utilisant le FNA côté Access.

Edit: Jusqu'à présent, j'ai essayé:
1) faire des types de données sûres de sybase sont montrées dans l'accès correctement (types de données dans sybase sont format: numérique et varchar et dans l'accès, ils apparaissent sous la forme décimale et le texte qui semble être fine)
2) Ajout de clé primaire auto-incrémentation de table sybase et indiquant quand le liant dans l'accès
3) en utilisant currentdb.execute avec dbSeeChanges
4) rafraîchissants la table en utilisant la méthode indiquée dans la réponse acceptée here
5) J'ai essayé d'ajouter un horodatage de champ avec la valeur définie à l'horodatage actuel. Pas d'amélioration. La fonctionnalité de mise à jour fonctionne de temps en temps, puis continue à donner "erreur d'exécution '3155': ODBC - insertion sur une table liée a échoué" qui est vu si j'utilise VBA ou la conception de requête pour exécuter la requête.

Répondre

0

J'ai déjà rencontré des problèmes avec RunSQL sur des tables liées ODBC. Lorsque vous traitez une table liée avec une clé primaire, vous devez utiliser l'option dbSeeChanges.

L'erreur mentionnée ci-dessus indique une table sans jeu de clés primaires. Cliquez avec le bouton droit sur la table et passez en mode Création (dans MSAccess). Mettez en surbrillance la ligne que vous souhaitez créer la clé primaire (identifiant unique). Cliquez sur le bouton avec l'icône de clé d'or.

Essayez UPDATE/INSERT avec les éléments suivants ...

CurrentDb.Execute "INSERT INTO tblYourTableName VALUES ('YourTextValue',123)", dbSeeChanges 

remplacer votre table/colonnes/valeurs.

+0

Pourriez-vous [edit] expliquer pourquoi ce code répond à la question? Les réponses au code seulement sont [découragées] (http://meta.stackexchange.com/q/148272/274165), car elles n'enseignent pas la solution. (Et dans ce cas, je ne vois vraiment pas comment cela évite les erreurs d'authentification, ni préserve l'insertion d'un SELECT.) –

+0

@NathanTuggy Et voilà. – JCro

+0

Le CurrentDb.Execute ne fonctionnait pas mais en ajoutant un champ numérique d'incrémentation automatique aux tables dans sybase et en les faisant fonctionner les clés primaires, merci. – Bryan