<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de la rubrique Delphi &#187; Delphi .NET</title>
	<atom:link href="https://blog.developpez.com/delphi/pcategory/delphi-net/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/delphi</link>
	<description></description>
	<lastBuildDate>Sun, 19 Jun 2011 15:16:06 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Utilisation de Delphi prism</title>
		<link>https://blog.developpez.com/delphi/p7604/articles-cours/utilisation_de_delphi_prism</link>
		<comments>https://blog.developpez.com/delphi/p7604/articles-cours/utilisation_de_delphi_prism#comments</comments>
		<pubDate>Wed, 20 May 2009 08:36:18 +0000</pubDate>
		<dc:creator><![CDATA[La rédaction Delphi]]></dc:creator>
				<category><![CDATA[Articles & cours]]></category>
		<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Cet article présente les Applications Windows Forms et Asp.Net avec Delphi PRISM, un environnement Delphi qui utilise l&#8217;environnement Visual Studio 2008. Lisez la suite du tutoriel de John Colibri ici: http://jcolibri.developpez.com/articles/delphi-prism/]]></description>
				<content:encoded><![CDATA[<blockquote><p>Cet article présente les Applications <strong>Windows Forms</strong> et <strong>Asp.Net</strong> avec <strong>Delphi PRISM</strong>, un environnement Delphi qui utilise l&rsquo;environnement Visual Studio 2008.</p></blockquote>
<p>Lisez la suite du tutoriel de John Colibri ici:<br />
<a href="http://jcolibri.developpez.com/articles/delphi-prism/">http://jcolibri.developpez.com/articles/delphi-prism/</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Borland se sépare de son activité IDE</title>
		<link>https://blog.developpez.com/delphi/p1623/news/borland_se_separe_de_son_activite_ide</link>
		<comments>https://blog.developpez.com/delphi/p1623/news/borland_se_separe_de_son_activite_ide#comments</comments>
		<pubDate>Fri, 10 Feb 2006 18:22:54 +0000</pubDate>
		<dc:creator><![CDATA[Nono40]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans son message sur BDN, Tod Nielsen annonce que Borland va recentrer son activité sur les produits ALM (Application Life Management). Ils renforcent cette position par l&#8217;acquisition de Segue Software. Dans le même temps Tod Nielsen annonce que Borland souhaite se séparer des outils de développement (Delphi, C++ Builder, C# Builder et JBuilder). La raison principale est que l&#8217;organisation nécessaire au développement des ces outils ainsi que le marché sont différents. David Intersimone répond à [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans son <a href="http://www.borland.com/us/company/news/Tod_Nielsen_customer_shareholder_letter_02-08-06.html">message sur BDN</a>, Tod Nielsen annonce que Borland va recentrer son activité sur les produits ALM (Application Life Management). Ils renforcent cette position par l&rsquo;acquisition de Segue Software. </p>
<p>Dans le même temps Tod Nielsen annonce que Borland souhaite se séparer des outils de développement (Delphi, C++ Builder, C# Builder et JBuilder). La raison principale est que l&rsquo;organisation nécessaire au développement des ces outils ainsi que le marché sont différents. </p>
<p>David Intersimone <a href="http://bdn.borland.com/article/0,1410,33439,00.html">répond à cette annonce</a> en indiquant que le développement des futures versions des IDE continue. Lui même resterait dans cette équipe et continuerait le suivi du développement des outils dans la nouvelle société. Il confirme que Borland avait prioritairement investi dans les outils ALM et que cette séparation pourrait être une chance pour les IDE d&rsquo;être au centre de l&rsquo;activité de la nouvelle société. </p>
<p>Le reprenneur de l&rsquo;activité IDE n&rsquo;est pas encore connu, le changement doit se faire dans le premier semestre de cette année. </p>
<p>Si vous souhaitez réagir ou simplement vous exprimer sur cette annonce vous pouvez <a href="http://www.developpez.net/forums/viewtopic.php?t=453948">le faire ici</a>. </p>
<p><a href="http://www.borland.com/us/company/news/Tod_Nielsen_customer_shareholder_letter_02-08-06.html">To Our Customers and Shareholders</a> ( Tod Neilsen )<br />
<a href="http://bdn.borland.com/article/0,1410,33439,00.html">Borland plans separate company for its developer products</a> ( David Intersimone ) </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Inscription à la journée de présentation de Delphi 2006 en Belgique</title>
		<link>https://blog.developpez.com/delphi/p1333/news/inscription_a_la_journee_de_presentation</link>
		<comments>https://blog.developpez.com/delphi/p1333/news/inscription_a_la_journee_de_presentation#comments</comments>
		<pubDate>Wed, 16 Nov 2005 13:05:30 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>
		<category><![CDATA[Divers]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Borland organise une journée de présentation de Delphi 2006 le 1er Décembre 2005 à Bruxelle en Belgique. Voici l&#8217;adresse du site d&#8217;inscription : http://info.borland.de/edm/EMEA/Invitation_Delphi_2006_Belgium_Web.html Nous vous communiquerons par la suite les autres dates pour la France et la Suisse.]]></description>
				<content:encoded><![CDATA[<p>Borland organise une journée de présentation de Delphi 2006 le 1er Décembre 2005 à Bruxelle en Belgique. </p>
<p>Voici l&rsquo;adresse du site d&rsquo;inscription :</p>
<p>http://info.borland.de/edm/EMEA/Invitation_Delphi_2006_Belgium_Web.html</p>
<p>Nous vous communiquerons par la suite les autres dates pour la France et la Suisse.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Borland annonce la sortie de Delphi 2006.</title>
		<link>https://blog.developpez.com/delphi/p1199/news/borland_annonce_la_sortie_de_delphi_2006</link>
		<comments>https://blog.developpez.com/delphi/p1199/news/borland_annonce_la_sortie_de_delphi_2006#comments</comments>
		<pubDate>Tue, 11 Oct 2005 23:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Nono40]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La nouvelle version de Borland Developer Studio est enfin annoncée ! Delphi 2006 fait partie intégrante de Borland Developer Studio regroupant Delphi Win32, Delphi .NET, C# mais aussi C++ Builder. Une partie de ECO III sera accessible dés la version Professionnel alors qu&#8217;il fallait avant acquérir la version Entreprise minimum. Cette évolution améliore encore les facilités d&#8217;utilisation du framwork ECO III plur un développement plus rapide. Les nouveautés princiapales de Delphi 2006 sont : · [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La nouvelle version de Borland Developer Studio est enfin annoncée !</p>
<p>Delphi 2006 fait partie intégrante de <strong>Borland Developer Studio</strong> regroupant Delphi Win32, Delphi .NET, C# mais aussi C++ Builder.</p>
<p><span id="more-12"></span><br />
Une partie de ECO III sera accessible dés la version Professionnel alors qu&rsquo;il fallait avant acquérir la version Entreprise minimum. Cette évolution améliore encore les facilités d&rsquo;utilisation du framwork ECO III plur un développement plus rapide.</p>
<p>Les nouveautés princiapales de Delphi 2006 sont :<br />
· <strong>Nouvelles fonctions de productivité IDE</strong> – Le système de « modèles réels » permet aux utilisateurs de parcourir les champs et d’insérer des points de n’importe quel modèle et au nouvel éditeur « Barre de changement » indiquant les lignes modifiées et celles de la session sauvegardée.<br />
· <strong>Bibliothèque étendue de composants</strong> (VCL &#8211; Visual Component Library) – La nouvelle bibliothèque VCL de Delphi 2006 est équipée d’une interface graphique de développement et d’une large gamme de composants d’interface utilisateur. Les nouveaux principes de « conception en direct » permettent de faire glisser les lignes, marges et éléments de garnissage, de gérer les alignements avec le texte et intègrent de nouveaux panneaux de contrôle Flux et Grille (avec modèles de formulaires HTML et tableaux).<br />
· <strong>Intégration étendue aux outils de gestion du cycle de vie</strong> (ALM) – Delphi 2006 permet de prendre le contrôle de l’intégralité du cycle de développement grâce à une parfaite intégration aux outils Borland comme StarTeam (gestion du changement et des configurations), Together (modélisation) et CaliberRM (gestion des besoins) ; l’IDE Delphi bénéficie désormais d’une intégration native intégrale avec StarTeam et Caliber.</p>
<p>Delphi 2006 sera disponible en trois version : Professionnel, Entreprise et Architecte. Pour connaitre les différents éléments livrés en fonctions des versions il faut se <a href="http://www.borland.com/us/products/delphi/">rendre ici.</a></p>
<p>Notez qu&rsquo;il sera possible de commander Delphi 2006 dés le 17 octobre, avec une remise de 15% pour toute commande passée avant le premier décembre. Delphi sera livré dés le début de décembre.</p>
<p>L&rsquo;annonce de Borland US pour Delphi 2006 est <a href="http://www.borland.com/us/company/news/press_releases/2005/10_10_05_borland_delphi_and_cpp_builder_2006_deliver_key_new_features.html">disponible ici</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>.NET sous Oracle</title>
		<link>https://blog.developpez.com/delphi/p1087/articles-cours/title_14</link>
		<comments>https://blog.developpez.com/delphi/p1087/articles-cours/title_14#comments</comments>
		<pubDate>Tue, 06 Sep 2005 14:37:36 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Articles & cours]]></category>
		<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Oracle a récemment annoncé la release de la version 10g R2 intégrant un runtime .NET. Il est désormais possible d&#8217;utiliser le C# pour développer des procédures stockées en plus du PL/SQL et de JAVA. Oracle propose un tutoriel sur la création d&#8217;une application NET utilisant Oracle Developer Tools (ODT) pour Visual Studio .NET. Ainsi qu&#8217;une vidéo (+ de 50 mn) sur les nouveautés d&#8217;ODT et ODP.NET(Requière Windows Media Player 9 or supérieure). Je suis en [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Oracle a récemment annoncé la release de <a href="http://www.oracle.com/database/product_editions.html">la version 10g R2</a> intégrant un runtime .NET.<br />
Il est désormais possible d&rsquo;utiliser le C# pour développer des procédures stockées en plus du PL/SQL et de JAVA.</p>
<p>Oracle propose un tutoriel sur la création d&rsquo;une application NET utilisant <a href="http://www.oracle.com/technology/obe/obe10gdb/develop/vs/vs.htm">Oracle Developer Tools</a> (ODT) pour Visual Studio .NET.<br />
Ainsi qu&rsquo;une vidéo (+ de 50 mn) sur <a href="http://download.oracle.com/otndocs/presentations/MSDN080805.wmv">les nouveautés</a> d&rsquo;ODT et ODP.NET(Requière Windows Media Player 9 or supérieure).</p>
<p>Je suis en train d&rsquo;étudier les classes ODP sous Delphi, elles sont aisées à manipuler mais parfois le comportement de base n&rsquo;est pas assez documenté.<br />
Par exemple la création d&rsquo;une procédure stockée via un <strong>TMemo</strong> n&rsquo;est pas possible car ce composant gére les fin de lignes par un retour chariot suivi d&rsquo;un line feed.<br />
J&rsquo;ai passé un petit bout de temps à comprendre, merci le mode trace du client Oracle :-), qu&rsquo;il fallait utiliser un <strong>StringBuilder</strong> !</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">procedure TForm1.CreateProcedureStockee; <br />
&nbsp;// Crée la procédure stocké sur le serveur <br />
&nbsp;(* <br />
Create or replace Procedure GetNameOfPresident( <br />
&nbsp;Parametre_IN IN SCOTT.EMP.JOB%TYPE, <br />
&nbsp;NomPresident_OUT OUT VARCHAR2) IS <br />
&nbsp;<br />
begin <br />
&nbsp;Select ENAME INTO NomPresident_OUT from scott.emp where job=Parametre_IN; <br />
&nbsp;NomPresident_OUT:=Parametre_IN||' = '||NomPresident_OUT; <br />
end; <br />
&nbsp;<br />
&nbsp;*) <br />
var TextePrcStck : StringBuilder; <br />
&nbsp;<br />
begin <br />
&nbsp;try <br />
&nbsp; &nbsp; // Crée une procédure stockée <br />
&nbsp; &nbsp;TextePrcStck:=StringBuilder.create; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp;// L'ajout de CR+LF en fin de chaîne n'est pas compatible (avec le parseur SQL sur le serveur Oracle ?), LF suffit. <br />
&nbsp; &nbsp; TextePrcStck.Append('Create or replace Procedure GetNameOfPresident('+LF); <br />
&nbsp; &nbsp; &nbsp;// La requête renvoie une seule ligne, Parametre_IN ne gére que 'PRESIDENT' <br />
&nbsp; &nbsp; TextePrcStck.Append(' Parametre_IN IN SCOTT.EMP.JOB%TYPE,'+LF); <br />
&nbsp; &nbsp; &nbsp;// La taille de la valeur de retour doit être supérieure à la taille du champ &nbsp;SCOTT.EMP.ENAME%TYPE <br />
&nbsp; &nbsp; TextePrcStck.Append(' NomPresident_OUT OUT VARCHAR2) IS '+LF); <br />
&nbsp;<br />
&nbsp; &nbsp; TextePrcStck.Append('begin'+LF); <br />
&nbsp; &nbsp; TextePrcStck.Append(' Select ENAME INTO NomPresident_OUT from scott.emp where job=Parametre_IN;'+LF); <br />
&nbsp; &nbsp; TextePrcStck.Append(' NomPresident_OUT:=Parametre_IN||'' = ''||NomPresident_OUT;'+LF); <br />
&nbsp; &nbsp; TextePrcStck.Append('end;'+LF); <br />
&nbsp; &nbsp;Commande.CommandText:= TextePrcStck.ToString; <br />
&nbsp; &nbsp;Commande.ExecuteNonQuery; <br />
&nbsp;<br />
&nbsp;except <br />
&nbsp; &nbsp;on E:OracleException do <br />
&nbsp; &nbsp; ShowOracleException(E.Errors); <br />
&nbsp;end; <br />
end;</div></div>
<p>Les exceptions d&rsquo;ODP proposent de nombreuses informations utiles :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Procedure TForm1.ShowOracleException(Errors : OracleErrorCollection); <br />
var ErrorMessage : String; <br />
&nbsp; &nbsp; Error &nbsp; &nbsp; &nbsp; &nbsp;: OracleError; <br />
begin <br />
&nbsp;For Error in Errors do <br />
&nbsp; begin <br />
&nbsp; &nbsp;errorMessage:=''; <br />
&nbsp; &nbsp;errorMessage:= Concat( errorMessage,'Source &nbsp;: '+error.Source+System.Environment.NewLine); <br />
&nbsp; &nbsp;errorMessage:= Concat( errorMessage,'Message : '+error.Message+System.Environment.NewLine); <br />
&nbsp; &nbsp;errorMessage:= Concat( errorMessage,'Number : '+error.Number.ToString+System.Environment.NewLine); <br />
&nbsp; &nbsp;errorMessage:= Concat( errorMessage,'DataSource : '+error.DataSource+System.Environment.NewLine); <br />
&nbsp; &nbsp;errorMessage:= Concat( errorMessage,'Procedure : '+error.&amp;Procedure+System.Environment.NewLine); <br />
&nbsp; &nbsp;MessageBox(0,errorMessage, 'Erreur',MB_OK ); <br />
&nbsp; end; <br />
end;</div></div>
<p>En revanche pour certains type d&rsquo;appel sur le serveur le passage de paramètres n&rsquo;est pas documenté j&rsquo;aborderais ceci dans un prochain tutoriel &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Preview d&#8217;un compilateur pour le Compact Framework .NET sous Delphi 2005</title>
		<link>https://blog.developpez.com/delphi/p985/articles-cours/preview_d_un_compilateur_pour_le_compact_2005</link>
		<comments>https://blog.developpez.com/delphi/p985/articles-cours/preview_d_un_compilateur_pour_le_compact_2005#comments</comments>
		<pubDate>Fri, 22 Jul 2005 19:04:16 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Articles & cours]]></category>
		<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour les utilisateurs enregistrés de Delphi 2005, Borland propose en téléchargement gratuit une preview d&#8217;un compilateur en ligne de commande pour le Compact Framework .NET, disponible ici Delphi 2005 for .NET Compact Framework Technology Preview L&#8217;article suivant Delphi for .NET Compact Framework Preview Quickstart Guide vous indiquera la marche à suivre pour son installation et son utilisation. Pour vos premiers tests vous pouvez vous appuyer sur l&#8217;émulateur de périphérique Windows CE. Cette pré-version contient notamment [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour les utilisateurs enregistrés de Delphi 2005, Borland propose en téléchargement gratuit une preview d&rsquo;un compilateur en ligne de commande pour le Compact Framework .NET, disponible ici<br />
<a href="http://www.borland.com/downloads/registered/download_delphi.html">Delphi 2005 for .NET Compact Framework Technology Preview</a></p>
<p>L&rsquo;article suivant <a href="http://bdn.borland.com/article/0,1410,33066,00.html">Delphi for .NET Compact Framework Preview Quickstart Guide</a> vous indiquera la marche à suivre pour son installation et son utilisation.</p>
<p>Pour vos premiers tests vous pouvez vous appuyer sur <a href="http://www.microsoft.com/downloads/details.aspx?familyid=A120E012-CA31-4BE9-A3BF-B9BF4F64CE72&amp;displaylang=en">l&rsquo;émulateur de périphérique Windows CE</a>.</p>
<p>Cette pré-version contient notamment les sources de l&rsquo;unité <em>Borland.Delphi.System.pas</em>, on peut y voir que l&rsquo;utilisation de directive de compilation conditionnelle de type <strong>{$IFDEF CF}</strong> permet de gérer trés facilement les différences entre les différentes plate-formes.</p>
<p>On peut aussi y constater l&rsquo;utilisation d&rsquo;un assistant de classe (class helper) sur la classe <strong>System.Array</strong> de la FCL, comme quoi leur utilisation n&rsquo;est pas uniquement limitée au portage des classes de la VCL comme le laisse supposer la documentation.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Livre en ligne sur les aspects sécurité de .NET (en anglais)</title>
		<link>https://blog.developpez.com/delphi/p986/delphi-net/livre_en_ligne_sur_les_aspects_securite_</link>
		<comments>https://blog.developpez.com/delphi/p986/delphi-net/livre_en_ligne_sur_les_aspects_securite_#comments</comments>
		<pubDate>Fri, 22 Jul 2005 19:15:23 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour ceux et celles qui souhaitent aborder les aspects sécurité de .NET voici un ouvrage complet en anglais consultable en ligne uniquement : The .NET Developer&#8217;s Guide to Windows Security par Keith Brown. Les Chapitres : The Big Picture Security Context Access Control COM(+) Network Security Misc Bonne lecture !]]></description>
				<content:encoded><![CDATA[<p>Pour ceux et celles qui souhaitent aborder les aspects sécurité de .NET voici un ouvrage complet en anglais consultable en ligne uniquement :<br />
<a href="http://pluralsight.com/wiki/default.aspx/Keith.GuideBook/HomePage.html">The .NET Developer&rsquo;s Guide to Windows Security</a> par <a href="http://pluralsight.com/wiki/default.aspx/Pluralsight/KeithBrown.html">Keith Brown</a>.</p>
<p>Les Chapitres :</p>
<blockquote><p>The Big Picture<br />
Security Context<br />
Access Control<br />
COM(+)<br />
Network Security<br />
Misc</p></blockquote>
<p>Bonne lecture !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Transparent Application Failover sous ODP</title>
		<link>https://blog.developpez.com/delphi/p952/delphi-net/transparent_application_failover_sous_od</link>
		<comments>https://blog.developpez.com/delphi/p952/delphi-net/transparent_application_failover_sous_od#comments</comments>
		<pubDate>Sun, 03 Jul 2005 19:16:17 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Sous Oracle il est possible de mettre en place, coté client, un dispositif de reprise sur incident nommé Transparent Application Failover, acronyme TAF. Cette technique est liée à la mise en place d&#8217;une redondance de base principalement par la mise en place de cluster (RAC) ou d&#8217;une base en StandBy. Lors de mes tests avec le programme &#8230;\ODP.NET\samples\TAF\src\TAF.cs proposé dans la distribution d&#8217;ODP, je rencontrais l&#8217;erreur TNS-12152 sur le poste client lorsque j&#8217;essayais de déclenchement [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Sous Oracle il est possible de mettre en place, coté client, un dispositif de reprise sur incident nommé <em>Transparent Application Failover</em>, acronyme <strong>TAF</strong>.</p>
<p>Cette technique est liée à la mise en place d&rsquo;une redondance de base principalement par la mise en place de cluster (RAC) ou d&rsquo;une base en StandBy.</p>
<p>Lors de mes tests avec le programme <em>&#8230;\ODP.NET\samples\TAF\src\TAF.cs</em> proposé dans la distribution d&rsquo;ODP, je rencontrais l&rsquo;erreur TNS-12152 sur le poste client lorsque j&rsquo;essayais de déclenchement un événement en arrêtant la base.</p>
<p>Evénement devant être pris en charge par le code suivant (classe <em>OracleConnection.Failover</em>) :</p>
<blockquote><p>
* This method is FailOver Callback method called when the<br />
		 * connection to the database is severed. It is called several<br />
		 * times in the process of re-establishing connection to the<br />
		 * same or standby database.<br />
		 **********************************************************************/<br />
		public FailoverReturnCode OnFailover(object sender, OracleFailoverEventArgs eventArgs)<br />
		{<br />
		// check the Failover event that occurred and display appropriate message<br />
		switch(eventArgs.FailoverEvent)<br />
		{<br />
            // when failover begins<br />
			case FailoverEvent.Begin:<br />
			{<br />
				MessageBox.Show(&laquo;&nbsp;Callback method called :Failover Begin&nbsp;&raquo;);<br />
				lblStatus.Text=&nbsp;&raquo;Callback method called :Failover Begin. Trying to reconnect, Please wait&#8230;&nbsp;&raquo;;</p>
<p>			    break;<br />
			}</p></blockquote>
<p>Voici un début de solution pour une machine hébergeant une instance. Dans un contexte de test, le serveur et client étant sur la même machine, cela semble suffisant.</p>
<p>Modifier le fichier <strong>TnsName.ora</strong> ainsi : </p>
<blockquote><p>TEST =<br />
  (DESCRIPTION =<br />
    (ADDRESS_LIST =<br />
     (ADDRESS = (PROTOCOL = TCP)(HOST = amd2800)(PORT = 1521))<br />
     (ADDRESS = (PROTOCOL = TCP)(HOST = amd2800)(PORT = 1521))<br />
     <strong>(failover = yes)<br />
     (load_balance = yes) </strong><br />
    )<br />
    (CONNECT_DATA =<br />
      (SERVER = DEDICATED)<br />
      (SERVICE_NAME = TEST.LTA)<br />
      <strong>(FAILOVER_MODE =<br />
       (TYPE = SELECT)<br />
       (METHOD = BASIC)<br />
       (RETRIES=100)<br />
       (DELAY=1)<br />
      ) </strong><br />
    )<br />
  ) </p></blockquote>
<p>Le fichier TnsName.ora doit contenir l&rsquo;adresse du serveur de secours, ici il s&rsquo;agit du même serveur. </p>
<p>Donc le message suivant :</p>
<blockquote><p>TNS-12152 TNS:unable to send break message </p></blockquote>
<p>indique une tentative d&rsquo;émission d&rsquo;un message de reprise vers le second serveur (StandBy) ou noeud dans un environnement RAC. La modification du fichier TnsName.ora est suffisante dans ce cas pour déclencher l&rsquo;événement sur le client ODP.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les sources du Common Language Infrastructure de .NET 1.1</title>
		<link>https://blog.developpez.com/delphi/p949/delphi-net/les_sources_du_common_language_infrastru_1</link>
		<comments>https://blog.developpez.com/delphi/p949/delphi-net/les_sources_du_common_language_infrastru_1#comments</comments>
		<pubDate>Fri, 01 Jul 2005 13:50:35 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pour ceux et celles qui souhaiteraient approfondir le SDK .NET Microsoft met à disposition le fichier Shared Source Common Language Infrastructure 1.0 Release qui contient le code source de l&#8217;implémentation du runtime pour le CLI. Le fichier date de mai 2002 mais son contenu reste très intéressant. L&#8217;ensemble décompressé occupe 116 Mg sur le disque dont une dizaine concernant les fichiers sources : ..\sscli_20021101\sscli\clr\src\bcl\system\reflection ..\sscli_20021101\sscli\clr\src\bcl\system\resources ..\sscli_20021101\sscli\clr\src\bcl\system\runtime ..\sscli_20021101\sscli\clr\src\bcl\system\security ..\sscli_20021101\sscli\clr\src\bcl\system\text ..\sscli_20021101\sscli\clr\src\bcl\system\threading ..\sscli_20021101\sscli\clr\src\bcl\system\activator.cs ..\sscli_20021101\sscli\clr\src\bcl\system\appdomain.cs ..\sscli_20021101\sscli\clr\src\bcl\system\applicationexception.cs ..\sscli_20021101\sscli\clr\src\bcl\system\argiterator.cs ..\sscli_20021101\sscli\clr\src\bcl\system\argumentexception.cs ..\sscli_20021101\sscli\clr\src\bcl\system\array.cs [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour ceux et celles qui souhaiteraient approfondir le SDK .NET Microsoft met à disposition le fichier <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3a1c93fa-7462-47d0-8e56-8dd34c6292f0">Shared Source Common Language Infrastructure 1.0 Release</a> qui contient le code source de l&rsquo;implémentation du runtime pour le CLI. Le fichier date de <em>mai 2002</em> mais son contenu reste très intéressant.</p>
<p>L&rsquo;ensemble décompressé occupe 116 Mg sur le disque dont une dizaine concernant les fichiers sources :</p>
<blockquote><p>
..\sscli_20021101\sscli\clr\src\bcl\system\reflection<br />
..\sscli_20021101\sscli\clr\src\bcl\system\resources<br />
..\sscli_20021101\sscli\clr\src\bcl\system\runtime<br />
..\sscli_20021101\sscli\clr\src\bcl\system\security<br />
..\sscli_20021101\sscli\clr\src\bcl\system\text<br />
..\sscli_20021101\sscli\clr\src\bcl\system\threading<br />
..\sscli_20021101\sscli\clr\src\bcl\system\activator.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\appdomain.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\applicationexception.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\argiterator.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\argumentexception.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\array.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\asynccallback.cs<br />
..\sscli_20021101\sscli\clr\src\bcl\system\attribute.cs<br />
&#8230;
</p></blockquote>
<p>Vous y trouverez également qq sources sur les outils tels que IL-Dasm, peverify,&#8230;</p>
<p>Bonne lecture.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les énumérations sous Delphi .NET</title>
		<link>https://blog.developpez.com/delphi/p866/delphi-net/title_13</link>
		<comments>https://blog.developpez.com/delphi/p866/delphi-net/title_13#comments</comments>
		<pubDate>Fri, 03 Jun 2005 16:00:25 +0000</pubDate>
		<dc:creator><![CDATA[Laurent Dardenne]]></dc:creator>
				<category><![CDATA[Delphi .NET]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai ces derniers temps traduit quelques entrées de la FAQ C# vers la FAQ Delphi .NET et je me suis aperçus que les énumérations sous .NET qui me semblaient être un type de donnée différent, se manipule de la même manière qu&#8217;une énumération déclarée sous Delphi. Donc rien de transcendant en soit, il faut juste le savoir. Type &#160; Couleurs = (Bleu,Blanc,Noir,Rouge,Vert); &#160; &#160; Conteneur= (Carton= 52, Valise= 137); &#160; &#160; &#160; [FlagsAttribute] &#160; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai ces derniers temps traduit quelques entrées de la FAQ C# vers la FAQ Delphi .NET et je me suis aperçus que les énumérations sous .NET qui me semblaient être un type de donnée différent, se manipule de la même manière qu&rsquo;une énumération déclarée sous Delphi. Donc rien de transcendant en soit, il faut juste le savoir.</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Type <br />
&nbsp; Couleurs = (Bleu,Blanc,Noir,Rouge,Vert); <br />
&nbsp;<br />
&nbsp; Conteneur= (Carton= 52, Valise= 137); &nbsp;<br />
&nbsp;<br />
&nbsp; [FlagsAttribute] &nbsp; <br />
&nbsp; DroitsFichier = (Aucun= 1, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Lecture = 2, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ecriture= 4, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Effacement= 8, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All=15); <br />
&nbsp;<br />
&nbsp;//Alias, facilite l'écriture <br />
&nbsp;TEnvFolder = Environment.SpecialFolder;</div></div>
</blockquote>
<p>Le type <em>couleur</em> est une énumération mappée sur <strong>System.Enum</strong> de type <em>Byte</em>.</p>
<p><em>Conteneur</em> est aussi une énumération de type <em>Byte</em>, ici la modification de la valeur de 137 en 257 modifiera le type sous jacent en <strong>Integer</strong>. Il ne semble pas possible comme en C# de préciser le type de base de l&rsquo;énumération en dehors de cette construction.</p>
<p><em>DroitsFichier</em> est une énumération particuliére, l&rsquo;ajout de l&rsquo;attibut <strong><em>[FlagsAttribute]</em></strong> indique que cette énumération est traitée comme un champ de bits, c&rsquo;est-à-dire un ensemble d&rsquo;indicateurs. L&rsquo;affectation se fait avec l&rsquo;opérateur <strong>or</strong> :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;Resultat := Lecture or Ecriture; <br />
&nbsp;Writeln(TObject(Resultat)); <br />
&nbsp;Writeln(Format('Resultat=%s',TObject(Resultat)));</div></div>
</blockquote>
<p>Il est possible d&rsquo;affecter une valeur en utilisant une chaîne de caractères, contenant des noms identiques au nom de valeur déclarée de l&rsquo;énumération :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;NouveauDroit:='Ecriture,Effacement'; <br />
&nbsp;Resultat:=DroitFichier(System.Enum.Parse(TypeOf(DroitFichier),NouveauDroit)); <br />
&nbsp;Writeln(TObject(Resultat));</div></div>
</blockquote>
<p>Les énumérations de FCL peuvent donc être manipulée directement :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;//Environment.SpecialFolder <br />
&nbsp;//Obtenir une chaîne à partir d'une valeur de type énumération <br />
&nbsp;Folder:=TEnvFolder.ApplicationData; <br />
&nbsp;Writeln(TObject(Folder)); <br />
&nbsp;<br />
&nbsp;Write('Accés direct ='); <br />
&nbsp;Writeln(TObject(TEnvFolder.ApplicationData)); <br />
&nbsp;<br />
&nbsp;Writeln(Ord(TEnvFolder.ApplicationData)); <br />
&nbsp;<br />
&nbsp;Writeln(TObject(Succ(TEnvFolder.ApplicationData))); <br />
&nbsp;Folder:=Succ(Succ(TEnvFolder.ApplicationData)); <br />
&nbsp;Writeln(TObject(Folder)); <br />
&nbsp;<br />
&nbsp;Folder:=Pred(Folder); <br />
&nbsp;Writeln(TObject(Folder)); <br />
&nbsp;<br />
&nbsp;Writeln(TObject(Low(TEnvFolder.ApplicationData))); <br />
&nbsp;Writeln(TObject(High(TEnvFolder.ApplicationData)));</div></div>
</blockquote>
<p>Les itérateurs sont possibles sur les énumérations :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;// Affiche les valeurs possibles de l'énumération <br />
&nbsp;for Chaine in Enum.GetNames(typeof(Environment.SpecialFolder)) do <br />
&nbsp; begin <br />
&nbsp; &nbsp;Write(Chaine+','); <br />
&nbsp; end;</div></div>
</blockquote>
<p>Il est égalemment possible, au travers de la classe <strong>EnumBuilder</strong>, de construire dynamiquement une énumération à l&rsquo;intérieur d&rsquo;un assembly dynamique.<br />
Exemple :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;EnumCreate(Thread.GetDomain, AssemblyBuilderAccess.Run);</div></div>
</blockquote>
<p>avec </p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">procedure EnumCreate(myAppDomain : AppDomain ; access : AssemblyBuilderAccess ); <br />
var myAssemblyName &nbsp;: AssemblyName; <br />
&nbsp; &nbsp; myFieldBuilder1, <br />
&nbsp; &nbsp; myFieldBuilder2 : FieldBuilder; <br />
&nbsp; &nbsp; valeur1, <br />
&nbsp; &nbsp; valeur2 : Integer; <br />
&nbsp;<br />
begin <br />
&nbsp; // Affecte un nom pour l'assembly. <br />
&nbsp; myAssemblyName:=AssemblyName.Create; <br />
&nbsp; myAssemblyName.Name:='EmittedAssembly'; <br />
&nbsp;<br />
&nbsp; // Crée l'assembly dynamique. <br />
&nbsp; myAssemblyBuilder:=myAppDomain.DefineDynamicAssembly(myAssemblyName,access); <br />
&nbsp;<br />
&nbsp; // Crée dynamiquement un module non-persistant (Run) <br />
&nbsp; // Définit et représente un module. Pour obtenir une instance de ModuleBuilder, appelez DefineDynamicModule. <br />
&nbsp; myModuleBuilder:= myAssemblyBuilder.DefineDynamicModule('EmittedModule','EmittedModule.mod'); <br />
&nbsp;<br />
&nbsp; // Définit un type d'énumération qui est un type valeur avec un champ non statique unique appelé value__ du type spécifié. <br />
&nbsp; myEnumBuilder:= myModuleBuilder.DefineEnum('MyNamespace.MyEnum',TypeAttributes.Public, typeof(Integer)); <br />
&nbsp;<br />
&nbsp; valeur1:=1; <br />
&nbsp; valeur2:=2; <br />
&nbsp;<br />
&nbsp; // Exception ArgumentException <br />
&nbsp; //&quot; La constante ne correspond pas au type défini.&quot; <br />
&nbsp; &nbsp;// myFieldBuilder1:= myEnumBuilder.DefineLiteral('ChampUn', TObject(1)); <br />
&nbsp; &nbsp;// myFieldBuilder2:= myEnumBuilder.DefineLiteral('ChampsDeux', TObject(2)); <br />
&nbsp;<br />
&nbsp; myFieldBuilder1:= myEnumBuilder.DefineLiteral('ChampUn', TObject(Integer(1))); <br />
&nbsp; myFieldBuilder2:= myEnumBuilder.DefineLiteral('ChampsDeux', TObject(Integer(2))); <br />
&nbsp;<br />
&nbsp; { ou bien : <br />
&nbsp; myFieldBuilder1:= myEnumBuilder.DefineLiteral('ChampUn', TObject(valeur1)); <br />
&nbsp; myFieldBuilder2:= myEnumBuilder.DefineLiteral('ChampsDeux', TObject(valeur2)); <br />
&nbsp; } <br />
&nbsp; myEnumBuilder.CreateType; <br />
end;</div></div>
</blockquote>
<p>On peut donc sous .NET construire à la volée du code persistant ou non. Pratique !<br />
La suite dans un prochain article &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
