Derniers articles http://www.yaugsoft.com Derniers articles (C) 2005-2009 PHPBoost fr PHPBoost Comment faire une jointure avec une fonction table paramétrée. http://www.yaugsoft.com/articles/articles.php?cat=2&id=8 http://www.yaugsoft.com/articles/articles.php?cat=2&id=8 On utilise <span style="color:maroon;">CROSS APPLY</span> pour faire un JOIN et <span style="color:maroon;">OUTER APPLY</span> pour faire un LEFT JOIN<br /> <br /> <strong>Exemple :</strong><br /> <br /> <span class="text_code">Code SQL :</span><div class="code"><pre style="display:inline;"><pre class="sql" style="font-family:monospace;">&nbsp; <span style="color: #993333; font-weight: bold;">SELECT</span> Factures<span style="color: #66cc66;">.</span>IDFacture<span style="color: #66cc66;">,</span> Factures<span style="color: #66cc66;">.</span>IDClient<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>Qtee<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>Prix<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>SousTotal<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>TPS<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>TVQ<span style="color: #66cc66;">,</span> CalculFact<span style="color: #66cc66;">.</span>Total <span style="color: #993333; font-weight: bold;">FROM</span> Factures <span style="color: #993333; font-weight: bold;">CROSS</span> APPLY CalculFacture<span style="color: #66cc66;">&#40;</span>Factures<span style="color: #66cc66;">.</span>IDFacture<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> CalculFact &nbsp;</pre></pre></div><br /> <br /> Merci à Éric Vaillancour pour la piste <a href="http://www.sqlprof.com">SQL Prof</a> Thu, 15 Apr 2010 10:08:01 -0400 Exemple de curseur dans TSQL http://www.yaugsoft.com/articles/articles.php?cat=2&id=5 http://www.yaugsoft.com/articles/articles.php?cat=2&id=5 Permet à l'aide des curseurs d'extraire une liste de nom pour les mettres sur une seul ligne séparé par une virgule. Y'a peut-être une meilleur solution pour faire la même chose mais l'idée est de montrer comment fonctionne les curseurs avec TSQL.<br /> <br /> <span class="text_code">Code SQL :</span><div class="code"><pre style="display:inline;"><pre class="sql" style="font-family:monospace;">&nbsp; <span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">FUNCTION</span> dbo<span style="color: #66cc66;">.</span>ExempleCurseur <span style="color: #66cc66;">&#40;</span> @NomVille nvarchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> RETURNS nvarchar<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> BEGIN DECLARE @List nvarchar<span style="color: #66cc66;">&#40;</span>MAX<span style="color: #66cc66;">&#41;</span> DECLARE @tmpNom nvarchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">101</span><span style="color: #66cc66;">&#41;</span> &nbsp; <span style="color: #993333; font-weight: bold;">SELECT</span> @List <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span> &nbsp; DECLARE OPList CURSOR <span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">SELECT</span> dbo<span style="color: #66cc66;">.</span>Clients<span style="color: #66cc66;">.</span>Nom <span style="color: #993333; font-weight: bold;">FROM</span> dbo<span style="color: #66cc66;">.</span>Clients <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #66cc66;">&#40;</span>dbo<span style="color: #66cc66;">.</span>Clients<span style="color: #66cc66;">.</span>Ville<span style="color: #66cc66;">=</span> @NomVille<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> dbo<span style="color: #66cc66;">.</span>Clients<span style="color: #66cc66;">.</span>Nom &nbsp; OPEN OPList FETCH NEXT <span style="color: #993333; font-weight: bold;">FROM</span> OPList <span style="color: #993333; font-weight: bold;">INTO</span> @tmpNom &nbsp; WHILE <span style="color: #66cc66;">&#40;</span>@@FETCH_STATUS<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> BEGIN <span style="color: #993333; font-weight: bold;">SELECT</span> @List<span style="color: #66cc66;">=</span>@List <span style="color: #66cc66;">+</span> @tmpNom <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">', '</span> FETCH NEXT <span style="color: #993333; font-weight: bold;">FROM</span> OPList <span style="color: #993333; font-weight: bold;">INTO</span> @tmpNom END &nbsp; CLOSE OPList DEALLOCATE OPList &nbsp; <span style="color: #993333; font-weight: bold;">IF</span> @List <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">SELECT</span> @List <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'n/a'</span> ELSE <span style="color: #993333; font-weight: bold;">SELECT</span> @List <span style="color: #66cc66;">=</span> SUBSTRING<span style="color: #66cc66;">&#40;</span>@List<span style="color: #66cc66;">,</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span>LEN<span style="color: #66cc66;">&#40;</span>@List<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">-- Supprime la dernière virgule.</span> &nbsp; <span style="color: #993333; font-weight: bold;">RETURN</span> @List END GO &nbsp;</pre></pre></div> Wed, 24 Feb 2010 17:56:36 -0500 Comment utiliser un objet Thread http://www.yaugsoft.com/articles/articles.php?cat=1&id=4 http://www.yaugsoft.com/articles/articles.php?cat=1&id=4 Voici un exemple que j'ai trouvé sur le site de MSDN France par Pascal Belaud. Sur l'utilisation d'un objet Thread pour faire du multi threading. Vous pouvez d'ailleurs trouver sur le <a href="http://www.microsoft.com/france/vision/saga-dot-net/default.aspx">site de l'auteur</a> une excellente suite de vidéos sur le .Net et en Français.<br /> <br /> <span class="text_code">Code VB :</span><div class="code"><pre style="display:inline;"><pre class="vb" style="font-family:monospace;">&nbsp; Imports System.Threading &nbsp; <span style="color: #000080;">Public</span> Class FormMain &nbsp; <span style="color: #000080;">Private</span> monThread <span style="color: #000080;">As</span> Thread &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> ButtonDémarrer_Click(<span style="color: #000080;">ByVal</span> sender <span style="color: #000080;">As</span> System.<span style="color: #000080;">Object</span>, <span style="color: #000080;">ByVal</span> e <span style="color: #000080;">As</span> System.EventArgs) Handles ButtonDémarrer.Click &nbsp; monThread = <span style="color: #000080;">New</span> Thread(<span style="color: #000080;">AddressOf</span> démarrage) monThread.Start() &nbsp; MessageBox.Show(Me, <span style="color: #800000;">&quot;Thread démarré&quot;</span>, <span style="color: #800000;">&quot;Threading&quot;</span>, MessageBoxButtons.OK, MessageBoxIcon.Information) &nbsp; <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> démarrage() &nbsp; <span style="color: #000080;">For</span> index <span style="color: #000080;">As</span> <span style="color: #000080;">Integer</span> = 0 <span style="color: #000080;">To</span> 100000 &nbsp; MAJLabel(index) Thread.Sleep(0) &nbsp; <span style="color: #000080;">Next</span> &nbsp; <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Private</span> Delegate <span style="color: #000080;">Sub</span> MAJLabelDelegate(<span style="color: #000080;">ByVal</span> index <span style="color: #000080;">As</span> <span style="color: #000080;">Integer</span>) &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> MAJLabel(<span style="color: #000080;">ByVal</span> index <span style="color: #000080;">As</span> <span style="color: #000080;">Integer</span>) &nbsp; <span style="color: #000080;">If</span> LabelValeur.InvokeRequired <span style="color: #000080;">Then</span> &nbsp; LabelValeur.Invoke(<span style="color: #000080;">New</span> MAJLabelDelegate(<span style="color: #000080;">AddressOf</span> MAJLabel), index) Return &nbsp; <span style="color: #000080;">End</span> <span style="color: #000080;">If</span> &nbsp; LabelValeur.Text = index.ToString() &nbsp; <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> ButtonArrêter_Click(<span style="color: #000080;">ByVal</span> sender <span style="color: #000080;">As</span> System.<span style="color: #000080;">Object</span>, <span style="color: #000080;">ByVal</span> e <span style="color: #000080;">As</span> System.EventArgs) Handles ButtonArrêter.Click &nbsp; monThread.Abort() &nbsp; <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">End</span> Class &nbsp;</pre></pre></div><br /> <br /> Vous remarquerez que l'auteur à utilisé des caractères accentués dans son exemple. Bien que cela semble techniquement possible. De grâce, ne fait jamais ça dans vos code si vous ne voulez pas de problème.<br /> <br /> Vous remarquerez également l'utilisation d'un Delegate avec la méthode MAJLabel. Cette astuce permet de pouvoir modifier un composant graphique dans le Thread principal de l'application. Autrement cela n'aurait pas été possible car un Thread n'a pas le droit de modifier ce qui se passe dans un autre Thread. Sun, 21 Feb 2010 15:17:01 -0500 TrueCrypt http://www.yaugsoft.com/articles/articles.php?cat=3&id=3 http://www.yaugsoft.com/articles/articles.php?cat=3&id=3 Je vais vous parler de cryptage aujourd&#8217;hui. En fait, pour faire une histoire courte, je me suis acheté une clef USB pour pouvoir stocker des informations, mais je voulais que celle-ci soit sécurisé. Donc, je m&#8217;achète une clef qui venait avec, soi-disant, un logiciel de cryptage des données. Bon bravo! Je déballe ma clef et je démarre le logiciel, mais rien n&#8217;y fait le logiciel plante toujours au moment du formatage de la clef. Je vais donc sur le site du fabricant et je télécharge la dernière version du logiciel et toujours le même problème. Je perds patience et je décide de chercher un logiciel sur internet pour arrivé à mais fin et comble du bonheur j&#8217;ai trouvé un logiciel fabuleux et qui plus est, il est en open source et gratuit ayant pour nom TrueCrypt. Non seulement il peut créer des fichiers de cryptage sur une clef USB, mais vous pouvez également le faire sur des partitions complètes (par contre, je n&#8217;ai pas essayé). Le seul défaut que je lui trouve c&#8217;est d&#8217;être seulement en anglais. Vous pouvez trouver le logiciel <a href="http://www.truecrypt.org/">ici</a>. Et j&#8217;ai trouvé un <a href="http://www.medicalnerds.com/encrypting-a-usb-key-using-truecrypt/#more-86">mini tutoriel</a> (en anglais) qui explique comment crypter sur une clef USB. Bon cryptage. Sun, 21 Feb 2010 14:05:01 -0500 WebBrowser et COM http://www.yaugsoft.com/articles/articles.php?cat=1&id=2 http://www.yaugsoft.com/articles/articles.php?cat=1&id=2 Je suis présentement à la découverte du composant WebBrowser avec lequel j&#8217;essaie de le faire interagir avec une Form de mon application. Le tout par le biais de COM (Component Object Model). Rien de bien compliqué au premier abord. Voici le code que Micosoft suggère :<br /> <br /> <span class="text_code">Code VB :</span><div class="code"><pre style="display:inline;"><pre class="vb" style="font-family:monospace;">&nbsp; Imports System Imports System.Windows.Forms Imports System.Security.Permissions &nbsp; <span style="color: #000080;">Public</span> Class Form1 Inherits Form &nbsp; <span style="color: #000080;">Private</span> webBrowser1 <span style="color: #000080;">As</span> <span style="color: #000080;">New</span> WebBrowser() <span style="color: #000080;">Private</span> <span style="color: #000080;">WithEvents</span> button1 <span style="color: #000080;">As</span> <span style="color: #000080;">New</span> Button() &nbsp; <span style="color: #000080;">Public</span> Shared <span style="color: #000080;">Sub</span> Main() Application.EnableVisualStyles() Application.Run(<span style="color: #000080;">New</span> Form1()) <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Public</span> <span style="color: #000080;">Sub</span> <span style="color: #000080;">New</span>() button1.Text = <span style="color: #800000;">&quot;call script code from client code&quot;</span> button1.Dock = DockStyle.Top webBrowser1.Dock = DockStyle.Fill Controls.Add(webBrowser1) Controls.Add(button1) <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> Form1_Load(<span style="color: #000080;">ByVal</span> sender <span style="color: #000080;">As</span> <span style="color: #000080;">Object</span>, <span style="color: #000080;">ByVal</span> e <span style="color: #000080;">As</span> EventArgs) Handles Me.Load webBrowser1.AllowWebBrowserDrop = <span style="color: #000080;">False</span> webBrowser1.IsWebBrowserContextMenuEnabled = <span style="color: #000080;">False</span> webBrowser1.WebBrowserShortcutsEnabled = <span style="color: #000080;">False</span> webBrowser1.ObjectForScripting = Me <span style="color: #008000;">' Uncomment the following line when you are finished debugging. </span> <span style="color: #008000;">'webBrowser1.ScriptErrorsSuppressed = True </span> webBrowser1.DocumentText = _ <span style="color: #800000;">&quot;&lt;script type=&quot;</span>text/javascript<span style="color: #800000;">&quot;&gt;&lt;!–mce:0–&gt;&lt;/script&gt;&lt;button&gt; &quot;</span> &amp;amp; _ <span style="color: #800000;">&quot;call client code from script code&lt;/button&gt;&quot;</span> &amp;amp; <span style="color: #800000;">&quot;&quot;</span> <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Public</span> <span style="color: #000080;">Sub</span> Test(<span style="color: #000080;">ByVal</span> message <span style="color: #000080;">As</span> <span style="color: #000080;">String</span>) MessageBox.Show(message, <span style="color: #800000;">&quot;client code&quot;</span>) <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> button1_Click(<span style="color: #000080;">ByVal</span> sender <span style="color: #000080;">As</span> <span style="color: #000080;">Object</span>, <span style="color: #000080;">ByVal</span> e <span style="color: #000080;">As</span> EventArgs) Handles button1.Click webBrowser1.Document.InvokeScript(<span style="color: #800000;">&quot;test&quot;</span>, <span style="color: #000080;">New</span> <span style="color: #000080;">String</span>() {<span style="color: #800000;">&quot;called from client code&quot;</span>}) <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span> &nbsp; <span style="color: #000080;">End</span> Class &nbsp;</pre></pre></div><br /> <br /> Bref, rien de bien compliquer. Mais voilà que quand je teste l&#8217;application, j&#8217;ai une erreur de script avec comme message que &#8220;window.external&#8221; est de référence NULL ou inatteignable. Finalement, la solution est vraiment bête. Dans les options de votre application (je suis sous VS2008) à partir de l&#8217;onglet &#8220;Application&#8221; cliquez sur &#8220;Informations de l&#8217;assembly&#8230;&#8221; et vous devez activer la case à cocher &#8220;Rendre l&#8217;assembly visible par COM&#8221; Et voilà! Tout fonctionne à merveille. Je vous invite à consulter l&#8217;aide du composant WebBrowser pour plus de détail sur le code et ce composant qui est très pratique pour afficher simplement une page web ou faire comme moi une interface dynamique entre une Form et une page Web. Sun, 21 Feb 2010 13:47:01 -0500