2010-07-28 16 views
1

Je suis confronté à un problème où j'ai des caractères de point d'interrogation '?' dans mes scripts SQL à l'intérieur des commentaires provoque des problèmes. Lorsque j'exécute ces instructions via une connexion ODBC à l'aide de la fonction SQLEXEC Visual FoxPro, ces caractères sont considérés comme des paramètres et des invites VFP pour les valeurs.Comment éviter le paramétrage ODBC pour le caractère point d'interrogation? dans les littéraux et les commentaires?

Quelles sont mes options pour traiter les caractères de point d'interrogation dans les commentaires lors de l'utilisation de SQLEXEC? J'espère que je peux être à la fois comment désactiver le paramétrage ou bien comment échapper ces caractères avant de passer les chaînes comme des commandes. Jusqu'à présent, je n'ai trouvé aucune preuve d'une telle solution, il semble donc que je devrais supprimer tous les commentaires, ce qui est indésirable car ils sont généralement créer des instructions pour les procédures stockées et nous aimerions conserver ces commentaires. J'espère que quelqu'un pourrait avoir une solution plus agréable que d'effacer complètement les commentaires.

Répondre

2

Il semble que ce soit un known issue que SQLEXEC ne tient pas compte des commentaires dans la commande SQL lorsqu'il rencontre des caractères de point d'interrogation? qui représentent normalement les paramètres dans ODBC et de même dans VFP.

Juste un avertissement - l'analyseur de VFP sera attraper tous les point d'interrogation dans la chaîne SQL , même si elle est dans un SQL commentaire (ie sur une ligne commençant par - ou placé entre crochets entre/* * /) et va faire erreur s'il n'y a rien qui peut être une variable. S'il peut être une variable mais vous n'avez pas il défini à l'exécution, vous obtenez une zone de saisie pour l'entrer. Pire, votre utilisateur l'obtient.

Alors faites attention. - Dragan Nedeljkovich

1

avez-vous essayé de le remplacer par le code ascii? Quelque chose comme: '+ chr (63) +'

+0

Eh bien cela aurait été une solution de contournement utilisable pour les littéraux tels que "où mycolumn = 'quoi' + char (63)" mais puisque le problème semble provenir de commentaires concaténés chr (63) de VFP dans l'expression produirait seulement la même chaîne contenant un point d'interrogation qui est passé à SQLEXEC. Donc, fondamentalement, cela reviendrait à garder le point d'interrogation dans le sens littéral. – jpierson