Pardonnez ma naïveté, mais je suis nouveau à l'utilisation de Delphi avec des bases de données (ce qui peut sembler étrange à certains).Comment puis-je renvoyer toutes les valeurs d'une procédure stockée?
J'ai configuré une connexion à ma base de données (MSSQL) en utilisant une connexion TADOConnection. J'utilise TADOStoredProc pour accéder à ma procédure stockée.
Ma procédure stockée renvoie 2 colonnes, une colonne remplie de noms de serveurs et une deuxième colonne remplie d'utilisateurs sur le serveur. Il renvoie généralement environ 70 enregistrements ... pas beaucoup de données.
Comment est-ce que j'énumère cette procédure stockée par programme? Je suis capable de déposer un DBGrid sur mon formulaire et de l'attacher à un TDataSource (qui est ensuite attaché à mon ADOStoredProc) et je peux vérifier que les données sont correctement récupérées.
Idéalement, je voudrais énumérer les données renvoyées et les déplacer dans une TStringList.
Actuellement, je suis en utilisant le code suivant pour énumérer le ADOStoredProc, mais il ne s @RETURN_VALUE 'retours:
ADOStoredProc1.Open;
ADOStoredProc1.ExecProc;
ADOStoredProc1.Parameters.Refresh;
for i := 0 to AdoStoredProc1.Parameters.Count - 1 do
begin
Memo1.Lines.Add(AdoStoredProc1.Parameters.Items[i].Name);
Memo1.Lines.Add(AdoStoredProc1.Parameters.Items[i].Value);
end;
N'utilisez pas de FieldByName dans la boucle! Vous pouvez définir des champs au moment du design ou créer un objet Field entre les boucles Open et while. –
J'ai expressément choisi cette route pour plus de clarté. Mais dans le post, il faisait référence à deux colonnes et à 70 lignes donc ce n'est pas un gros frais généraux même si vous l'avez fait de cette façon. Cependant, je n'utilise jamais les champs définis lors de la conception ou créer un objet de champ comme vous le suggérez. Si vous voulez minimiser les frais généraux, vous pouvez référencer les champs par position ordinale, ce qui est ma préférence sur les champs définis. –