0
votes

Accéder à SQL Query échoue sur un ordinateur différent

J'ai un jeu d'enregistrements qui fonctionne bien dans mon cas de Microsoft Access, mais lorsque je l'essaie d'être sur un autre ordinateur, il échoue.

J'ai déjà beaucoup d'enregistrements exécutés dans les deux versions de mon application d'accès. Les deux sont sur accès 2010, mais ils ont probablement des pilotes différents.

Le code ressemble à ceci: xxx

J'ai utilisé une msgbox pour confirmer tout de mes variables fonctionnent. Le code fonctionne comme prévu sur mon premier ordinateur, mais le second échoue simplement avec une erreur générique "en cliquant sur".

Il apparaît que le problème ici est la partie comprise, car c'est la seule fois que je ' jamais utilisé entre.

Y a-t-il une sorte de pilote SQL que mon deuxième ordinateur doit pouvoir exécuter cette requête entre entre-deux?


4 commentaires

Juste Utiliser des paramètres ! Ceci est probablement un problème avec différents formats de temps sur différents ordinateurs, si vous utilisez des paramètres, cela ne se produira pas.


Je viens de finir de lire votre message sur des paramètres, mais je suis sûr de ce que vous voulez que je fasse ici. Le format de temps est le même sur cet autre ordinateur (autant que je sache), et j'ai plusieurs autres requêtes / joints qui utilisent des dates sur les deux ordinateurs et ils travaillent tous sans aucun problème.


Après avoir vérifié votre profil, il semble que vous utilisiez un serveur SQL comme backend? Et certaines machines ont des pilotes ODBC différents (SQL Server 10.xxx). SQL-Server Newer que 2008 et vous utilisez DateTime2 ON WORKDATE ? Pour rendre le problème parfait, certains utilisateurs utilisent le MS Access Runtime 2010 et vous n'êtes pas au courant de Stackoverflow. COM / A / 56640798/9439330 ?


Merci d'avoir posté ceci, j'ai suivi le lien et j'ai essayé ce que Paul Tiki a dit qu'il l'avait fait, et cela a effectivement résolu le problème. La solution consistait à apporter le fichier .Accdb sur le deuxième ordinateur, supprimer une référence cassée, réparer et compacter le code, puis une fois que cela a été exporté vers .ACCDE tout a bien fonctionné. Je vais tester les autres réponses soumises à cela ensuite, mais cela semble être ce qui n'allait pas.


4 Réponses :


2
votes

Vous devez formater votre valeur de date sous forme de représentation de texte: xxx

edit:

Si vous avez suivi le conseil d'Albert et il échoue toujours , alors essayez: xxx

ou, si une zone de texte peut être vide: xxx


3 commentaires

Utilisation de ce code, j'ai eu la même erreur. Je ne pense pas que la date est la question ici - j'ai déjà beaucoup de code allant bien entre mes deux ordinateurs impliquant des dates.


Assurez-vous de définir ces zones de texte non liées comme format de date. Ensuite, l'utilisation de l'exemple ci-dessus doit fonctionner. Si vous ne le faites pas, une date de date régionale sur l'ordinateur des utilisateurs vous gâtera. Le résultat est que vos questions fonctionnent sur tous les ordinateurs, quelles que soient les paramètres de la date de l'utilisateur. Ainsi, les paramètres de date PC de l'utilisateur peuvent gâcher les choses. Si vous forcer / définir les boîtes de texte sur le format de date, l'approche ci-dessus devrait fonctionner - même pour des ordinateurs avec des formats de date différents.


Merci pour l'aide. Cela n'a pas corrigé mon problème, mais Albert, votre solution Voici m'a aidé à trouver la vraie solution.



1
votes

Comme suggéré par @erika dans les commentaires, l'utilisation de paramètres au lieu de concaténer les valeurs de formulaire dans votre relevé SQL évite toutes les questions découlant des différences régionales et protégerait également votre code de la possibilité de Injection SQL .

Considérez l'exemple suivant en fonction du contenu de votre code actuel: P>

With CurrentDb.CreateQueryDef _
("", "select * from timecards t where t.employeeid = @id and t.workdate between @from and @to")
    .Parameters("@id") = empID
    .Parameters("@from") = DateValue(Me.Text23)
    .Parameters("@to") = DateValue(Me.Text25)
    With .OpenRecordset(dbOpenSnapshot)
        If Not .EOF Then
            .MoveFirst
            Do Until .EOF
                Debug.Print .Fields(0)
                .MoveNext
            Loop
        End If
        .Close
    End With
End With


1 commentaires

Merci un tas pour cet exemple, je vais certainement essayer cela.



0
votes

S'il vous plaît essayez de cette façon, selon mon expérience, cela fonctionne mieux. XXX


0 commentaires

0
votes

ComputerVerverSteher m'a pointé dans la bonne direction en me dirigeant À ce numéro . J'ai essayé de la base de données compacte et de réparation, qui a jeté une erreur sur mon deuxième ordinateur. Il s'avère qu'il y avait une référence manquante sur mon deuxième ordinateur, "Microsoft Windows Common Controls 6.0 (SP6)". Après cela, j'ai fait la fonction compacte et de réparation et je l'ai testé à nouveau et cela a fonctionné. Je ne peux pas dire que je sais pourquoi il ne s'est écrasé que sur la seule requête, mais le problème est parti maintenant.


0 commentaires