Voici mon problème.
Dans mon data environement, j'utilise une requête du style :
select nom from client where idnom = ?
Dans l'onglet paramètre je peux donc définir ce "?" ex : 1.
Bon jusque là tout fonctionne.
Maintenant je voudrais mettre une variable à la place de cette valeure fixe.
Comment dois-je faire.
Nous pouvons seulement vous proposer un palliatif au problème.
Pour l'utilisation de l'onglet paramètre nous n'avons pas trouvé de moyens.
La solution est la suivante :
Dans le Data environnement, une commande "RPT_CLIENT" est crée avec une requête du style : "select nom from client where idnom = 1". Elle sera utilisée comme commandText.
Et un report "RptEDCLIENT" pour l'édition, avec la propriété dataMember = RPT_CLIENT
Attention, c'est parti !!
Nous saisissons la variable "CodId"dans une frame, un bouton CmdExecut lance le report ex :
Private Sub CmdExecut_Click()
DataEnvironment1.rsRPT_CLIENT.Requery DataEnvironment1.Commands("RPT_CLIENT").CommandText "SELECT NOM FROM CLIENT WHERE IDNOM" & CodId & " order by DPT"
DataEnvironment1.rsRPT_CLIENT.Close
DataEnvironment1.rsRPT_CLIENT.Open (DataEnvironment1.Commands("RPT_CLIENT").CommandText)
RptEDCLIENT.PrintReport 'si plusieurs éditions les unes derrière les autres,
'sinon RptEDCLIENT.show affiche la dernière édition.
End Sub
Cette astuce est utilisée dans le cas de votre exemple, report sans rupture, simple. Sinon, il y a mieux ! (humour)….La parade à un report avec ruptures et présentation de colonnes existants dans des tables différentes ou champs colonnes calculées, c'est de créer une table temporaire dans laquelle le tri et les colonnes sont préparées.
Ex :
Dans le Data environnement, une commande "RPT_CLIENT" est crée avec une requête du style : "select * from TEMPCLIENT". Elle sera utilisée comme commandText.
Et un report "RptEDCLIENT" pour l'édition, avec la propriété dataMember = RPT_CLIENT
Private Sub CmdExecut_Click()
Dim rs1 As Recordset
Case 0 'tous les clients
DataEnv.Connection1.Execute ("TRUNCATE TABLE TEMPCLIENT REUSE STORAGE")
Set rs1 = DataEnv.Connection1.Execute("select * from CLIENT, DEPT, MANAGER" _
& " where DTDEPART is null" _
& " and DPT = DEPT" _
& " and MANGR = MANAGER" _
& " order by CLIENT.NUMCLIENT")
While Not rs1.EOF
sql = "insert into TEMPCLIENT VALUES (…,….,..,..,..,..)"
DataEnv.Connection1.Execute sql
rs1.MoveNext
Wend
DataEnvironment1.rsRPT_CLIENT.Requery
RptEDCLIENT.Show
Case 1 'les clients d'une rue
…
….
….
Close #1
End Select
Voilà, si vous trouvez une meilleure technique merci de nous tenir au courant, et bon courage.
Merci de votre aide. Cela va pourvoir m'aider dans la conpréhension des data report.
NB: j'ai pu trouver une solution pour utiliser les paramètres "?".
Je vous explique.
Donc vous faites votre requête, et vous vous dites que vous ne connaissez pas encore la valeur du critère.
ex : select nom from client where idnom = ?
Après dans votre code il suffit juste de mettre une variable avec la valeur désirée.
ex : Supposons que la commande s'appelle commande1 alors :
dataenvironment.commande1(variable)
DrClient.show
Drclient (est le nom de mon report)
Et voilà
prenons par exemple variable = 1
alors la requête sera :
select nom from client where idnom = 1
et ainsi de suite...