<?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>El blog de programación con Delphi y .NET</title>
	<atom:link href="http://www.intelsoftassociates.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.intelsoftassociates.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 20 Jul 2010 20:53:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Salida de Nick Hodges de Embarcadero</title>
		<link>http://www.intelsoftassociates.com/blog/?p=55</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=55#comments</comments>
		<pubDate>Tue, 20 Jul 2010 20:53:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Nick Hodges]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=55</guid>
		<description><![CDATA[Pues con mucho asombro leí la noticia de que Nick Hodges quien se desempeñaba como  Delphi Product Manager fue despedido de Embarcadero. Ya se especulaba mucho sobre su salida pero al final fue confirmada por el propio Nick. Lo conocí personalmente en un evento en la ciudad de México y me pareció un buen tipo, [...]]]></description>
			<content:encoded><![CDATA[<p>Pues con mucho asombro leí la noticia de que Nick Hodges quien se desempeñaba como  Delphi Product Manager fue despedido de Embarcadero. Ya se especulaba mucho sobre su salida pero al final fue confirmada por el propio Nick. Lo conocí personalmente en un evento en la ciudad de México y me pareció un buen tipo, además de que es un fan en serio de Delphi, no sé a qué se debió su salida (pero realmente me gustaría saberlo)  leí en los foros que mucha gente de Embarcadero dice que Delphi es el trabajo de un equipo completo y no de solo una persona, que la salida de Nick no afecta a nada a Delphi ¿Realmente esto será así? Creo que Nick venía desempeñando un excelente trabajo al frente de Delphi, me tiene intrigado quien será la persona que lo supla, espero que le de continuidad al trabajo de Nick y que esta cambio sea por el bien de nuestro amado Delphi.  ¿Ustedes que opinan?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=55</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Terminado curso avanzado de bases de datos con Delphi Prism!!</title>
		<link>http://www.intelsoftassociates.com/blog/?p=51</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=51#comments</comments>
		<pubDate>Wed, 23 Jun 2010 17:19:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Curso Delphi Prism]]></category>
		<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=51</guid>
		<description><![CDATA[Pues después de un largo tiempo de trabajo por fin está terminado el curso avanzado de bases de datos con Delphi Prism.  El objetivo del curso es poner en práctica los conocimientos teóricos adquiridos en los cursos básicos de Delphi Prism. En este curso se desarrolla una pequeña aplicación de facturación la cuál contiene todos [...]]]></description>
			<content:encoded><![CDATA[<p>Pues después de un largo tiempo de trabajo por fin está terminado el curso avanzado de bases de datos con Delphi Prism.  El objetivo del curso es poner en práctica los conocimientos teóricos adquiridos en los cursos básicos de Delphi Prism. En este curso se desarrolla una pequeña aplicación de facturación la cuál contiene todos los elementos necesarios para desarrollar una aplicación en el mundo real.  Como ya es costumbre el curso utiliza Firebird como manejador de base de datos y está basado en el curso de C# de Ian Marteens, se hicieron las correspondientes adaptaciones y mejoras para aprovechar todas las características tanto de Firebird como de Delphi Prism además de agregar cosas que son especificas para Delphi Prism.</p>
<p>Aquí muestro el temario de este curso, si necesita mayor información por favor pónganse en contacto conmigo.</p>
<p><strong>Módulo 0 DISEÑO DE LA BASE DE DATOS </strong><br />
INSTALACIÓN DE LA DLL<br />
FUNCIONES DE USUARIOS: NORMALIZACIÒN<br />
ELEMENTOS COMUNES: CLAVES PRIMARIAS<br />
COLUMNAS COMUNES<br />
REGLAS SIMPLES BASADAS EN EL PAÍS<br />
CLIENTES, DIRECCIONES Y ATRIBUTOS<br />
EL MODELO DE PRODUCTOS<br />
FACTURAS<br />
REGLAS DE NEGOCIO Y PRECIOS DE VENTA</p>
<p><strong>Módulo 1 GESTIÓN DE VENTANAS </strong><br />
MDI, SDI O MODELO DE PESTAÑAS<br />
GESTORES DE VENTANAS<br />
GESTORES DE MENÚS<br />
REFLEXION<br />
MANIOBRAS  DENTRO DE UN MENÚ<br />
EL GESTOR EN MARCHA</p>
<p><strong>Módulo 2 VENTANAS NO MODALES </strong><br />
EL GESTOR DE VENTANAS<br />
APLICACIONES MDI<br />
INTEGRACIÓN CON EL GESTOR DEL MENÚ</p>
<p><strong>Módulo 3 MÓDULOS DE DATOS </strong><br />
LA ORGANIZACIÓN DEL PROYECTO<br />
INTERFACES GENÉRICAS DE ACCESO A DATOS<br />
COMPONENTES E INSTANCIAS GLOBALES</p>
<p><strong>Módulo 4 VENTANAS DE NAVEGACIÓN </strong><br />
¿QUÉ ES UNA “VENTANA”?<br />
FRAGMENTOS DE UNA VENTANA DECONSTRUIDA<br />
¿EDICIÓN&#8230; SOBRE UNA REJILLA?<br />
CONTROLES DE USUARIO<br />
CAMBIOS EN LOS GESTORES DE MENÚS Y VENTANAS<br />
GUARDAR LOS CAMBIOS<br />
HERENCIA VISUAL</p>
<p><strong>Módulo 5 ALGORITMOS BÁSICOS DE NAVEGACIÓN Y EDICIÓN </strong><br />
PROPIEDADES VISIBLES EN TIEMPO DE DISEÑO<br />
EL ALGORITMO BÁSICO DE INICIALIZACIÓN<br />
¿HAY CAMBIOS?<br />
EL ALGORITMO BÁSICO DE GRABACIÓN<br />
CONCILIACIÓN EN PRESENCIA DE CAMPOS AUTONUMERICOS<br />
ACTUALIZACIÓN DEL ESTADO DE ELEMENTOS VISUALES</p>
<p><strong>Módulo 6 CONSULTAS SOBRE TABLAS SENCILLAS </strong><br />
UNA CONEXIÓN CENTRAL<br />
CONFIGURACIÓN DE LOS ADAPTADORES<br />
CREACIÓN DE LOS CONJUNTOS DE DATOS CON TIPOS<br />
IMPLEMENTACIÓN DEL ACCESO PARA LECTURA<br />
LAS VENTANAS DE PAÍSES E IMPUESTOS</p>
<p><strong>Módulo 7 RECUPERACIÓN DE REGISTROS POR PÁGINAS </strong><br />
UNA INTERFAZ GENÉRICA PARA LA RECUPERACIÓN POR GRUPOS<br />
GENERACIÓN DINÁMICA DE CONSULTAS<br />
MÁS REGISTROS POR FAVOR<br />
INICIALIZACIÓN</p>
<p><strong>Módulo 8 EDICIÓN MODAL </strong><br />
DIÁLOGOS MODALES Y OPERACIONES SOBRE DATOS<br />
EL MOMENTO MÁS ADECUADO<br />
EL GESTOR DE VENTANAS ASUME RESPONSABILIDADES<br />
UN NOBLE LINAJE DE EDITORES MODALES<br />
ENLACES CON LA VISTA DE DATOS</p>
<p><strong>Módulo 9  CONTROLES PARA NAVEGACIÓN Y EDICIÓN </strong><br />
AUTOMATIZANDO LA EDICIÓN<br />
CREACIÓN DE REGISTROS<br />
BORRADOS<br />
REAPROVECHANDO BOTONES<br />
RELECTURA TRAS LA GRABACION<br />
RETOQUES EN EL CONJUNTO DE DATOS</p>
<p><strong>Módulo 10  REGLAS DE NEGOCIO DURANTE LA EDICIÓN </strong><br />
UN ADAPTADOR PARA PRODUCTOS<br />
REGLAS DE NEGOCIO Y CONJUNTOS DE DATOS<br />
¿QUIÉN VIGILA AL VIGILANTE?</p>
<p><strong>Módulo 11  ALMACENAMIENTO EN CACHE</strong><br />
UNA CACHE DE CORTA VIDA<br />
PERSISTENCIA XML<br />
EL MOMENTO DEL ULTIMO CAMBIO<br />
COMPARANDO CON LA VERSION LOCAL<br />
UN SEGURO DE VIDA</p>
<p><strong>Módulo 12  BÚSQUEDAS </strong><br />
UN REPASO A LA LISTA DE PALABRAS<br />
PROCEDIMIENTOS ALMACENADOS QUE RETORNAN VALORES<br />
DESMENUZANDO CADENAS</p>
<p><strong>Módulo 13 NAVEGACIÓN MAESTRO/DETALLES </strong><br />
CLIENTES Y ATRIBUTOS<br />
PRIMERA APROXIMACIÓN<br />
PROPAGACIÓN DE FILTROS<br />
EXTENSIONES DEL SISTEMA DE PAGINACIÓN</p>
<p><strong>Módulo 14 BÚSQUEDAS BASADAS EN ATRIBUTOS </strong><br />
SINTAXIS DE LAS CADENAS DE BÚSQUEDA<br />
ENUMERADORES<br />
GENERACIÓN DE CONSULTAS</p>
<p><strong>Módulo 15 RESOLUCIÓN DE REFERENCIAS </strong><br />
COLUMNAS BASADAS EN EXPRESIONES<br />
EL ORDEN DE LAS LECTURAS<br />
COMBOS PARA LA EDICIÓN DE REFERENCIAS</p>
<p><strong>Módulo 16 EDICIÓN DE ENTIDADES CON ESQUEMAS ABIERTOS </strong><br />
ENLACE A DATOS ARTESANAL<br />
TRANSACCIONES<br />
GRABACIÓN MAESTRO/DETALLES<br />
PROPAGANDO LOS CAMBIOS A LA VENTANA DE NAVEGACIÓN</p>
<p><strong>Módulo 17  VALIDACIÓN </strong><br />
MÁS RESPONSABILIDADES PARA IWINDOW<br />
EL PROVEEDOR DE ERRORES<br />
VERIFICACIÓN MEDIANTE EXPRESIONES REGULARES<br />
TRAMPAS DE ERRORES</p>
<p><strong>Módulo 18  SELECCIÓN DE REGISTROS EN TABLAS GRANDES </strong><br />
CREACIÓN DE FACTURAS Y SELECCIÓN DE CLIENTES<br />
EL DIÁLOGO DE EDICIÓN DE FACTURAS<br />
EL CLIENTE QUIERE SUS GALLETAS<br />
UN DIÁLOGO PARA LA SELECCIÓN<br />
TRÁFICO DE DATOS<br />
CUANDO SE TRATA DE UN NUEVO CLIENTE&#8230;</p>
<p><strong>Módulo 19  GRABACIÓN DE FACTURAS </strong><br />
EL ALGORITMO DE GRABACIÓN<br />
UNA ENREDADA CORTINA DE DISPAROS<br />
ADAPTACIONES A LA EDICIÓN MAESTRO/DETALLES<br />
COMPROBACIONES SOBRE LÍNEAS DE FACTURAS<br />
NOTIFICACIONES ENTRE VENTANAS<br />
NOTIFICACIONES DURANTE LAS ACTUALIZACIONES<br />
CENTINELA ALERTA</p>
<p><strong>Módulo 20  EXTENSIBILIDAD MEDIANTE SCRIPTS </strong><br />
EN BUSCA DEL VALLE DE LA EXTENSIBILIDAD PERDIDA<br />
EXTENSIBILIDAD MEDIANTE CÓDIGO DINÁMICO<br />
MOTORES DE SCRIPT<br />
UN, DOS, TRES, PROBANDO&#8230;<br />
REGLAS PARA DETERMINAR DESCUENTOS<br />
EL MOTOR DE DESCUENTOS<br />
APLICANDO LAS REGLAS</p>
<p><strong>Módulo 21 NAVEGACIÓN SOBRE FACTURAS </strong><br />
ES NATURAL NAVEGAR SOBRE UN ENCUENTRO<br />
CAMBIO DE SENTIDO<br />
BÚSQUEDA Y NAVEGACIÓN SOBRE FACTURAS<br />
LA VERSIÓN MÁS RECIENTE DE LA FACTURA</p>
<p><strong>Módulo 22  MENSAJES DE ERROR </strong><br />
RESTRICCIONES CON NOMBRE<br />
ADAPTANDO LOS MENSAJES AL CONTEXTO</p>
<p><strong>Módulo 23  RECUPERACIÓN DE ERRORES DE CONCURRENCIA </strong><br />
CASOS ESPECIALES<br />
CÓMO DISTINGUIR LOS ERRORES DE CONCURRENCIA<br />
RELECTURA Y MEZCLA<br />
ADVERTENCIAS Y ALTERNATIVAS</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=51</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Curso C# de Ian Marteens traducido a Delphi Prism</title>
		<link>http://www.intelsoftassociates.com/blog/?p=48</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=48#comments</comments>
		<pubDate>Mon, 29 Mar 2010 20:22:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Ian Marteens]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=48</guid>
		<description><![CDATA[Hola amigos, pues es un gusto informarles que parece que he llegado a un acuerdo con Ian Marteens para pasar su curso de C# a Delphi Prism. El curso que ahora mismo estoy traduciendo es el ejercicio práctico (programa de facturación) voy en el módulo 10 y en lugar de usar SQL Server estoy utilizando [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos, pues es un gusto informarles que parece que he llegado a un acuerdo con Ian Marteens para pasar su curso de C# a Delphi Prism.</p>
<p>El curso que ahora mismo estoy traduciendo es el ejercicio práctico (programa de facturación) voy en el módulo 10 y en lugar de usar SQL Server estoy utilizando Firebird ya que la mayoría de la gente que programamos en Delphi utilizamos este manejador de base de datos.</p>
<p>Pronto estará disponible la primera parte del de este curso. También me da gusto informarles que Ian ya está trabajando en nuevos cursos de C#, los cuales, si Ian lo permite estaré traduciendo a Delphi Prism.</p>
<p>Es un gran trabajo pero creo que vale la pena ya que Ian (aunque ya no trabaja con Delphi) es un emblema de Delphi y que mejor que poder poner a disposición de la comunidad Delphi sus cursos que siempre nos han sido muy útiles.</p>
<p>Esperen noticias pronto.</p>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=48</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Delphi Developer Day IV en español</title>
		<link>http://www.intelsoftassociates.com/blog/?p=45</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=45#comments</comments>
		<pubDate>Tue, 16 Feb 2010 01:05:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Delphi Developer Day]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=45</guid>
		<description><![CDATA[Pues una vez más como cada año Embarcadero organiza el Delphi Developer Day IV en español, el evento será en línea y serán 8 presentaciones bastante interesantes. Agradezco a Andreano por haberme invitado a participar nuevamente este año, mi tema será LINQ con Delphi Prism. El evento se llevará a cabo el día 26 de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-medium wp-image-46 aligncenter" title="DeveloperIV" src="http://www.intelsoftassociates.com/blog/wp-content/uploads/2010/02/DeveloperIV-300x65.jpg" alt="DeveloperIV" width="300" height="65" /></p>
<p>Pues una vez más como cada año Embarcadero organiza el <a href="http://edn.embarcadero.com/es/article/40336">Delphi Developer Day IV </a>en español, el evento será en línea y serán 8 presentaciones bastante interesantes.</p>
<p>Agradezco a Andreano por haberme invitado a participar nuevamente este año, mi tema será LINQ con Delphi Prism. El evento se llevará a cabo el día 26 de febrero del presene año, el evento es completamente gratuito solo hay que <a href="https://www124.livemeeting.com/lrs/advancedsw_ccc/Registration.aspx?pageName=jhsgns4f9v2bw87k">registrarse</a>.</p>
<p>No dejes de asistir ya que hay presentaciones muy interesantes.</p>
<p>Nose vemos en el evento</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=45</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reducción de precio de los VideCursos de Delphi Prism</title>
		<link>http://www.intelsoftassociates.com/blog/?p=43</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=43#comments</comments>
		<pubDate>Mon, 11 Jan 2010 23:12:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Videcurso Delphi Prism]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=43</guid>
		<description><![CDATA[Hola amigos: Pues he recibido algunos correos pidiendo que se reduzcan, incluso  que se regalen los VideoCursos de Delphi Prism. Esto último no me es posible pero si he decidido bajar los precios de los VideCursos para que estén a precios más accesibles para más desarrolladores. Los precios de los VideCursos quedarían de la siguiente [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos:</p>
<p>Pues he recibido algunos correos pidiendo que se reduzcan, incluso  que se regalen los VideoCursos de Delphi Prism. Esto último no me es posible pero si he decidido bajar los precios de los VideCursos para que estén a precios más accesibles para más desarrolladores.</p>
<p>Los precios de los VideCursos quedarían de la siguiente forma:</p>
<ul>
<li><a href="http://intelsoftassociates.com/index.php?page=shop.product_details&amp;flypage=flypage.tpl&amp;product_id=4&amp;category_id=3&amp;option=com_virtuemart&amp;Itemid=80" target="_blank">Desarrollo de aplicaciones de escritorio y acceso a datos con Delphi Prism</a> $ 78 USD</li>
<li><a href="http://intelsoftassociates.com/index.php?page=shop.product_details&amp;flypage=flypage.tpl&amp;product_id=1&amp;category_id=3&amp;option=com_virtuemart&amp;Itemid=80" target="_blank">Introducción a la programación con Delphi Prism</a> $ 66 USD.</li>
</ul>
<p>Espero que de esta forma sean más accesibles para la mayoría de los desarrolladores.</p>
<p>Saludos y hasta la próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=43</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Libro Delphi Prism Manual de Referencia disponible por medio de Gopac</title>
		<link>http://www.intelsoftassociates.com/blog/?p=37</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=37#comments</comments>
		<pubDate>Sat, 19 Dec 2009 01:01:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Libro Delphi Prism]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=37</guid>
		<description><![CDATA[Últimamente me han escrito varias personas para preguntarme como pueden adquirir mi libro Delphi Prism Manual de referencia, el libro ya está a la venta y lo pueden adquirir a través de Gopac que es el representante de Embarcadero en México. El libro tiene un precio de de alrededor de 73 Dólares y pueden hacer [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-medium wp-image-38 alignleft" title="Prism" src="http://www.intelsoftassociates.com/blog/wp-content/uploads/2009/12/Prism-257x300.jpg" alt="Prism" width="257" height="300" /></p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;">
<p>Últimamente me han escrito varias personas para preguntarme como pueden adquirir mi libro Delphi Prism Manual de referencia, el libro ya está a la venta y lo pueden adquirir a través de Gopac que es el representante de Embarcadero en México.</p>
<p>El libro tiene un precio de de alrededor de 73 Dólares y pueden hacer su pedido en el siguiente link:</p>
<p><a href="http://www.gopac.com.mx/v3/gopache/embarcadero/LibroDelphiPrismIndice.asp" target="_blank">Gopac Libro Delphi Prism</a></p>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Uso de Contains en LINQ</title>
		<link>http://www.intelsoftassociates.com/blog/?p=33</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=33#comments</comments>
		<pubDate>Tue, 17 Nov 2009 20:10:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Contains en LINQ]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=33</guid>
		<description><![CDATA[En muchas ocasiones cuando estamos desarrollando una aplicación necesitamos obtener los elementos de una colección que contengan o no un conjunto de elementos. Para esta tarea, en LINQ hacemos uso de la extensión Contains. Para poner un ejemplo similar y así pode entender de que hablo observe la siguiente instrucción SQL: Select * from Tabla [...]]]></description>
			<content:encoded><![CDATA[<p>En muchas ocasiones cuando estamos desarrollando una aplicación necesitamos obtener los elementos de una colección que contengan o no un conjunto de elementos.</p>
<p>Para esta tarea, en LINQ hacemos uso de la extensión <strong>Contains</strong>.</p>
<p>Para poner un ejemplo similar y así pode entender de que hablo observe la siguiente instrucción SQL:</p>
<p><em>Select * from Tabla Where campo Not In (‘Valor1’,’Valor2’….)</em></p>
<p>En esta instrucción SQL estamos obteniendo los valores de la tabla que no estén dentro del conjunto de valores que estamos especificando.</p>
<p>Vamos a ver como lograr algo similar utilizando LINQ.</p>
<p>El siguiente ejemplo es únicamente demostrativo y está escrito en Delphi Prism.</p>
<p>Comenzamos por crear una clase muy simple de productos frutales por ejemplo:</p>
<pre class="brush: delphi">
type
TProducto = public class
public
   property fruta : String;
end;
</pre>
<p>Y el código de ejemplo demostrativo de LINQ y Contains sería:</p>
<pre class="brush: delphi">
var frutas : array of String := [&#039;Peras&#039;,&#039;Platanos&#039;];
var ColeccionProductos : List&lt;TProducto&gt; := new List&lt;TProducto&gt;();
ColeccionProductos.Add(new TProducto(fruta := &#039;Naranjas&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Peras&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Limones&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Platanos&#039;));
var ElementosProductos := from elemento in ColeccionProductos
                                     where not (frutas.Contains(elemento.fruta.ToString()))
                                     select elemento;
ColeccionProductos :=  ElementosProductos.ToList();
for each item in ColeccionProductos do
   MessageBox.Show(item.fruta);
</pre>
<p>Como podemos ver en este ejemplo, creamos una colección de frutas y una matriz con el nombre de dos frutas.<br />
Lo que queremos obtener son todas las frutas que no están contenidas en la matriz.<br />
Es decir, todas las frutas que no son ni Peras ni Plátanos.<br />
En SQL estándar serían las frutas NOT IN (&#8216;Peras&#8217;, &#8216;Platanos&#8217;).<br />
Adicionalmente, también podemos hacer uso de las funciones Lambda, por lo que todo el funcionamiento anterior, se resumiría de la siguiente manera (equivalente de la anterior):</p>
<pre class="brush: delphi">
var frutas : array of String := [&#039;Peras&#039;,&#039;Platanos&#039;];
var ColeccionProductos : List&lt;TProducto&gt; := new List&lt;TProducto&gt;();
ColeccionProductos.Add(new TProducto(fruta := &#039;Naranjas&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Peras&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Limones&#039;));
ColeccionProductos.Add(new TProducto(fruta := &#039;Platanos&#039;));
ColeccionProductos := ColeccionProductos.Where((n) -&gt; not (frutas.Contains(n.fruta.ToString()))).ToList();
for each item in ColeccionProductos do
  MessageBox.Show(item.fruta);
</pre>
<p>Espero que quede clara (para quien lo necesite) la funcionalidad, beneficios y usos de Contains en LINQ.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=33</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expresiones regulares Parte 1</title>
		<link>http://www.intelsoftassociates.com/blog/?p=26</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=26#comments</comments>
		<pubDate>Mon, 16 Nov 2009 16:44:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Expresiones regulares]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=26</guid>
		<description><![CDATA[En esta ocasión quiero hablar de las expresiones regulares, una herramienta muy útil pero también un poco complicado de comprender. Las expresiones regulares son una manera estándar de buscar y reemplazar de manera opcional apariciones de subcadenas y patrones de texto. Si no conoces las expresiones regulares, sólo piensa en los caracteres comodines que usa [...]]]></description>
			<content:encoded><![CDATA[<p>En esta ocasión quiero hablar de las expresiones regulares, una herramienta muy útil pero también un poco complicado de comprender.</p>
<p>Las expresiones regulares son una manera estándar de buscar y reemplazar de manera opcional apariciones de subcadenas y patrones de texto. Si no conoces las expresiones regulares, sólo piensa en los caracteres comodines que usa el indicador de comandos para indicar un grupo de archivos (como *.txt) o en los caracteres especiales que puede usar con el operador Like en las consultas SQL:</p>
<p>SELECT nombre,ciudad FROM Clientes WHERE nombre LIKE “A%”</p>
<p>Muchos expertos en computación han investigado a fondo las expresiones regulares, y algunos lenguajes de programación están excesivamente basados en ellas.  A pesar de su mucha utilidad los programadores de Microsoft Windows rara vez usan las expresiones regulares, tal vez porque su sintaxis no es muy clara.</p>
<p><strong>Aspectos Generales de las expresiones regulares</strong></p>
<p>Microsoft .NET Framework viene con un motor de expresiones regulares muy poderoso al que se puede acceder desde cualquier lenguaje .NET, por lo que podemos usar es poder del análisis sintáctico de lenguajes como Perl sin tener que abandonar nuestro lenguaje favorito.<br />
Fundamentos de las expresiones regulares<br />
Regex es la clase más importante de este grupo, y cualquier código de expresión regular crea una instancia al menos de un objeto de esta clase (o usa uno de los métodos estáticos de Regex). Este objeto representa una expresión regular inmutable. Crearemos una instancia al pasar el patrón de búsqueda:</p>
<pre class="brush: delphi">
var re : Regex := new Regex(&#039;[aeiou]\d&#039;);
</pre>
<p>El método Matches del objeto Regex aplica la expresión regular a la cadena pasada como parámetro; devuelve un objeto MatchCollection, una colección de sólo lectura que representa todas las coincidencias que no se superponen:</p>
<pre class="brush: delphi">
var re : Regex := new Regex(&#039;[aeiou]\d&#039;);
//Esta cadena de entrada contiene tres grupos
//que coinciden en el Regex
var texto : String:= &#039;a1:= a1 + e2&#039;;
//Obtiene la colección de coincidencias
var mc : MatchCollection := re.Matches(texto);
//¿Cuantas apariciones encontramos?
Console.WriteLine(&#039;{0} concidencias&#039;,mc.Count);
Console.ReadLine;
</pre>
<p>También podemos pasarle al método Matches en segundo parámetro, que se interpreta como el índice donde comienza la búsqueda.<br />
El objeto matchCollection contiene objetos Match individuales, que exponen propiedades como:</p>
<ul>
<li>Value.- La cadena coincidente que se encontró.</li>
<li>Index.- La posición de la cadena coincidente en la cadena de entrada.</li>
<li>Length.- La longitud de la cadena coincidente, que es útil cuando la expresión regular coincide con cadenas de diversas longitudes.</li>
</ul>
<p>El código anterior despliega estas líneas en la ventana de consola:</p>
<p>a1 en la posición 0<br />
a1 en la posición 5<br />
e2 en la posición 10</p>
<p><strong>El lenguaje de expresiones regulares</strong></p>
<p>En las siguientes tablas presento una lista de todas las construcciones legales como patrones de expresiones regulares, agrupados en las siguientes categorías:</p>
<ul>
<li> <strong>Caracteres de escape.-</strong> Se usan para sustituir caracteres individuales. Los necesitamos para manejar los caracteres que no se imprimen (como los caracteres de nueva línea y de tabulador) y para proporcionar versiones de escape para los caracteres que tienen un significado especial en patrones de expresiones regulares. Junto con las sustituciones, éstas son las únicas secuencias que pueden aparecer en un modelo de reemplazo.</li>
</ul>
<ul>
<li> <strong>Clases de caracteres.- </strong>Ofrecen una manera de hacer coincidir un carácter de un grupo que se especifica entre corchetes como en el ejemplo de [aeiou]. No necesita tener caracteres especiales de escape cuando aparecen entre corchetes, con excepción de los casos del guión y el corchete de cierre, que son los únicos caracteres que tienen un significado especial entre corchetes. Por ejemplo, [()[\]{}] hace coincidir paréntesis, corchetes y llaves de apertura y cierre. (Hay que observar que el carácter] es de escape, pero el carácter [ no lo es.)</li>
</ul>
<ul>
<li> <strong>Aserciones atómicas de ancho cero.-</strong> Especifican dónde debe ir la cadena coincidente pero no consumen caracteres. Por ejemplo, la expresión regular abc$ coincide con cualquier palabra abc que esté inmediatamente antes del final de una línea sin coincidir con el final de la línea.</li>
</ul>
<ul>
<li> <strong>Cuantificadores.-</strong> Especifican que una subexpresión se debe repetir un número de veces determinado. Un cuantificador particular se aplica al carácter, clase de caracteres o grupo que lo precede inmediatamente. Por ejemplo, \w+ corresponde a todas las palabras con uno o más caracteres, mientras que \w{3,} corresponde a todas las palabras con tres caracteres, cuando menos. Los cuantificadores se dividen en dos categorías: expansivos y laxos. Un cuantificador expansivo, como * y +, siempre coincide con la mayor cantidad de caracteres posible, mientras que uno laxo, como *? Y +?, intenta coincidir con la menor cantidad de caracteres que sea posible.</li>
</ul>
<ul>
<li> <strong>Construcciones de agrupamiento.-</strong> Pueden capturar y nombrar grupos de subexpresiones, además de incrementar la eficiencia de las expresiones regulares con modificadores de búsquedas anticipadas y búsquedas tardías sin captura. Por ejemplo, (abc)+ coincide con secuencias repetidas de la cadena “abc”, (?&lt;total&gt;\d+) coincide con un grupo de uno o más dígitos consecutivos y le asigna el nombre total, que se puede usar después dentro del mismo modelo de expresión regular o para sustitución.</li>
</ul>
<ul>
<li> <strong>Sustituciones.- </strong>Sólo se pueden usar dentro de un modelo de reemplazo y, junto con los caracteres de escape, son las únicas construcciones que se pueden usar en patrones de reemplazo. Por ejemplo, cuando la secuencia ${total} aparece en un modelo de reemplazo, inserta el valor del grupo llamado total. Los paréntesis no tienen un significado especial en un modelo de reemplazo, así que no necesita caracteres de escape.</li>
</ul>
<ul>
<li> <strong>Construcciones de referencia inversa.-</strong> Nos permiten hacer referencia a un grupo anterior de caracteres en el modelo de expresión regular usando su número o nombre de grupo. Podemos usar estas construcciones como una manera de decir “coincidir otra vez con los mismo”. Por ejemplo, (?&lt;valor&gt;\d+)=\k&lt;valor&gt; hace coincidir números idénticos separados por un símbolo =, como en la secuencia “123=123”.</li>
</ul>
<ul>
<li> <strong>Construcciones de alternancia.- </strong>Proporcionan una manera de especificar opciones; por ejemplo, la secuencia “Yo (tengo|tenía)” puede hacer coincidir las cadenas “Yo tengo” y “Yo tenía”.</li>
</ul>
<ul>
<li> <strong>Construcciones diversas.-</strong> Incluyen que permiten modificar una o más opciones de una expresión regular en medio del modelo. Por ejemplo, A(?i)BC coincide con todas las variantes de la palabra ABC que comienzan con A mayúscula (como Abc, ABc, AbC, y ABC).</li>
</ul>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="148" valign="top">
<p align="center"><strong>Categoría</strong></p>
</td>
<td width="132" valign="top">
<p align="center"><strong>Secuencia</strong></p>
</td>
<td width="275" valign="top">
<p align="center"><strong>Descripción</strong></p>
</td>
</tr>
<tr>
<td width="148" valign="top"><strong>Caracteres   de escape</strong></td>
<td width="132" valign="top">Cualquier carácter</td>
<td width="275" valign="top">Los caracteres distintos de   .$^{[(|)*+?\ equivalen a sí mismos.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\a</td>
<td width="275" valign="top">El carácter de alarma de   campana (igual que \x07)</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\b</td>
<td width="275" valign="top">El carácter de retroceso (igual   que \x08), pero sólo cuando se usa entre corchetes o en un modelo de   reemplazo. De otra manera, coincide con el límite de una palabra.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\t</td>
<td width="275" valign="top">El carácter de tabulación   (igual que \x09)</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\r</td>
<td width="275" valign="top">El retorno de carro (igual que   \x0B)</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\v</td>
<td width="275" valign="top">El carácter de tabulación   vertical</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\f</td>
<td width="275" valign="top">El carácter de avance de página</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\n</td>
<td width="275" valign="top">El carácter de nueva línea</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\e</td>
<td width="275" valign="top">El carácter de escape</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\040</td>
<td width="275" valign="top">Un carácter ASCII expresado en   notación octal (debe ser de hasta tres dígitos octales). Por ejemplo, \040 es   un espacio.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\x20</td>
<td width="275" valign="top">Un carácter ASCII expresado en   notación hexadecimal (debe tener exactamente dos dígitos). Por ejemplo, \x20   es un espacio.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\cC</td>
<td width="275" valign="top">Un carácter de control Unicode.   Por ejemplo, \cC es control + C.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\u0020</td>
<td width="275" valign="top">Un carácter ASCII en notación   (debe tener exactamente cuatro dígitos). Por ejemplo, \u0020 es un espacio.</td>
</tr>
<tr>
<td width="148" valign="top"></td>
<td width="132" valign="top">\*</td>
<td width="275" valign="top">Cuando la diagonal invertida va   seguida de un carácter en una manera que no forma una secuencia de escape,   coincide con el carácter. Por ejemplo, \* coincide con el carácter *.</td>
</tr>
</tbody>
</table>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="148" valign="top">
<p align="center"><strong>Categoría</strong></p>
</td>
<td width="132" valign="top">
<p align="center"><strong>Secuencia</strong></p>
</td>
<td width="275" valign="top">
<p align="center"><strong>Descripción</strong></p>
</td>
</tr>
<tr>
<td width="148" valign="top"><strong>Clases   de caracteres</strong></td>
<td width="132" valign="top">.</td>
<td width="275" valign="top">El carácter de punto coincide   con cualquier carácter, con excepción del carácter de nueva línea. Coincide   con cualquier carácter, incluido el de nueva línea, si se usa la opción   Singleline.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">[aeiou]</td>
<td width="275" valign="top">Cualquier carácter de la lista   entre corchetes de apertura y cierre; [aeiou] coincide con cualquier vocal.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">[^aeiou]</td>
<td width="275" valign="top">Cualquier carácter que no esté   en la lista entre corchetes de apertura y cierre; [^aeiou] no coincide con   vocal alguna.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">[a-zA-Z]</td>
<td width="275" valign="top">El carácter de guión (-)   permite especificar intervalos de caracteres: [a-zA-Z] coincide con cualquier   carácter en minúscula o en mayúscula; [^0-9] con cualquier carácter que no   sea in dígito. Sin embargo, hay que tomar en cuenta que no coincide con las   letras acentuadas.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">[a-z-[aeiou]]</td>
<td width="275" valign="top">Sustracción de clases de   caracteres: cuando un par de corchetes está anidado en otro par de corchetes   y va precedido de un signo de menos, la expresión regular coincide con todos   los caracteres del par externo pero no con los del interno. Por ejemplo,   [a-z[aeiou]] coincide con cualquier carácter en minúscula que no sea una   vocal.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\w</td>
<td width="275" valign="top">Un carácter de una palabra, que   es un carácter alfanumérico o el carácter de subrayado, igual que   [a-zA-Z_0-9] pero también excluye letras acentuadas y otros símbolos   alfabéticos.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\W</td>
<td width="275" valign="top">Un carácter que no es de una   palabra; igual que [^a-zA-Z_0-9] pero también excluye letras acentuadas y   otros símbolos.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\s</td>
<td width="275" valign="top">Un carácter de espacio en   blanco, que es un espacio en blanco, un tabulador, un avance de página, una   nueva línea, un retorno de carro o un carácter de avance vertical; igual que   [\f\n\r\t\v].</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\S</td>
<td width="275" valign="top">Un carácter que no es un   espacio en blanco; igual que [^\f\n\r\t\v]</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\d</td>
<td width="275" valign="top">Un dígito decimal; igual que   [0-9].</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\D</td>
<td width="275" valign="top">Un carácter que no es un   dígito; igual que [^0-9].</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\p{nombre}</td>
<td width="275" valign="top">Un carácter incluido en la   clase de caracteres con nombre especificado por {nombre}; los nombre   soportados son grupos Unicode e intervalos de bloques, por ejemplo, LI Nd o   Z.</td>
</tr>
<tr>
<td width="148" valign="top"><strong> </strong></td>
<td width="132" valign="top">\P{nombre}</td>
<td width="275" valign="top">Un carácter no incluido en   grupos e intervalos de bloques especificados en {nombre}.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=26</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Curso de acceso a datos con Delphi Prism</title>
		<link>http://www.intelsoftassociates.com/blog/?p=14</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=14#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:49:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Curso Delphi Prism]]></category>
		<category><![CDATA[Datos en Delphi Prism]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=14</guid>
		<description><![CDATA[Hola amigos, pues le comunico que ya tengo disponible el curso de acceso a datos con Delphi Prism, ADO.NET y Firebird. Este curso está orientado a programadores Delphi Prism, que deseen desarrollar aplicaciones de escritorio que permitan al usuario interactuar con información proveniente de bases de datos. El contenido del curso se divide en dos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-medium wp-image-15" title="Curso de acceso a datos con Delphi Prism" src="http://www.intelsoftassociates.com/blog/wp-content/uploads/2009/10/CD_CURSO_DATOS_PRISM-299x300.jpg" alt="Curso de acceso a datos con Delphi Prism" width="299" height="300" /></p>
<p>Hola amigos, pues le comunico que ya tengo disponible el curso de acceso a datos con Delphi Prism, ADO.NET y Firebird.</p>
<p>Este curso está orientado a programadores Delphi Prism, que deseen desarrollar aplicaciones de escritorio que permitan al usuario interactuar con información proveniente de bases de datos.</p>
<p>El contenido del curso se divide en dos áreas:</p>
<p>1)      FORMULARIOS.- En esta área aprenderá a crear interfaces de aplicaciones de escritorio, conociendo el funcionamiento de los principales controles que se utilizan para crear ricas interfaces para la interacción con el usuario.</p>
<p>2)      ACCESO A DATOS.- En esta área aprenderá el uso de las principales clases de ADO.NET con las que se puede acceder a información ubicada en cualquier tipo de bases de datos.</p>
<p>Para cualquier información acerca de este curso favor de mandarme un mensaje  por medio del formulario de contacto.</p>
<p><strong>Temario</strong></p>
<ul>
<li><strong>· </strong><strong>Módulo 1 Crear aplicaciones de escritorio parte 1</strong>
<ul>
<li>Crear un proyecto de tipo aplicación de escritorio.</li>
<li>Como añadir formularios a un proyecto.</li>
<li>El formulario desde la perspectiva de la orientación a objetos.</li>
<li>Propiedades de los formularios.</li>
<li>Como escoger el formulario de inicio.</li>
<li>Principales eventos de los formularios.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 2 Crear aplicaciones de escritorio parte 2</strong>
<ul>
<li>Como añadir controles a un formulario.</li>
<li>Adaptar los controles dentro del formulario.</li>
<li>Posicionar y dimensionar.</li>
<li>Alinear.</li>
<li>Ancho y Dock.</li>
<li>Establecer el orden de tabulación.</li>
<li>Responder a los eventos emitidos por los controles.</li>
<li>Conectar múltiples eventos a un único gestor de eventos.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<p><strong> </strong></p>
<ul>
<li><strong>· </strong><strong>Módulo 3 Crear aplicaciones de escritorio parte 3</strong>
<ul>
<li>Mostrar formularios en forma Modal y no Modal.</li>
<li>Añadir controles en tiempo de ejecución.</li>
<li>Crear teclas de acceso para controles.</li>
<li>Eventos relacionados con entradas de teclado.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 4 Utilizar controles Estándar parte 1</strong>
<ul>
<li>Propiedades comunes a la mayoría de los controles.</li>
<li>Los controles más elementales (TextBox, Label, Button).</li>
<li>Listas básicas (ListBox, ComboBox, ChecedListBox).</li>
<li>Controles booleanos (CheckBox, RadioButton).</li>
<li>Otras listas (NumericUpDown, TreeView, ListView).</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 5 Utilizar controles Estándar parte 2</strong>
<ul>
<li>Panel y GropBox.</li>
<li>SplitContainer.</li>
<li>TabControl.</li>
<li>ToolStrip y StatusStrip.</li>
<li>PictureBox.</li>
<li>ImageList.</li>
<li>MonthCalendar.</li>
<li>WebBrowser.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 6 Crear menús</strong>
<ul>
<li>¿Qué es un sistema de menús?</li>
<li>Introducción al control MenuStrip.</li>
<li>Añadir mejoras a un ToolStripMenuItem.</li>
<li>Ocultar y desactivar ToolStripMenuItems.</li>
<li>Responder a eventos del menú.</li>
<li>Crear menús de contexto con el componente ContextMenuStrip.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 7 Los cuadros de diálogo</strong>
<ul>
<li>Descripción de los cuadros de diálogo.</li>
<li>OpenFileDialog</li>
<li>SaveFileDialog</li>
<li>ColorDialog.</li>
<li>FontDialog.</li>
<li>FolderBrowserDialog.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 8 Herencia entre formularios</strong>
<ul>
<li>Utilidad de la herencia entre formularios.</li>
<li>Crear un formulario base.</li>
<li>Heredar de un formulario base.</li>
<li>Modificar el formulario base.</li>
<li>Sobrescribir eventos del formulario base.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 9 Introducción al acceso a datos </strong>
<ul>
<li>La necesidad de almacenar datos.</li>
<li>Introducción a las bases de datos relacionales.</li>
<li>Descripción del lenguaje SQL.</li>
<li>Los proveedores de bases de datos.</li>
<li>Descripción de ADO.NET.</li>
<li>Escenarios conectados y escenarios desconectados.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 10 Conectar a una base de datos</strong>
<ul>
<li>Instalación y configuración del .NET Firebird Provider y el DDEx para Visual Studio</li>
<li>¿Qué es una cadena de conexión?</li>
<li>Como conectar a una base de datos.</li>
<li>Como gestionar los eventos de conexión.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<p><strong> </strong></p>
<ul>
<li><strong>· </strong><strong>Módulo 11 Operaciones en un escenario conectado parte 1</strong>
<ul>
<li>Como enviar un comando a una base de datos.</li>
<li>Los tipos de respuesta a un comando.</li>
<li>Comandos escalares.</li>
<li>Comandos que devuelven un conjunto de resultados. El DataReader.</li>
<li>Como iterar a través de un DataReader.</li>
<li>Ejercicio  final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 12 Operaciones en un escenario conectado parte 2</strong>
<ul>
<li>Modificación de los datos.</li>
<li>Los comandos parametrizados.</li>
<li>La referencia a bibliotecas.</li>
<li>Como ejecutar procedimientos almacenados en una base de datos.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 13 Operaciones en un escenario desconectado parte 1</strong>
<ul>
<li>¿Qué es un DataSet?</li>
<li>Crear DataSets mediante código.</li>
<li>Crear DataSets con el diseñador.</li>
<li>Definir restricciones y relaciones en un DataSet.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 14 Operaciones en un escenario desconectado parte 2</strong>
<ul>
<li>Como añadir registros a un DataSet.</li>
<li>Como modificar registro de un DataSet.</li>
<li>Como eliminar registros de un DataSet.</li>
<li>Como iterar a través de los registros de un DataSet.</li>
<li>Iterar a través de registros relacionados.</li>
<li>Buscar registros en un DateTable.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 15 Operaciones en un escenario desconectado parte 3</strong>
<ul>
<li>¿Qué es un DataAdapter?</li>
<li>Crear un DataAdapter mediante código.</li>
<li>Como cargar datos en un DataSet utilizando un DataAdapter.</li>
<li>Guardar y cargar DataSets en el disco local.</li>
<li>Ejercicio final</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 16 Operaciones en un escenario desconectado parte 4</strong>
<ul>
<li>Crear DataAdapters con el diselador.</li>
<li>Crear DataAdapters con el objeto CommandBuilder.</li>
<li>El estado de las filas.</li>
<li>Como actualizar en el origen los cambios realizados en DataSet.</li>
<li>Personalizar la actualización de los cambios.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 17 Operaciones en un escenario desconectado parte 5</strong>
<ul>
<li>El problema de la concurrencia.</li>
<li>La versión de las filas.</li>
<li>Concurrencia optimista.</li>
<li>Concurrencia pesimista.</li>
<li>Formas de administrar los conflictos de concurrencia.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 18 Operaciones en un escenario desconectado parte 6</strong>
<ul>
<li>¿Qué es un DataSet tipificado?</li>
<li>¿Qué es un esquema XSD?</li>
<li>Crear DataSets tipificados basándose en el explorador de servidores.</li>
<li>La herramienta DataSource de Visual Studio.</li>
<li>Como utilizar un DataSet tipificado.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 19 Operaciones en un escenario desconectado parte 1</strong>
<ul>
<li>¿Qué es un TableAdapter?</li>
<li>Como se crean los TableAdapters.</li>
<li>Como utilizar un TableAdapter.</li>
<li>Utilizar parámetros en un TableAdapter.</li>
<li>Utilizar los métodos directos.</li>
<li>Extender las funcionalidades del TableAdapter.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<p><strong> </strong></p>
<ul>
<li><strong>· </strong><strong>Módulo 20 Mostrar y editar datos a través de formularios parte 1</strong>
<ul>
<li>Formas de administrar datos desde un formulario.</li>
<li>El control BindingSource.</li>
<li>Enlazar controles simples a un DateTable.</li>
<li>Enlazar controles simples en tiempo de ejecución.</li>
<li>El control BindingNavigator.</li>
<li>Utilizar la herramienta DataSource para crear formularios de un solo registro.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
<ul>
<li><strong>· </strong><strong>Módulo 21 Mostrar y editar datos a través de formularios parte 2</strong>
<ul>
<li>Utilizar el ComboBox como control de enlace simple.</li>
<li>El control DataGridView.</li>
<li>Personalizar la apariencia de las celdas.</li>
<li>El evento CellFormating del DataGridView.</li>
<li>Relación Maestro/Detalle entre dos DataGridViews.</li>
<li>Ejercicio final.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=14</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reiniciando mi blog!!!</title>
		<link>http://www.intelsoftassociates.com/blog/?p=1</link>
		<comments>http://www.intelsoftassociates.com/blog/?p=1#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:53:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blog de markdelphi de vuelta]]></category>

		<guid isPermaLink="false">http://www.intelsoftassociates.com/blog/?p=1</guid>
		<description><![CDATA[Hola amigos: Pues después de que el host en donde tenía alojado mi blog lo parquearan como se dice vulgarmente, estoy de regreso nuevamente. Desgraciadamente se perdieron todas las entradas y comentarios que tenia, pero ni modo tendré que volver a comenzar desde cero. Esta vez me he asegurado de alojarlo en un host seguro [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos:</p>
<p>Pues después de que el host en donde tenía alojado mi blog lo parquearan como se dice vulgarmente, estoy de regreso nuevamente.<br />
Desgraciadamente se perdieron todas las entradas y comentarios que tenia, pero ni modo tendré que volver a comenzar desde cero.<br />
Esta vez me he asegurado de alojarlo en un host seguro para que no me vuelva a suceder lo mismo.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.intelsoftassociates.com/blog/?feed=rss2&amp;p=1</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
