J'ai besoin de convertir une grande quantité de requêtes SQL en procédures stockées. J'ai un certain code qui met à jour environ 20 ou 30 valeurs à la fois dans une procédure Delphi. Je peux gérer la création d'une procédure stockée pour faire une telle chose. Le problème est que ma façon de passer des paramètres aux procédures stockées est très encombrante comme ceci:
with stored_procedure do...... Param := Parameters.AddParameter; Param.Name := '@SSN'; Param.Value := edtSSN.text; Param := Parameters.AddParameter; Param.Name := '@FirstName'; Param.Value := edtFirstName.Text; Param := Parameters.AddParameter; Param.Name := '@LastName'; Param.Value := edtLastName.Text; Param := Parameters.AddParameter; Param.Name := '@UserRID'; Param.Value:= GetRIDFromCombo(cbUser);
4 Réponses :
Cela ne provoque pas de fuite de mémoire. Stored_ProcoDure va nettoyer ses paramètres. Vous pouvez confirmer cela avec FastMM en ajoutant ce qui suit à votre fichier .dPR: premier, je me débarrasserais de la déclaration "avec". Cela peut conduire à plus de problèmes et de code moins lisible. P> Je créerais une méthode d'assistance qui accepte une procédure stockée, un nom de paramètre et une valeur de paramètre, qui rendra votre code plus gérable. P > AddParam(stored_procedure, '@SSN', edtSSN.text);
AddParam(stored_procedure, '@FirstName', edtFirstName.Text);
AddParam(stored_procedure, '@LastName', edtLastName.Text);
AddParam(stored_procedure, '@UserRID', GetRIDFromCombo(cbUser));
Il y a une réponse acceptée :-), mais je veux vous diriger sur un moyen plus simple et plus facile de définir et d'utiliser les paramètres avec une ligne: C'est simple et flexible, car vous Peut définir les paramètres d'entrée et de sortie avec la même ligne. p> et de Delphi Aide: p>
Cela semble être une meilleure réponse que la mienne.
Je ne savais pas que cela existait. Merci d'avoir partagé!
Merci Bruce & Rob, c'est la beauté de Donc, j'ai appris beaucoup de choses pour Delphier ici et essayant de partager ce que je sais avec les autres :-)
C'est assez pratique, même si je préfère toujours le premier moyen, car il est plus simple d'une grande quantité de paramètres d'entrée uniquement
ADO créera les paramètres pour vous, il vous suffira de vous rafraîchir sur l'objet Paramètres: etc p> Si des paramètres sont sortis, vous aurez besoin de Définissez-les explicitement: P> sp.Parameters.ParamByName('@ReturnValue').Direction := pdInputOutput;
C'est bien, mais cela ne fonctionne que si la procédure est dans la base de données par défaut de la connexion. Il y a un bogue dans ADO qui détruisent des paramètres si vous utilisez Diffiffraabase.owner.ProcoDurename
J'ai également constaté que .Refresh ne fonctionne pas toujours, même dans la même base de données.OWER. Je n'ai trouvé aucun modèle à quand ça marche et quand ce n'est pas le cas, mais quand je ne reçois pas, je reçois et error comme "Paramètre '@SearchText" non trouvé ". quand j'utilise .parambyname. Le même appel fonctionne 99,9% du temps. L'ajout de paramètres manuellement semble contourner le problème.
Merci beaucoup. J'avais des problèmes avec des paramètres de type Tdate et TdateTime, car sp.parameters.refresh crée des paramètres avec le type de données de WELString au lieu de Tdate.
Ceci est le plus court que je connais: Remarque, vous devez attribuer le stocké_procedure.connection code> et appelez
stocké_procedure.parameters.refresh; < / code> avant de faire cela p> p>