2009-05-11 5 views
2

Dans MS Access assignant une chaîne littérale peuvent parfois créer une chaîne videmyString = "Mettre à Jour" des résultats dans un myString vide

Le code suivant

Public Sub test() 
    Dim myString As String 
    myString = "UPDATE " 
    Debug.Print "'" & myString & "'" 
End Sub 

résultats dans

'' 

Cela me fait peur. Cela n'arrive que parfois. D'autres fois le "UPDATE" fonctionnera, mais myString = "tblCategorie" ne fonctionnera pas. Il doit être exactement cette chaîne. Si "UPDATE" échoue, alors "update" sera toujours correct.

J'utilise MS Access 2003 11.8204.8221 SP3 Est-ce que quelqu'un a le même problème?

(avant de dire:. L'accès de décharge que nous faisons déjà, mais toujours dans une phase de transition, je ne suis pas vraiment attendant quelqu'un de venir avec une réponse décente, mais un gars peut espérer)

[MISE À JOUR]: Merci pour tous les commentaires! laissez-moi juste mettre très clairement si

  1. ce n'est pas une faute de frappe. Le même code fonctionne parfois, et parfois non.
  2. Il est exécuté de manière isolée, donc ce n'est pas un problème de variable globale.
  3. J'ai mis à jour l'exemple à le code exact qui échoue/n'échoue pas. C'est une copie littérale. Je le teste en le collant dans un module et en tapant 'test' dans l'écran direct.
  4. Elle a d'abord sauté dans le code qui avait travaillé parfaitement l'année dernière moitié,
  5. Il est vraiment l'affectation de chaîne qui ne réussit pas (je peux vérifier que, en mettant une pause sur la déclaration d'affectation)
  6. je produis ma base de données de text exports, donc ce ne peut pas vraiment être un problème de corruption. (Il pourrait être, mais ce n'est pas un que je peux corriger en compressant, etc.)
+0

Est-ce que le Debug.Print est un problème? Essayez de voir la valeur de la variable dans la fenêtre de la montre. – shahkalpesh

+0

Pourquoi voudriez-vous inclure une chaîne SQL entre guillemets simples? –

+0

@David W. Fenton: on ferait cela lors de l'impression d'une chaîne à la fenêtre immédiate pour le rendre plus facile de faire une vérification visuelle du remplissage de l'espace. Aussi, je pense que c'est juste un exemple; Je veux dire, pourquoi lire un littéral de piqûre dans une variable de chaîne si le seul point de la procédure de sous est d'imprimer à la fenêtre immédiate de VBA qui (nous espérons) ne sera jamais vue par des utilisateurs. – onedaywhen

Répondre

0

Le code que vous avez publié est une copie du code qui échoue, ou un facimile raisonnable? Je me demande si quelque chose a été perdu dans la paraphrase, car je ne vois rien de mal dans le code que vous avez publié.

+0

Alors que le code qui a initialement donné l'erreur est différent, c'est le cas de test que j'ai utilisé pour réduire l'erreur. Si j'entre ce code (ou simplement "UPDATE" dans l'écran direct) le comportement décrit se produit. Parfois. – Jauco

0

Juste une supposition aveugle ... êtes-vous sûr de bien saisir le second "myString"?

Beacuse il vous fait pas (ex.

Debug.print "'" & mySting & "'" 

) L'accès ne se plaindra pas, mais il va créer une variable vide ...

+0

J'ai l'option explicite sur l'accès se plaindre. En outre, si je mets un point d'arrêt sur l'instruction d'affectation, je peux voir que la variable est vide. – Jauco

+0

Curioser et curieux ... avez-vous pensé au dumping? ;-) Je plaisante ... désolé, pour le moment je n'ai rien d'autre ... –

1

Utilisez-vous On Error Resume Next est-à-dire l'affectation à défaut en silence ? Cela dit, je ne peux pas penser pourquoi une attribution d'un String littéral à une variable String échouerait, ce qui soulève la question: mySting est-il vraiment tapé comme String? MISE À JOUR: Je vois à partir de votre mise à jour (jeu de mots?) Que mes suppositions sont désactivées. Je ne vois tout simplement pas comment votre code pourrait ne pas imprimer autre chose que 'UPDATE'.Peut-être que vous devriez maintenant voir cela comme une occasion d'abandonner SQL dynamique en faveur des déclarations préparées ou, de préférence, PROCEDURES (bien sûr, dans les procs stockées ACE/Jet sont limités à une seule instruction SQL, mais au moins ils gardent le code SQL dans le bon endroit à savoir le DB).

+0

Alors que cela résoudrait le problème de la requête, j'utilise aussi des chaînes dans d'autres endroits. Je vous ai upvoted puisque c'est à peu près aussi proche d'une solution que nous aurons probablement. (Et quoi qu'il en soit, la réécriture dans un vrai langage de programmation avance bien :-) – Jauco

0

accès Dump! :-)

Quelque chose est FUBAR.Have vous avez essayé un Compact et réparation sur la base de données?

L'autre chose que je voudrais essayer est d'exécuter un Copile sur le code VBA (Debug-> Compile accès [X]).

Questions connexes