MS Access permet le type numérique GUID (en allemand il s'appelle 'Replikations-ID', donc je devine en anglais ce qui serait 'ID de réplication') qui est stocké comme un champ binaire de 16 octets dans la base de données.Comment définir un GUID en tant que paramètres de requête ADO à partir de Delphi?
J'ai trouvé comment accéder à ces domaines Delphi avec TADOQuery/TADOTable utilisant
(TheQuery.FieldByName('SomeGuidField') as TGUIDField).AsGuid;
Mais maintenant, je veux exécuter un comme requête SQL ceci:
SELECT * FROM SomeTable WHERE SomeGuidField=:AGuid
J'essayé d'installer un TADOQuery.SQL propriété à l'instruction ci-dessus, mais n'a trouvé aucun moyen de définir le paramètre AGuid
afin que la requête puisse être ouverte. Tout ce que j'ai essayé a donné lieu à la (ADO/COM) Erreur
Aucune valeur donnée pour un ou plusieurs paramètres requis
Par exemple:
TheQuery.ParamByName('AGuid').Value := QuotedString(GuidToStr(AGuid));
TheQuery.Open; // <<== crashes here
Cela ne fonctionne pas non plus:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open; // <<== crashes here
J'ai eu un regard sur la façon dont TGuidField(...).AsGuid
œuvres et trouvé qu'il convertit d'abord le GUID en une chaîne puis la chaîne en une variante (et vice versa).
Il fonctionne très bien, si je produis toujours la requête SQL comme ceci:
SELECT * FROM SomeTable WHERE SomeGuidField='<a guid goes here>'
Comme je passe que TADOQuery objet autour du programme que je voudrais changer seulement le AGuid
-parameter à garder la plupart des méthodes agnostiques sur l'instruction SQL réelle.
Existe-t-il un autre moyen de définir un paramètre GUID que de toujours modifier l'instruction SQL complète?
(Il doit y avoir un GUID parce que je besoin d'un identificateur global unique pour synchroniser avec d'autres bases de données qui sont MS SQL ou MS Access de.)
Modifier vradmilovic a raison, cela fonctionne:
TheQuery.ParamByName('AGuid').Value := GuidToStr(AGuid);
TheQuery.Open;
Je ne comprends pas pourquoi cela n'a pas fonctionné la première fois que je l'ai essayé.
attente, fermé comme trop localisée? Je serais fortement en désaccord. Je devrais ressusciter cette question et lancer un vote ré-ouvert. –