J'ai trouvé plusieurs messages sur l'utilisation de la fonction getDate () pour la table liée à SQL Server lors d'une procédure de VBA avant d'accès. Ces postes sont axés sur la clause de la requête, mais je n'ai pas été incapable de trouver des informations correspondantes sur l'utilisation de getDate () pour la tâche de colonne.
Par exemple, je comprends que dans la clause Where, j'utiliserais quelque chose comme Ceci: p> Cependant, je reçois des erreurs de syntaxe dans VBA lorsque j'essaie d'attribuer la date actuelle à une colonne, comme celle-ci: p> Dans cet exemple, le thedate est défini comme DateTime dans SQL Server. Écrit comme ceci, VBA Rapports "Erreur de syntaxe (opérateur manquant) dans l'expression de requête 'Cast (getdate (getdate () comme date)'. J'ai essayé d'entourer l'expression avec des délimiteurs de date d'accès à des accessibles, mais pas de chance là-bas. P> Après avoir dépassé environ 30 minutes à la recherche de Stackexchange.com Différentes façons de la date d'accès MS () dans SQL, j'ai été incapable de trouver ceci. Cependant, c'est si simple que je suis sûr qu'il a déjà été répondu quelque part. P> < / p>
3 Réponses :
Si vous exécutez cela dans l'accès sur une table liée (pas une requête PT), il devrait lire:
INSERT INTO MyTable ( SomeValue, TheDate ) VALUES ('Widget', Date());
Malheureusement, cela échoue lorsque je l'essaie dans l'accès MS. J'ai pu le faire fonctionner lorsque j'ai changé le type de colonne de DateTime à ce jour, mais ce n'est pas le résultat dont j'ai besoin.
Vous devez mélanger des choses. DateTime (non DateTime2) est par définition Le type de données à utiliser pour la date et l'heure à lire et à écrire à partir de l'accès.
Dans MS Access Vous êtes probablement (pas sûr à 100% pour SQL lié, vous devez expérimenter) devrait utiliser () code> et
date () code> fonctions. Le premier est équivalent à
getDate () code> dans SQL, le second retourne la date actuelle sans temps. P>
Cela a résolu le problème pour moi, en modifiant la date de fonction () dans ma déclaration T-SQL à la place (). J'ai changé qu'une chose et maintenant le code VBA fonctionne comme prévu. Je crois que c'est parce que la colonne de destination a du type DateTime et la fonction Date () ne fonctionne donc pas car elle exclut un composant temporel. Il est regrettable que MS Access a signalé cela comme une erreur "syntaxe" lorsqu'elle est vraiment une erreur de décalage de type de données. La partie "(opérateur manquant)" m'a vraiment envoyé dans la mauvaise direction.
Il semble y avoir une certaine déroutante ici. Si vous construisez une requête d'accès, alors zéro zéro des fonctions de la date du serveur SQL et de la syntaxe. Votre SQL doit continuer à être écrit pour accéder aux normes, à moins que vous n'ayez utilise une requête de passage. P>
Cependant, j'ai vu cela 100 fois ici. Quel est le type de données sur SQL Server Server? Est-ce DateTime ou DateTime2? P>
et double, triple, quddadopes, (et plus) Vérifiez la table liée en mode de décomposition. P>
Si vous vous trouvez sur SQL Server à l'aide du pilote standard Legacy "SQL Server". Celui qui a été expédié pendant 20 ans depuis Windows 98SE? P>
Vous devez vérifier si l'accès affiche ces colonnes sous forme de texte, ou comme des colonnes de date (dans lesquelles dans l'accès permettent toujours une partie temporelle si vous le souhaitez). P>
Code d'accès, les requêtes, les formulaires et tout doit nécessiter des modifications zéro si vous migrez ces données de l'accès à SQL Server et de relier la table. Encore une fois: zéro zéro changements. P>
Cependant, si vous avez utilisé DateTime2 sur le côté SQL Server? Ensuite, vous ne pouvez pas utiliser le héritage "SQL Server Pilote" lors de la liaison Tableau. La raison est qu'elles ne prennent pas en charge le nouveau format DateTime2. En conséquence, l'accès verra réellement, utiliser et traiter cette colonne sous forme de colonne de texte. Vous êtes vraiment, mais je ne veux vraiment pas que cela se produise. Pourquoi? Becuase alors vous passez la semaine prochaine à poser des questions sur la manière dont un code de date ou de la colonne ou la requête ne fonctionne pas. de nouveau: Zéro zéro changements sont nécessaires dans l'accès. Si vos dates commencent à casser, le problème n'est pas des formats de date, mais cette colonne est maintenant vue par accès en tant que type de données de texte. P>
soltuion: Soit modifier les colonnes SQL côté DateTime2 sur DateTime et Re-Link. P>
ou Reliez vos tables à l'aide d'un nouveau natif 11 (ou plus tard - jusqu'à 18 maintenant). De cette façon, l'accès verra / utilise / traitera / traitera la dateTime2 comme un format de date correct dans l'accès. P>
Alors, avant de faire quelque chose? Ouvrez l'une des tables d'accès liées à SQL Server en mode de conception. (ignorer le prmompt en lecture seule). Maintenant, consultez le type de données attribué aux colonnes de date. S'ils sont du texte, vous avez un désordre royal. P>
Vous devez re-relier à l'aide des nouveaux pilotes ODBC. P>
zéro de votre code existant, SQL et vos indemnités doivent être touchés ou même modifiés si vous utilisez une table liée à SQL Server. Mais là encore, si vous avez lié à l'aide du mauvais pilote SQL ODBC, vous ne pouvez pas voir ni traiter ces colonnes DateTime2 à la date - elle utilisera du texte et vous ne voulez vraiment pas permettre que cela se produise. P>
en résumé: Toute date de date, mises à jour SQL, tri, requête, code VBA, code formulaire, les rapports doivent continuer à fonctionner avec des modifications zéro. Si vous apportez des modifications aux dates après une migration, vous avez effectué tout cela mal, et ces colonnes de date ne sont pas vues par accès à des colonnes de date. P>
Débarrassez-vous de toutes les colonnes DateTime2, puis de re-link (changez-le côté serveur sur DateTime). Ou relier les tables à l'aide d'un pilote Native 11 ou version ultérieure ODBC. L'un ou l'autre de ces choix résoudra ce problème. P>
Ceci est une solution nécessitant un code zéro et zéro changements d'accès aux dates. P>
Dans MS Access, vous êtes probablement sûr (pas sûr de 100% pour SQL lié, mais vous pouvez essayer) peut utiliser
() code> et
date () code> fonctions. La première est équivalente à
getDate () code> dans SQL, le second retourne la date actuelle sans temps - exactement ce dont vous avez besoin.
Oui! Cela fonctionne dans mon cas. Merci. Je pense que c'est la différence entre les types de colonnes. Date () fonctionne pour une colonne de date, et maintenant () fonctionne pour une colonne DateTime. Lorsque j'importe une table d'accès à SQL Server, le processus créera la colonne de destination comme DateTime par défaut. Soumettez cela comme une réponse et je vais le marquer comme la solution.
Ce n'est pas vrai. La seule différence entre la date () et maintenant () est que maintenant () inclut l'heure de la journée. Et maintenant, vous mentionnez l'importation, mais ce n'est pas la question de votre question.
Je ne mentionne que l'importation pour indiquer que je ne choisis pas le type de colonne de destination, il est choisi pour moi. Ce que je vois, c'est que maintenant () retourne à la fois la date et l'heure, et cela semble fonctionner mieux que la date () pour une colonne de type de type DateTime.