<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1158634561357243831</id><updated>2012-02-08T12:38:21.014-08:00</updated><category term='C++'/><category term='C# .Net Microsoft'/><category term='C#'/><category term='Crystal Reports'/><category term='VB6'/><category term='c# ado.net'/><category term='VB6 ADO'/><category term='Linq C#'/><category term='Matlab'/><category term='base de datos'/><category term='.Net Visual Studio'/><category term='.Net'/><title type='text'>Programación a Martillazos</title><subtitle type='html'>Parte de Electrónica a Martillazos http://electronicaamartillazos.co.nr</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-7274234790093813685</id><published>2012-01-12T14:10:00.000-08:00</published><updated>2012-01-12T14:46:02.422-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Copiar los valores de las celdas seleccionadas de un DataGridView a otros controles</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Tengo el siguiente DataGridView enlazado a un DataTable:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YLq_e_7us1c/Tw9XqYm0whI/AAAAAAAAAM0/jh6OdCPolCE/s1600/datagrid01.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-YLq_e_7us1c/Tw9XqYm0whI/AAAAAAAAAM0/jh6OdCPolCE/s1600/datagrid01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Cuya propiedad "SelectionMode" es igual a "FullRowSelect". Lo que quiero hacer es que cuando selecciones una fila, los valores de sus celdas se copien a otros controles. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Para ello, en el evento "SelectionChanged" pongo el siguiente código para C# (he llamado a mi DataGridView "dgView):&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763; text-align: left;"&gt;if (dgView.DataSource != null &amp;amp;&amp;amp; dgView.Rows.Count &amp;gt; 0 &amp;amp;&amp;amp; dgView.SelectedRows.Count &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textBox1.Text = dgView.SelectedRows[0].Cells[0].Value.ToString();&lt;/div&gt;&lt;div style="color: #073763; text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; comboBox.Text = dgView.SelectedRows[0].Cells[0].Value.ToString();&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div style="color: #073763; text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTimePick.Value = Convert.ToDateTime(dgView.SelectedRows[0].Cells[1].Value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textBox2.Text = dgView.SelectedRows[0].Cells[2].Value.ToString();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;En el código tengo dos TextBoxes, un ComboBox y un DateTimePicker. Los índices de las celdas empiezan desde cero. Al asignarle un valor tipo fecha al DateTimePicker hay que tener cuidado que el valor en la celda del DataGridView tenga el formato correcto o tirará una excepción.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-7274234790093813685?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/7274234790093813685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=7274234790093813685&amp;isPopup=true' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7274234790093813685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7274234790093813685'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2012/01/copiar-los-valores-de-las-celdas.html' title='Copiar los valores de las celdas seleccionadas de un DataGridView a otros controles'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YLq_e_7us1c/Tw9XqYm0whI/AAAAAAAAAM0/jh6OdCPolCE/s72-c/datagrid01.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-5710701401831350374</id><published>2012-01-04T09:00:00.000-08:00</published><updated>2012-01-04T09:14:45.527-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c# ado.net'/><title type='text'>Transacciones a una base de datos en Access</title><content type='html'>Tenía que escribir un programita que accediera (y algunas veces modificara) a los datos en una base de datos local en Access. Esta base de datos también era leída y modificada desde otra aplicación, y era muy probable que ambos programas accedieran a la base de datos al mismo tiempo, e intentaran modificarla.&lt;br /&gt;Tenía que evitar que una de las aplicaciones corrompiera la lectura/escritura de la otra, así que les hice la pregunta a la gente de StackOverflow &lt;a href="http://stackoverflow.com/questions/8718247/what-is-the-best-way-to-connect-to-a-local-database-that-will-be-used-by-two-app"&gt;¿cuál es la mejor manera de atacar este problema?&lt;/a&gt;&lt;br /&gt;Me respondieron que usara Transacciones. &lt;br /&gt;&lt;br /&gt;Mi programa tenía que leer data de la base de datos y guardarla en un DataTable. Buscando tutoriales para usar Transacciones con un DataAdapter me topé con la &lt;a href="http://www.elguille.info/NET/ADONET/transacciones_simples_dataadapter.aspx"&gt;Web del Guille&lt;/a&gt;.&lt;br /&gt;El problema era que Guille escribió su tutorial pensando en SQL Server, no para Access. Cuando quise usar su código usando los objetos OleDbConnection, OleDbDataAdapter, OleDbCommandBuilder y OleDbCommand me tiraba varias excepciones.&lt;br /&gt;&lt;br /&gt;Leyendo un poco la documentación de MSDN y, mediante prueba y error, pude finalmente crear un método para usar un Select a una base de datos en Access con Transacciones y que devolviera un DataTable:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;private DataTable miDatatable(string sqlQuery)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string connString = String.Concat("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=", rutaAmiBaseDeDatos);&lt;/div&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (OleDbConnection connDB = new OleDbConnection(connString))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbDataAdapter dAdapter;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbCommandBuilder cBuilder;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbCommand command = new OleDbCommand();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataTable dTable = new DataTable();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbTransaction trans = null;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connDB.Open();&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #274e13;"&gt;// no acepta IsolationLevel.Serializable, Snapshot o RepeatableRead&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trans = connDB.BeginTransaction(IsolationLevel.ReadCommitted);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.Connection = connDB;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.Transaction = trans;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; command.CommandText = sqlQuery;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dAdapter = new OleDbDataAdapter(sqlQuery, connDB);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cBuilder = new OleDbCommandBuilder(dAdapter);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dAdapter.SelectCommand.Transaction = trans;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dAdapter.Fill(dTable);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trans.Commit();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trans.Rollback();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch { } &lt;span style="color: #274e13;"&gt;// transacción inactiva&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return dTable;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La variable sqlQuery puede tener cualquier sentencia SQL que sea un Select, como por ejemplo "Select * from miTabla" e incluir "Where", "Join", "Distinct" etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-5710701401831350374?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/5710701401831350374/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=5710701401831350374&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5710701401831350374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5710701401831350374'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2012/01/transacciones-una-base-de-datos-en.html' title='Transacciones a una base de datos en Access'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-9096465729641448764</id><published>2011-12-21T13:47:00.000-08:00</published><updated>2011-12-21T13:47:07.135-08:00</updated><title type='text'>Mi Repositorio de Códigos Fuente</title><content type='html'>Son códigos que ya he publicado anteriormente, pero ahora en un sólo lugar, en &lt;a href="http://mygnet.net/colaboradores/yelinna.23662/codigos"&gt;mi cuenta en mygnet&lt;/a&gt; para que todo el mundo los descargue, los copie, los modifique, los analice, los traduzca a otros lenguajes, y haga todo lo que les plazca con ellos :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-9096465729641448764?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/9096465729641448764/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=9096465729641448764&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9096465729641448764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9096465729641448764'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/12/mi-repositorio-de-codigos-fuente.html' title='Mi Repositorio de Códigos Fuente'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-5135990631281486932</id><published>2011-11-17T09:32:00.000-08:00</published><updated>2012-01-07T08:55:38.881-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>La Api ShellExecute devuelve código de error 42</title><content type='html'>El error 42 se produce cuando se intenta abrir un ejecutable con la api ShellExecute, &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx"&gt;la cual sirve para abrir archivos o carpetas&lt;/a&gt;. En el caso de VB6, si se desea ejecutar otra aplicación se deberá usar la función Shell.&lt;br /&gt;&lt;br /&gt;En VB6 la api ShellExecute se declara como:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal HWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si deseo abrir un archivo con el programa que lo abre por defecto, deberé escribir:&lt;br /&gt;&lt;div style="color: #073763;"&gt;Dim ret As Long&lt;br /&gt;ret = ShellExecute(Me.HWnd, "Open", "C:\text.txt", "", "", 1)&lt;/div&gt;&lt;br /&gt;Esto abrirá el archivo de texto con el block de notas.&lt;br /&gt;&lt;br /&gt;Si deseo abrir un archivo con otro programa, escribiré:&lt;br /&gt;&lt;div style="color: #073763;"&gt;Dim ret As Long&lt;br /&gt;ret = ShellExecute(Me.HWnd, "Open", "Wordpad.exe", "C:\text.txt", "", 1)&lt;/div&gt;&lt;br /&gt;Lo cual abrirá el archivo de texto con el Wordpad de Windows.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/238245/en-us"&gt;La función Shell&lt;/a&gt; es propia de VB6. Si quiero ejecutar una aplicación deberé escribir:&lt;br /&gt;&lt;span style="color: #073763;"&gt;Shell "C:\MiApp.exe", vbNormalFocus&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-5135990631281486932?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/5135990631281486932/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=5135990631281486932&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5135990631281486932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5135990631281486932'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/11/la-api-shellexecute-devuelve-codigo-de.html' title='La Api ShellExecute devuelve código de error 42'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-1194111671506826105</id><published>2011-10-24T11:23:00.000-07:00</published><updated>2011-11-14T15:08:20.163-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6 ADO'/><title type='text'>Error al actualizar un Recordset: "El Campo no es Actualizable"</title><content type='html'>Intentaba modificar un registro de una base de datos en Access desde VB6, cuando, al hacer miRecordset.Update, me saltaba el siguiente error:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sLtlYA2nGHw/TqWjJlYyvqI/AAAAAAAAAMs/7X8R0dsT2FA/s1600/Ado_updateable_query.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-sLtlYA2nGHw/TqWjJlYyvqI/AAAAAAAAAMs/7X8R0dsT2FA/s1600/Ado_updateable_query.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;En general, el mensaje de error es: "No se puede actualizar 'nombre del campo'; el campo no es actualizable".&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Esto se debe a que ese campo específico tiene alguna característica que hace que no se puede reescribir. En mi base d edatos, el campo "Id" es llave primaria y es auto incrementable.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;br /&gt;Aunque los permisos de la base de datos permitan hacer modificaciones a sus datos, un campo del recordset no permite cambiar su contenido si es auto incrementable. Antes de actualizar mi recordset, necesitaba saber qué campos son autoincrementables para no tocarlos cuando quiera modificar su contenido.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Después de mucho buscar por internet, di con este foro:&lt;/div&gt;&lt;a href="http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20248270.html"&gt;http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20248270.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Son rescatables estos posts:&lt;br /&gt;&lt;br /&gt;&lt;div class="answererType" style="color: #783f04;"&gt;&lt;b&gt;Expert Comment&lt;/b&gt;&lt;/div&gt;&lt;span style="color: #783f04;"&gt;          &lt;/span&gt;&lt;br /&gt;&lt;div class="answerer" style="color: #783f04;"&gt;&lt;span class=""&gt;Posted by &lt;a href="http://www.experts-exchange.com/M_559602.html"&gt;rspahitz&lt;/a&gt;&lt;/span&gt; on 21/12/01 at 8:20 AM&lt;/div&gt;&lt;span style="color: #783f04;"&gt;                 &lt;/span&gt;                &lt;span class="pBody postableBody"&gt;&lt;span style="color: #783f04;"&gt; I don't know the answer, but since (I think) Properties is a collection,  you should be able to cycle through and find the valid choices:&lt;/span&gt;&lt;br style="color: #783f04;" /&gt;&lt;br style="color: #783f04;" /&gt;&lt;span style="color: #783f04;"&gt;for i = 0 to rs.Fields(x).Properties.co&lt;/span&gt;&lt;wbr style="color: #783f04;"&gt;&lt;/wbr&gt;&lt;span style="color: #783f04;"&gt;unt - 1&lt;/span&gt;&lt;br style="color: #783f04;" /&gt;&lt;span style="color: #783f04;"&gt;&amp;nbsp; &amp;nbsp;debug.print rs.Fields(x).Properties(i)&lt;/span&gt;&lt;wbr style="color: #783f04;"&gt;&lt;/wbr&gt;&lt;span style="color: #783f04;"&gt;.name&lt;/span&gt;&lt;br style="color: #783f04;" /&gt;&lt;span style="color: #783f04;"&gt;next i&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="answererType" style="color: #783f04;"&gt;&lt;b&gt;Author Comment&lt;/b&gt;&lt;/div&gt;&lt;span style="color: #783f04;"&gt;          &lt;/span&gt;&lt;br /&gt;&lt;div class="answerer" style="color: #783f04;"&gt;&lt;span class=""&gt;Posted by &lt;a href="http://www.experts-exchange.com/M_301488.html"&gt;andyknott&lt;/a&gt;&lt;/span&gt; on 21/12/01 at 8:28 AM&lt;/div&gt;&lt;span style="color: #783f04;"&gt;                 &lt;/span&gt;                &lt;span class="pBody postableBody" style="color: #783f04;"&gt; Hi rspahitz,&lt;br /&gt;&lt;br /&gt;Thanks that helped a bit, the properties listed are&lt;br /&gt;&lt;br /&gt;BASECATALOGNAME&lt;br /&gt;BASECOLUMNNAME&lt;br /&gt;BASESCHEMANAME&lt;br /&gt;BASETABLENAME&lt;br /&gt;COLLATINGSEQUENCE&lt;br /&gt;COMPUTEMODE&lt;br /&gt;DATETIMEPRECISION&lt;br /&gt;ISAUTOINCREMENT&lt;br /&gt;ISCASESENSITIVE&lt;br /&gt;ISSEARCHABLE&lt;br /&gt;OCTETLENGTH&lt;br /&gt;KEYCOLUMN&lt;br /&gt;COMPFLAGS&lt;br /&gt;SORTID&lt;br /&gt;BASETABLEINSTANCE&lt;br /&gt;TDSCOLLATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para saber, por ejemplo, si un campo con índice x es auto incrementable, se hace:&lt;br /&gt;&lt;span style="color: #073763;"&gt;If miRecordset(x).Properties("IsAutoIncrement").Value Then _&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Debug.Print "Es Auto Incrementable"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En mi caso, al modificar mi recordset, hago:&lt;br /&gt;&lt;span style="color: #073763;"&gt;For i = 0 To miRecordset.Fields.count - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Not miRecordset(i).Properties("IsAutoIncrement").Value Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; miRecordset(i) = nuevoValor&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;miRecordset.Update&lt;/div&gt;&lt;br /&gt;Con esto elimino el error de Campo no Actualizable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-1194111671506826105?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/1194111671506826105/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=1194111671506826105&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1194111671506826105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1194111671506826105'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/10/error-al-actualizar-un-recordset-el.html' title='Error al actualizar un Recordset: &quot;El Campo no es Actualizable&quot;'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-sLtlYA2nGHw/TqWjJlYyvqI/AAAAAAAAAMs/7X8R0dsT2FA/s72-c/Ado_updateable_query.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-9054316314497961199</id><published>2011-10-08T07:56:00.000-07:00</published><updated>2011-10-08T07:56:40.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linq C#'/><title type='text'>Desocultando Carpetas Ocultadas por Virus con Linq</title><content type='html'>Actualización de &lt;a href="http://electronicaamartillazos.co.nr/"&gt;http://electronicaamartillazos.co.nr/&lt;/a&gt; (sección C#) donde muestro cómo usar Linq para crear un programita que desoculta todas las carpetas ocultas (y declaradas como carpetas de sistema) en los directorios raíz de discos duros y memorias extraíbles. Los virus que ocultan carpetas también las declaran como carpetas de sistema, de modo que no se pueden desocultar manualmente.&lt;br /&gt;Este programita sirve como base para hacer programas más complejos que administren los atributos de archivos, carpetas y subcarpetas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-9054316314497961199?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/9054316314497961199/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=9054316314497961199&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9054316314497961199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9054316314497961199'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/10/desocultando-carpetas-ocultadas-por.html' title='Desocultando Carpetas Ocultadas por Virus con Linq'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-9043892479737685049</id><published>2011-10-01T08:06:00.000-07:00</published><updated>2011-10-01T08:13:34.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linq C#'/><title type='text'>Extrayendo las resoluciones mínimas de un List&lt;String&gt; con Linq</title><content type='html'>Tengo un List&amp;lt;String&amp;gt; donde he guardado varias resoluciones de imagen en el formato "AnchoxAlto". De esta forma, tengo en mi List&amp;lt;String&amp;gt;&lt;string&gt; valores como "1024x768", "800x600", "640x480", "1200x900" etc. Y quiero extraer la resolución mínima.&lt;br /&gt;&lt;br /&gt;Una manera sería recorrer el List&lt;/string&gt;&amp;lt;String&amp;gt;&lt;string&gt; con un foreach, usar la función IndexOf('x') para obtener la ubicación del caracter 'x',&amp;nbsp; luego usar SubString para obtener los valores de Alto y Ancho, convertirlos a int, e irlos comparando en cada bucle y guardar en dos variales los valores mínimos. Al final hago un &lt;span style="color: #073763;"&gt;String.Concat(Ancho.ToString(), "x", Alto.ToString());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pero yo no quiero usar un foreach, quiero usar Linq. Este es el método que lo hace, y sin foreach:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;public String MinResolution()&lt;/span&gt;&lt;br style="color: #073763;" /&gt;&lt;span style="color: #073763;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="color: #073763;" /&gt;&lt;span style="color: #073763;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;/span&gt;&lt;string style="color: #073763;"&gt;&lt;/string&gt;&lt;/string&gt;&lt;span style="color: #073763;"&gt;&amp;lt;String&amp;gt;&lt;/span&gt;&lt;string style="color: #073763;"&gt;&lt;string&gt; modes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #274e13;"&gt; // lleno la lista con las resoluciones que quiero, obtengo, leo, etc.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String minRes = String.Empty;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #274e13;"&gt;// saco la menor resolución&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int miMinRes1 =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modes.Select(c =&amp;gt; c.Substring(0, (c.IndexOf('x')))).Min(c =&amp;gt; Convert.ToInt32(c));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int miMinRes2 =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modes.Select(c =&amp;gt; c.Substring((c.IndexOf('x')), c.Length - c.IndexOf('x'))).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Min(c =&amp;gt; Convert.ToInt32(c.Substring(1, c.Length - 1)));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; minRes = String.Concat(miMinRes1.ToString(), "x", miMinRes2.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return minRes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/string&gt;&lt;/string&gt;&lt;br /&gt;&lt;br /&gt;&lt;string style="color: #073763;"&gt;&lt;string&gt;&lt;span style="color: black;"&gt;Este algoritmo asume que el menor ancho va acompañado del menor alto, lo que siempre ocurre con las resoluciones de imágenes que tienen la misma orientación.&lt;/span&gt; &lt;/string&gt;&lt;/string&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-9043892479737685049?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/9043892479737685049/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=9043892479737685049&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9043892479737685049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/9043892479737685049'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/10/extrayendo-las-resoluciones-minimas-de.html' title='Extrayendo las resoluciones mínimas de un List&amp;lt;String&amp;gt; con Linq'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-2381201844626025112</id><published>2011-09-09T11:33:00.000-07:00</published><updated>2012-01-07T08:56:33.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Crystal Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Error en Crystal Reports: "Esta sección de Grupo no se puede imprimir..."</title><content type='html'>El mensaje completo es:&lt;br /&gt;"Esta Seccion de grupo no se puede imprimir porque su campo de condicion  no existe o no es valido. Dar formato a la seccion para elegir otro  campo de condicion". Este mensaje de error aparece al querer ir a la pestaña "Vista Previa". Al presionar el botón Aceptar, aparece una página en blanco en lugar del reporte.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-A4udIoMTON8/TmpXu8i6vmI/AAAAAAAAAMc/tyAX3rqMURY/s1600/crystalRep001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-A4udIoMTON8/TmpXu8i6vmI/AAAAAAAAAMc/tyAX3rqMURY/s1600/crystalRep001.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Busqué en Internet y no hallé cómo eliminar este error. Tampoco hallé nada útil en la Ayuda de Crystal Reports. Pero, después de probar un poco, dí yo misma con la solución.&lt;br /&gt;&lt;br /&gt;Todos los reportes de Crystal Reports van conectados a una Base de Datos. Los grupos del reporte (por ejemplo un encabezado), están vinculadas a un campo específico de la Base de Datos. Esto es para que Crystal Reports sepa en qué orden mostrar los reportes con la data jalada desde la Base de Datos.&lt;br /&gt;Este error se genera al cambiar la conexión a otra Base de Datos, eliminarla, cambiar a otra tabla, y cualquier situación en que el reporte no tenga cómo hallar el campo al que estaba vinculado.&lt;br /&gt;&lt;br /&gt;Para solucionar esto, se debe ir al asistente de Base de Datos y configurar o crear la conexión, esto es necesario en caso de haberla eliminado:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-g9Xd9EBXs7Q/TmpaWV1Cq1I/AAAAAAAAAMg/m-Gpy0MhJJU/s1600/crystalRep002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-g9Xd9EBXs7Q/TmpaWV1Cq1I/AAAAAAAAAMg/m-Gpy0MhJJU/s1600/crystalRep002.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luego, en la pertaña Diseño, le hacemos click derecho al grupo que da problemas y elegimos la opción "Cambiar el Grupo":&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-43qn-5oOkOg/TmpaxWoAkJI/AAAAAAAAAMk/-e8eLGXjFI8/s1600/crystalRep003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-43qn-5oOkOg/TmpaxWoAkJI/AAAAAAAAAMk/-e8eLGXjFI8/s1600/crystalRep003.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Se nos abrirà la ventana que nos permitirá asignar un nuevo campo de condición:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-PfVI1hr5AnI/TmpbDDPJ8EI/AAAAAAAAAMo/avyjXfDvk9A/s1600/crystalRep004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-PfVI1hr5AnI/TmpbDDPJ8EI/AAAAAAAAAMo/avyjXfDvk9A/s1600/crystalRep004.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;Con esto, ya podemos ir a la Vista Previa de nuestro reporte :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-2381201844626025112?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/2381201844626025112/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=2381201844626025112&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/2381201844626025112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/2381201844626025112'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/09/error-en-crystal-reposts-esta-seccion.html' title='Error en Crystal Reports: &quot;Esta sección de Grupo no se puede imprimir...&quot;'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-A4udIoMTON8/TmpXu8i6vmI/AAAAAAAAAMc/tyAX3rqMURY/s72-c/crystalRep001.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-1841199176400780239</id><published>2011-08-01T11:10:00.000-07:00</published><updated>2011-08-01T11:26:26.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Leyendo data numérica desde un archivo de texto con C++</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-G557TUS2xP8/TXpj-afRUCI/AAAAAAAAALk/10RgcDV7HUI/s1600/TableB.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;Tengo un archivo de texto que contiene una lista de números con el siguiente formato:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CyG5OavqwiA/TjbLQuxN5uI/AAAAAAAAAMY/MpwlGTFe1E8/s1600/atof1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-CyG5OavqwiA/TjbLQuxN5uI/AAAAAAAAAMY/MpwlGTFe1E8/s1600/atof1.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;He llamado al archivo "18.txt" por ninguna razón en especial. Lo que quiero hacer es leer los números en el archivo y realizar algunas operaciones matemáticas con ellos. Como están en formato de texto, primero debo convertirlos a números decimales.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Para ello uso la función &lt;a href="http://www.cplusplus.com/reference/clibrary/cstdlib/atof/"&gt;"atof"&lt;/a&gt;, pero hay un problema: mis números usan coma decimal, y la función "atof" considera punto decimal. Debo leer los números, línea por línea, y&amp;nbsp; ponerlos en el formato con el que puede trabajar "atof", así que declaro un aray de caracteres llamado "palabra". Ninguno de los números guardados en "18.txt" ocupa más de cinco caracteres, así que "palabra" es declarada como: char palabra[6];&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Luego recorro cada caracter dentro de "palabra" y si encuentro una coma, la reemplazo por un punto. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;El array "beta", separa espacio en memoria para 150 números decimales ya que sólo quiero operar con 150 números en total.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;El código fuente es el siguiente (el ejecutable compilado está en la misma carpeta que "18.txt"):&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#pragma hdrstop&lt;br /&gt;#pragma argsused&lt;br /&gt;&lt;br /&gt;void main(int argc, char* argv[])&lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *fp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;double *beta, c, promedio, rms, desviacion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;char palabra[6];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;beta = (double *)malloc(sizeof(double)*151);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fp = fopen("18.txt", "r");&lt;br /&gt;&lt;br /&gt;if (fp==NULL)&lt;br /&gt;&amp;nbsp;cout&amp;lt;&amp;lt;"no existe el archivo \n";&lt;br /&gt;&lt;br /&gt;else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; c = fscanf(fp, "%s", palabra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; for(int j=0; j&amp;lt;6; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (palabra[j]== ',')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { palabra[j]='.';&amp;nbsp; break; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beta[i] = atof(palabra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;beta[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; while (c != EOF &amp;amp;&amp;amp; i != 151);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;//valores estadísticos:&lt;/span&gt;&lt;br /&gt;promedio=0; desviacion=0; rms=0;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;//Promedio&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int j= 0; j&amp;lt;=150; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; promedio= promedio+ beta[j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; promedio = promedio/151;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"Promedio "; cout&amp;lt;&amp;lt;promedio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;//Desviación Estándar&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; for (int j= 0; j&amp;lt;=150; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; desviacion= desviacion + pow((beta[j]-promedio),2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; desviacion=pow(desviacion,0.5)/pow(151,0.5);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"la desviacion estandar es: "; cout&amp;lt;&amp;lt;desviacion; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;//Valor Cuadrático Medio&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; for (int j= 0; j&amp;lt;=150; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; rms= rms + pow(beta[j],2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rms=pow(rms,0.5)/pow(151,0.5);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"El valor RMS: "; cout&amp;lt;&amp;lt;rms; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fclose(fp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; system("PAUSE");&lt;br /&gt;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;Pero si quiero operar con todos los números en un archivo de texto sin importar cuántos sean, usaré este código:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#pragma hdrstop&lt;br /&gt;#pragma argsused&lt;br /&gt;&lt;br /&gt;void main(int argc, char* argv[])&lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *fp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;double i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;double beta, c, promedio, rms, desviacion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;char palabra[6];&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//valores estadísticos:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;promedio=0; desviacion=0; rms=0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;fp = fopen("18.txt", "r");&lt;br /&gt;&lt;br /&gt;if (fp==NULL)&lt;br /&gt;&amp;nbsp;cout&amp;lt;&amp;lt;"no existe el archivo \n";&lt;br /&gt;&lt;br /&gt;else {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; c = fscanf(fp, "%s", palabra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; for(int j=0; j&amp;lt;6; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (palabra[j]== ',')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; { palabra[j]='.';&amp;nbsp; break; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; beta = atof(palabra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;beta;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; promedio = promedio + beta;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rms = rms + pow(beta,2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; while (c != EOF);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; promedio = promedio/i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rms=pow(rms,0.5)/pow(i,0.5);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rewind(fp);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; c = fscanf(fp, "%s", palabra);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; for(int j=0; j&amp;lt;6; j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (palabra[j]== ',')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; { palabra[j]='.';&amp;nbsp; break; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; beta = atof(palabra);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; desviacion= desviacion + pow((beta-promedio),2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; while (c != EOF);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; desviacion=pow(desviacion,0.5)/pow(i,0.5);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"Promedio "; cout&amp;lt;&amp;lt;promedio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"la desviacion estandar es: "; cout&amp;lt;&amp;lt;desviacion; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"El valor RMS: "; cout&amp;lt;&amp;lt;rms; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"\n";&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fclose(fp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; system("PAUSE");&lt;br /&gt;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;Ambos códigos han sido probados con el &lt;a href="http://edn.embarcadero.com/article/20633"&gt;compilador gratuito de Borland.&lt;/a&gt;&lt;br /&gt;Cómo usar el compilador, &lt;a href="http://yelinna.freeoda.com/eam/dll_cvb.html"&gt;lo explico aquí.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/"&gt;En este link&lt;/a&gt; hay información sobre "fscanf" y "rewind". Y &lt;a href="http://www.modelo.edu.mx/univ/virtech/prograc/clecesc.htm"&gt;aquí hay un tutorial&lt;/a&gt; sobre lectura y escritura de archivos con C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-1841199176400780239?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/1841199176400780239/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=1841199176400780239&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1841199176400780239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1841199176400780239'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/08/leyendo-data-numerica-desde-un-archivo.html' title='Leyendo data numérica desde un archivo de texto con C++'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CyG5OavqwiA/TjbLQuxN5uI/AAAAAAAAAMY/MpwlGTFe1E8/s72-c/atof1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4248096669826629610</id><published>2011-07-15T11:11:00.000-07:00</published><updated>2011-11-17T13:36:12.732-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Calculando la potencia de un número usando recursividad en C#</title><content type='html'>Primero, el código fuente:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #274e13;"&gt;class Potencia&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Potencia pot = new Potencia();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double r = pot.potenciaR(2, 1, 3, 0);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(r.ToString());&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private double potenciaR(double base0, double p, int exponente, int i)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return i &amp;gt;= exponente ? p : potenciaR(base0, p * base0, exponente, i + 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los parámetros de la función "potenciaR" son: base, resultado, exponente, condición de parada. &lt;br /&gt;El parámetro "p" debe ser 1 al inicio porque es el "acumulador" dodne se irá multiplicando la base tantas veces como indique el exponente. La función "potenciaR" deja de llamarse a sí misma cuando el parámetro "i" es igual al valor "exponente". El valor inicial de "i" es cero.&lt;br /&gt;&lt;br /&gt;Y a continuación, lo mismo, pero con una expresión lambda recursiva:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;class Potencia&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Func&amp;lt;double, double, double,double&amp;gt; potenciaF = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; potenciaF = (base0, p, exponente, i) =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i &amp;gt;= exponente ? p : potenciaF(base0, p * base0, exponente, i + 1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(potenciaF(2, 1, 3, 0).ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;Releyendo, noté que podemos suprimir el parámetro "i" y usar el mismo parámetro "exponente" como condición de parada. Para la expresión lambda recursiva queda así:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;class Potencia&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Func&amp;lt;double, double, double&amp;gt; potenciaF = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; potenciaF = (base0, p, exponente) =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exponente &amp;lt;= 0 ? p : potenciaF(base0, p * base0, exponente-1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(potenciaF(2, 1, 3).ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #274e13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #274e13;"&gt;&lt;br /&gt;&lt;/div&gt;En todos los casos, el parámetro "p" es siempre 1. &lt;br /&gt;&lt;br /&gt;Esta es la web donde aprendí a hacer expresiones lambda recursivas:&lt;br /&gt;&lt;a href="http://commanet.blogspot.com/2008/02/recursividad-annima.html"&gt;http://commanet.blogspot.com/2008/02/recursividad-annima.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4248096669826629610?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4248096669826629610/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4248096669826629610&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4248096669826629610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4248096669826629610'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/07/calculando-la-potencia-de-un-numero-con.html' title='Calculando la potencia de un número usando recursividad en C#'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4361033120422624260</id><published>2011-06-03T07:46:00.000-07:00</published><updated>2011-06-03T07:48:04.008-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>VB6 Code Snippet: Mantener la proporción de alto y ancho de una imagen</title><content type='html'>Tengo una imagen cargada en un control Image en Visual Basic 6. Quiero que esa imagen mantenga su proporción Ancho/Alto cuando el control Image tiene su propiedad Stretch en True.&amp;nbsp; El código para hacerlo es el siguiente (He llamado al control Image imgProporcion):&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim i As Double, j As Double&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim proporcion As Double&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = imgProporcion.Width&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j = imgProporcion.Height&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Visible = False&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Stretch = False&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = (i / imgProporcion.Width)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j = (j / imgProporcion.Height)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If j &amp;gt; i Then proporcion = j Else proporcion = i&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Stretch = True&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Width = CInt(proporcion * imgProporcion.Width)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Height = CInt(proporcion * imgProporcion.Height)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgProporcion.Visible = True&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4361033120422624260?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4361033120422624260/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4361033120422624260&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4361033120422624260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4361033120422624260'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/06/vb6-code-snippet-mantener-la-proporcion.html' title='VB6 Code Snippet: Mantener la proporción de alto y ancho de una imagen'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-7679226849793627151</id><published>2011-04-29T12:02:00.000-07:00</published><updated>2011-04-30T10:45:35.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linq C#'/><title type='text'>Haciendo el Test Fizz Buzz con Linq en C#</title><content type='html'>&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;Leyendo algunos de los muchos blogs de programación flotando por ahí, es muy probable toparse con el &lt;a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/"&gt;Test Fizz Buzz&lt;/a&gt;, el que yo ya &lt;a href="http://yelinna.freeoda.com/eam/fizz_buzz.html"&gt;he usado antes&lt;/a&gt; para practicar algunas cosas de programación en C#.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Y por ahí se me ocurrió hacerlo usando Linq. Todo el código es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;using System;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;using System.Linq;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;using System.Collections.Generic;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;namespace Operator&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Program&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] fbz = new int[100];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 1; i &amp;lt;= 100; i++)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fbz[i - 1] = i;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;span style="color: #073763;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #073763;"&gt;&lt;string&gt;string&lt;/string&gt;&lt;/span&gt;&lt;span style="color: #073763;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #073763;"&gt;&lt;string&gt; fizbuz = fbz.Select(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/string&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c=&amp;gt; (c % 3 == 0) &amp;amp; (c % 5 == 0) ? "FizzBuzz" :&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c % 3 == 0) ? "Fizz" :&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (c % 5 == 0) ? "Buzz" : c.ToString() );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (string c in fizbuz)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(c);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;Una cosa interesante del Linq es que tiene algo llamado "Lazy Evaluation" ó "Evaluación perezosa": la ejecución de las instrucciones no se realiza cuando se declara la interfaz IEnumerable "fizbuz", si no cuando se la recorre con el bucle foreach. De esta forma se pueden tener muchas interfaces pertenecientes a&amp;nbsp;&lt;a href="http://www.blogger.com/goog_1992246688"&gt;&lt;/a&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.aspx"&gt;System.Collections&lt;/a&gt; y recién ejecutar sus códigos cuando se las recorre con un foreach.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;Y luego, para cumplir con las condiciones del test, vuelvo a usar el operador ternario "?", el cual me gusta mucho porque marea cuando se lo ve las primeras veces :D :D&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-7679226849793627151?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/7679226849793627151/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=7679226849793627151&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7679226849793627151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7679226849793627151'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/04/haciendo-el-test-fizz-buzz-con-linq-en.html' title='Haciendo el Test Fizz Buzz con Linq en C#'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-7868467083678434070</id><published>2011-04-19T15:12:00.000-07:00</published><updated>2012-01-07T08:52:37.382-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# Code Snippet: Usando el control FontDialog</title><content type='html'>En una aplicación tipo WindowsApplication tengo un FontDialog, y quiero que cuando el usuario hace click en "Aceptar", los valores de este FontDialog se almacenen en un objeto tipo FontStyle, el que luego se utiliza para crear un objeto tipo Font.&lt;br /&gt;&lt;br /&gt;El código es éste: &lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;if (dlgFont.ShowDialog() == DialogResult.OK)&lt;br /&gt;{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&amp;nbsp; // asigno el estilo de fuente&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dlgFont.Font.Bold ? FontStyle.Bold :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dlgFont.Font.Italic ? FontStyle.Italic :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dlgFont.Font.Underline ? FontStyle.Underline :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dlgFont.Font.Strikeout ? FontStyle.Strikeout : FontStyle.Regular;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFont =&amp;nbsp;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new Font(dlgFont.Font.Name, dlgFont.Font.Size, myFontStyle);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Aquí hago uso del operador ternario '?' para acortar la expresión donde se asigna el tipo de la fuente. Si no uso este operador, la expresión sería:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;if (dlgFont.Font.Bold)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = FontStyle.Bold;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dlgFont.Font.Italic)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = FontStyle.Italic;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dlgFont.Font.Underline)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = FontStyle.Underline;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dlgFont.Font.Strikeout)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = FontStyle.Strikeout;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFontStyle = FontStyle.Regular;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-7868467083678434070?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/7868467083678434070/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=7868467083678434070&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7868467083678434070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/7868467083678434070'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/04/c-code-snippet-usando-el-control.html' title='C# Code Snippet: Usando el control FontDialog'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-117836796940965077</id><published>2011-03-24T10:03:00.000-07:00</published><updated>2012-01-07T08:52:49.724-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>VB6: Rutina para Eliminar FIlas Repetidas en un Hierarchical FlexGrid</title><content type='html'>&lt;div style="color: black;"&gt;Esta rutina está pensada para un Hierarchical FlexGrid cuya primera fila (la que tiene el índice 0) contiene los nombres de las columnas, por ello procesa a partir de la fila con índice 1:&lt;/div&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Sub eliminar_Repetidos()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim estaFila, unaFila As String&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim i, j, m, n As Integer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;estaFila = vbNullString&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;unaFila = vbNullString&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;With HierarchicalFlexGrid&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = 1&lt;/span&gt;&lt;span style="color: #274e13;"&gt; ' Apunta a la primera Fila&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = .Rows - 1&lt;/span&gt;&lt;span style="color: #274e13;"&gt; ' Cantidad de filas del HierarchicalFlexGrid&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do Until m &amp;gt; n&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; estaFila = vbNullString&lt;/span&gt;&amp;nbsp; &lt;span style="color: #274e13;"&gt;'cadena con la Fila Actual&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 To .Cols - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; estaFila = estaFila + .TextMatrix(m, i)&lt;/span&gt; &lt;span style="color: #274e13;"&gt;' Relleno la cadena con los datos de toda la fila&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do Until j &amp;gt; n&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unaFila = vbNullString&lt;/span&gt; &lt;span style="color: #274e13;"&gt;' Fila a comparar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 To .Cols - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unaFila = unaFila + .TextMatrix(j, i)&lt;/span&gt;&lt;span style="color: #274e13;"&gt; ' la relleno con los datos de toda la fila&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If estaFila = unaFila And j &amp;lt;&amp;gt; m Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RemoveItem (j)&lt;/span&gt; &lt;span style="color: #274e13;"&gt;' Si son iguales remuevo unaFila solamente&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = n - 1&lt;span style="color: #274e13;"&gt; ' tamaño actual del HierarchicalFlexgrid&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #274e13;"&gt;, al remover disminuye en uno&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j = j + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = m + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #274e13;"&gt; 'Chequeo si la última y la penúltima fila son iguales, porque no se eliminan si lo son&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For i = 0 To .Cols - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; estaFila = estaFila + .TextMatrix(.Rows - 1, i)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unaFila = unaFila + .TextMatrix(.Rows - 2, i)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If unaFila = estaFila Then .RemoveItem (.Rows - 2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;End With&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;La rutina hace lo siguiente: cojo la primera fila y, en un bucle, la comparo con todas las demás y voy eliminando las que son iguales a la primera fila. Al terminar paso a la segunda fila y vuelvo a comparar y eliminar si son iguales. Esto se repite hasta llegar al final del Hierarchical FlexGrid.&lt;/div&gt;&lt;div style="color: black;"&gt;Este algoritmo es más eficiente que, en dos bucles anidados, marcar las filas repetidas para eliminarlas después.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-117836796940965077?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/117836796940965077/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=117836796940965077&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/117836796940965077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/117836796940965077'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/03/vb6-rutina-para-eliminar-filas.html' title='VB6: Rutina para Eliminar FIlas Repetidas en un Hierarchical FlexGrid'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-885472775211018368</id><published>2011-03-11T10:21:00.000-08:00</published><updated>2012-01-07T08:56:21.971-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6 ADO'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Obtener los nombres de las tablas y los nombres de sus esquemas de una BD en SQL Server2005 desde VB6</title><content type='html'>Un día intentaba conectarme a &lt;a href="http://sqlserversamples.codeplex.com/"&gt;AdventureWorks sample BD&lt;/a&gt; desde una app en Visual Basic 6 aplicando &lt;a href="http://programacionamartillazos.blogspot.com/2010/11/como-listar-las-vistas-de-una-base-de.html"&gt;el código de esta entrada&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Declaraba un recordset como sigue:&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))&lt;/span&gt;&lt;br /&gt;para poder listar todas sus tablas, usando un bucle, y luego poder obtener información de cada una de ellas.&lt;br /&gt;Mi problema era que al ejecutar un query en SQL:&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim s as String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;s="Select * from " &amp;amp; rs!Table_Name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;' Hacer muchas muchas cosas con la variable "s"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt;rs.MoveNext &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Me botaba error, ya que sólo tenía el nombre de la tabla. Para que funcionara, el query dentro de la variable "s" necessitaba también el nombre del esquema (Schema Name) y contruirlo todo de la siguiente forma:&lt;br /&gt;Select * from Schema_Name.Tabla&lt;br /&gt;&lt;br /&gt;Luego de mucho rebuscar en Google, hallé esta web&lt;br /&gt;&lt;a href="http://www.techrepublic.com/article/much-ado-about-field-properties/1045310"&gt;http://www.techrepublic.com/article/much-ado-about-field-properties/1045310&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Donde explican lo que hace OpenSchema. Para mi caso, utilizo el SchemaID "AdSchemaTables", el cual incluye un filtro llamado "TABLE_SCHEMA".&lt;br /&gt;&lt;br /&gt;Finalmente mi query queda:&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim s as String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;s="Select * from " &amp;amp; rs!Table_Schema &amp;amp; "." &amp;amp; rs!Table_Name&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;' Hacer muchas muchas cosas con la variable "s"&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs.MoveNext &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;Update!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;Cómo saber si una tabla tiene un nombre de esquema asignado:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt; Basta añadir este código en el bucle ("miTabla" es una variable tipo String):&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;miTabla = vbNullString&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;miTabla = rs!TABLE_SCHEMA&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;If miTabla &amp;lt;&amp;gt; vbNullString Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; miTabla = rs!TABLE_SCHEMA &amp;amp; "." &amp;amp; rs!TABLE_NAME&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; miTabla = rs!TABLE_NAME&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-885472775211018368?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/885472775211018368/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=885472775211018368&amp;isPopup=true' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/885472775211018368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/885472775211018368'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/03/obtener-los-nombres-de-las-tablas-y-los.html' title='Obtener los nombres de las tablas y los nombres de sus esquemas de una BD en SQL Server2005 desde VB6'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-6962299665554552802</id><published>2011-02-17T10:12:00.000-08:00</published><updated>2011-02-17T11:27:58.967-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# .Net Microsoft'/><title type='text'>C# y Ms Access: Excepciòn del tipo "Insert Into Syntaxis Error"</title><content type='html'>Sucedió un día que tenía que insertar unos datitos a una base de datos en Access 2003 usando C#. La base de datos tiene una sola tabla (la llamaré "miTabla") con tres campos: "No", "un_ID" y "Tag" de tipos numérico, texto y texto, respectivamente.&lt;br /&gt;&lt;br /&gt;Mi código era:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;private string AddDato(string No, string ID, string tag, ref OleDbConnection cnn)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbCommand cmd = new OleDbCommand(&lt;/div&gt;&lt;div style="color: #073763;"&gt;"INSERT INTO miTabla (No, un_ID, Tag) VALUES(@Num, @uID, @nTag)", cnn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@Num", Convert.ToInt32(No));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@uID", ID);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@nTag", tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnn.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.ExecuteNonQuery();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "Se añadieron los datos";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ex.Message;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnn.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y a pesar de estar todo bien, siempre me tiraba una excepción que decía "Syntaxis Error en Insert Into", o cualquier cosa parecida, en la línea cmd.ExecuteNonQuery().&lt;br /&gt;&lt;br /&gt;Después de horas depurando y leyendo foros, encontré por ahí un tip clave:&lt;br /&gt;&lt;span style="color: #660000;"&gt;A las bases de datos en Access no les gustan los campos con nombres como "Date", "login" o "Password".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Entonces el error no estaba en mi Insert Into, si no, posiblemente, en los nombres de mis campos.&lt;br /&gt;Hice una pequeña modificación al código (no a la base de datos) y el problema se resolvió maravillosamente:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;private string AddDato(string No, string ID, string tag, ref OleDbConnection cnn)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OleDbCommand cmd = new OleDbCommand(&lt;/div&gt;&lt;div style="color: #073763;"&gt;"INSERT INTO miTabla ([No], [un_ID], [Tag]) VALUES(@Num, @uID, @nTag)", cnn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@Num", Convert.ToInt32(No));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@uID", ID);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@nTag", tag);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnn.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.ExecuteNonQuery();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "Se añadieron los datos";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ex.Message;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnn.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Dejo como tarea hallar el cambio que hice :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-6962299665554552802?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/6962299665554552802/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=6962299665554552802&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6962299665554552802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6962299665554552802'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/02/c-y-ms-access-excepcion-del-tipo-insert.html' title='C# y Ms Access: Excepciòn del tipo &quot;Insert Into Syntaxis Error&quot;'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-871746688448984550</id><published>2011-01-18T12:56:00.000-08:00</published><updated>2012-01-07T08:51:52.266-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# usando LastIndexOf y Substring para separar el nombre de un archivo de la ruta donde está almacenado</title><content type='html'>&lt;h3 class="post-title entry-title" style="font-family: inherit; font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://programacionamartillazos.blogspot.com/2010/12/vb6-usando-instrrev-para-separa-el.html"&gt;Ya antes hice lo mismo en VB6&lt;/a&gt;. Ahora toca hacerlo desde C#.&lt;/span&gt;&lt;/h3&gt;&lt;h3 class="post-title entry-title" style="color: black; font-family: inherit; font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;Imaginemos que tengo este string que contiene la ruta a un archivo:&lt;/span&gt;  &lt;/h3&gt;&lt;div style="color: #073763; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;unaRuta = "C:\unaCarpeta\otraCarpeta\unArchivo.txt"&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;br /&gt;Y quisiera separalo en dos strings, con la ruta del archivo y el nombre del archivo por separado:&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;div style="color: #073763; font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;miRuta =&amp;nbsp; "C:\unaCarpeta\otraCarpeta\"&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;span style="color: #073763;"&gt;miArchivo = "unArchivo.txt"&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;El código es el siguiente:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #0c343d;"&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;int n = unaRuta.LastIndexOf(@"\");&amp;nbsp; &lt;span style="color: #274e13;"&gt;// la @ es para que considere el "\" como caracter&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #0c343d;"&gt;&lt;span style="font-family: inherit; font-size: small;"&gt; &lt;span style="color: #274e13;"&gt;// se extrae la subcadena desde la primera letra hasta n+1&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #0c343d;"&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;string miRuta = unaRuta.Substring(0, n + 1);&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #0c343d; font-family: inherit; font-size: small;"&gt;&lt;span style="color: #274e13;"&gt;// se extrae la subcadena desde la letra n+1 hasta el final&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #0c343d;"&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;string miArchivo = unaRuta.Substring(n + 1);&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-871746688448984550?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/871746688448984550/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=871746688448984550&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/871746688448984550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/871746688448984550'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2011/01/c-usando-lastindexof-y-substring-para.html' title='C# usando LastIndexOf y Substring para separar el nombre de un archivo de la ruta donde está almacenado'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-6978838710859001093</id><published>2010-12-28T07:50:00.000-08:00</published><updated>2012-01-07T08:52:12.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Código fuente en VB6 para llenar un TreeView con las tablas, y otro con las vistas, de una Base de Datos en SQL Server 2005</title><content type='html'>El código fuente es muy parecido &lt;a href="http://programacionamartillazos.blogspot.com/2010/10/codigo-fuente-en-vb-para-llenar-un.html" style="color: blue;"&gt;para hacer lo mismo en Oracle 10g&amp;nbsp;&lt;/a&gt;&lt;br /&gt;De todos modos voy a poner el código fuente completo con la explicación: &lt;br /&gt;&lt;br /&gt;En TreeView1 irán las tablas y en TreeView2 irán las vistas. "db" es un  objeto tipo Connection, "nodx" es un objeto tipo Node, "rs" y "rs1" son  Recordset, "count" es una variable tipo Integer. El estilo (propiedad  Style) de los TreeViews es el número 7. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;db.Open miConnectionString &lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: #073763;"&gt;TreeView1.Nodes.Clear&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;count = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set nodx = TreeView1.Nodes.Add(, , "Root", "El título que le quiero poner")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set nodx = TreeView1.Nodes.Add(1, tvwChild, "a" &amp;amp; str(count), rs!TABLE_NAME)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.MoveNext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs.Close&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;TreeView2.Nodes.Clear&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs1 = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "VIEW"))&amp;nbsp;&lt;span style="color: #274e13;"&gt; ' &amp;lt;&amp;lt;== Acá&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;count = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set nodx = TreeView2.Nodes.Add(, , "Root", "El título que le quiero poner")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs1.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set nodx = TreeView2.Nodes.Add(1, tvwChild, "a" &amp;amp; str(count), rs1!TABLE_NAME)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs1.MoveNext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs1.Close&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Si se intenta abrir el recordset rs1 con db.OpenSchema(adSchemaViews) nos dará error, y si se le coloca un On Error Resume Next, el bucle que recorre rs1 será infinito, pues como rs1 nunca se abrió, su propiedad EOF&lt;/span&gt; nunca será verdadera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-6978838710859001093?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/6978838710859001093/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=6978838710859001093&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6978838710859001093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6978838710859001093'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/12/codigo-fuente-en-vb6-para-llenar-un.html' title='Código fuente en VB6 para llenar un TreeView con las tablas, y otro con las vistas, de una Base de Datos en SQL Server 2005'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-679009558489665074</id><published>2010-12-06T06:57:00.000-08:00</published><updated>2012-01-07T08:51:33.427-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>VB6: usando InStrRev para separar el nombre de un archivo de la ruta donde está almacenado</title><content type='html'>Imaginemos que tengo este string que contiene la ruta a una rchivo:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;unaRuta = "C:\unaCarpeta\otraCarpeta\unArchivo.txt"&lt;/div&gt;&lt;br /&gt;Y quisiera separalo en dos strings, con la ruta del archivo y el nombre del archivo por separado:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;miRuta =&amp;nbsp; "C:\unaCarpeta\otraCarpeta\"&lt;/div&gt;&lt;span style="color: #073763;"&gt;miArchivo = "unArchivo.txt" &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para hacerlo uso la función de VB6 InStrRev, que busca una cadena dentro de otra pero enpezando desde el final.&lt;br /&gt;El código completo es:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;Dim miRuta as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim miArchivo as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim unaRuta as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim unaLen as Long&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;unaRuta = "C:\unaCarpeta\otraCarpeta\unArchivo.txt"&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;miRuta = Left$(unaRuta, InStrRev(unaRuta, "\"))&lt;br /&gt;&lt;br /&gt;unaLen = Len(unaRuta) - InStrRev(unaRuta, "\")&lt;br /&gt;miArchivo = Right$(unaRuta, unaLen)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Con este código chiquito ya tenemos separados el nombre de un archivo de la ruta donde está almacenado :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-679009558489665074?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/679009558489665074/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=679009558489665074&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/679009558489665074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/679009558489665074'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/12/vb6-usando-instrrev-para-separa-el.html' title='VB6: usando InStrRev para separar el nombre de un archivo de la ruta donde está almacenado'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-3451210538292307327</id><published>2010-11-17T09:54:00.000-08:00</published><updated>2012-01-07T08:53:40.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6 ADO'/><title type='text'>Cómo listar las vistas de una base de datos mediante un nombre DSN en VB6</title><content type='html'>Hice esta pregunta originalmente en &lt;a href="http://stackoverflow.com/questions/4015434/how-can-i-list-the-views-of-a-database-with-a-dsn-connection"&gt;StackOverflow&lt;/a&gt;. Acá la traducción al español, con una mejor explicación:&lt;br /&gt;&lt;br /&gt;Este es el código original:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim db as Connection&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim rs as Recordset&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Dim rs1 as Recordset&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;db.Open "DSN=Oracle 10g; Uid=myUser; Pwd=myPassword;" &lt;span style="color: #274e13;"&gt;'También probé SQLServer2005&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;'Me conecto con éxito&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;' Todo bien aquí. Puedo listar las tablas de la base de datos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs.EOF&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List.AddItem rs!TABLE_NAME&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.MoveNext &lt;/div&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs1 = db.OpenSchema(adSchemaViews)&amp;nbsp; &lt;span style="color: #274e13;"&gt;'Esta es la línea que me da problemas&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: black;"&gt;Aunque los motores de las bases de datos tienen habilitadas las opciones de aceptar conexiones remotas y locales, y a pesar de que la autenticación del usuario y el password se realiza con éxito, la línea problemática da el error "El Proveedor no puede ejecutar la operación requerida".&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: black;"&gt;Cuando, en lugar de usar un nombre DSN, utilizo una cadena de conexión, el código funciona perfectamente.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: black;"&gt;La solución la hallé luego de probar un poco con el VB6. Desde una conexión con un nombre DSN tanto vistas y tablas, son consideradas como tablas. El código que funciona es éste:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt;Set rs1 = db.OpenSchema(adSchemaTables)&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs1.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If rs1("TABLE_TYPE").Value = "VIEW" Then&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List.AddItem rs1!TABLE_NAME&lt;/span&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs1.MoveNext &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #274e13;"&gt;&lt;span style="color: #073763;"&gt;Loop &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-3451210538292307327?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/3451210538292307327/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=3451210538292307327&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/3451210538292307327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/3451210538292307327'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/11/como-listar-las-vistas-de-una-base-de.html' title='Cómo listar las vistas de una base de datos mediante un nombre DSN en VB6'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-5622523970746841964</id><published>2010-10-23T09:36:00.000-07:00</published><updated>2012-01-07T08:51:11.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Código fuente en VB6 para llenar un TreeView con las tablas, y otro con las vistas, de una Base de Datos en Oracle 10g</title><content type='html'>En TreeView1 irán las tablas y en TreeView2 irán las vistas. "db" es un objeto tipo Connection, "nodx" es un objeto tipo Node, "rs" y "rs1" son Recordset, "count" es una variable tipo Integer. El estilo (propiedad Style) de los TreeViews es el número 7. &lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;db.Open miConnectionString &lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: #073763;"&gt;TreeView1.Nodes.Clear&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs = db.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;count = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set nodx = TreeView1.Nodes.Add(, , "Root", "El título que le quiero poner")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set nodx = TreeView1.Nodes.Add(1, tvwChild, "a" &amp;amp; str(count), rs!TABLE_NAME)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs.MoveNext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs.Close&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;TreeView2.Nodes.Clear&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set rs1 = db.OpenSchema(adSchemaViews)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;count = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Set nodx = TreeView2.Nodes.Add(, , "Root", "El título que le quiero poner")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Do Until rs1.EOF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set nodx = TreeView2.Nodes.Add(1, tvwChild, "a" &amp;amp; str(count), rs1!TABLE_NAME)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rs1.MoveNext&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;rs1.Close&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-5622523970746841964?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/5622523970746841964/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=5622523970746841964&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5622523970746841964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5622523970746841964'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/10/codigo-fuente-en-vb-para-llenar-un.html' title='Código fuente en VB6 para llenar un TreeView con las tablas, y otro con las vistas, de una Base de Datos en Oracle 10g'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-3408204663183002587</id><published>2010-09-14T09:13:00.000-07:00</published><updated>2012-01-07T08:49:57.125-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>Cómo pasar parámetros desde una App en VB6 a una App escrita en C#</title><content type='html'>Lo bueno del C# es que todsa las aplicaciones escritas en este lenguaje arrancan desde un método Main con la siguiente forma:&lt;br /&gt;&lt;span style="color: #073763;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El array "args" del tipo string recibe todos los parámetros que le pasamos al ejecutable. Si es una aplicación de consola llamada "miExe" se escribiría:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oeyRV6aCFxM/TI-ZlAxc4gI/AAAAAAAAALM/LJ9skrPhgss/s1600/consola.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_oeyRV6aCFxM/TI-ZlAxc4gI/AAAAAAAAALM/LJ9skrPhgss/s320/consola.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Donde "1", "2" y "3" son strings y corresponden a las variables args[0], args[1] y args[2] en la aplicación en C# respectivamente. Si se desea operar con ellas, se deberá convertir de string al tipo numérico deseado, pues "Main" siempre recibe los parámetros como string. Los elementos del array args se emplean como cualquier variable de .Net tipo string.&lt;br /&gt;&lt;br /&gt;Si queremos llamar a miExe y pasarle parámetros desde una aplicación en VB6, el código fuente sera:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;Dim LInstr as Long&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim RutaExe as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim sExeName as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;Dim arg1 as String, arg2 as String, arg3 as String&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;... coding...&amp;nbsp; coding... coding.....&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;/div&gt;&lt;span style="color: #073763;"&gt;sExeName = RutaExe &amp;amp; "\miExe.exe" &amp;amp;_&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chr$(32) &amp;amp; Chr$(34) &amp;amp; arg0 &amp;amp; Chr$(32) &amp;amp; Chr$(34) &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chr$(32) &amp;amp; Chr$(34) &amp;amp; arg1 &amp;amp; Chr$(32) &amp;amp; Chr$(34) &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chr$(32) &amp;amp; Chr$(34) &amp;amp; arg2 &amp;amp; Chr$(34)&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13;"&gt;' Se ejecuta miExe&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;LInstr = Shell(sExeName, vbMinimizedNoFocus)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #274e13;"&gt; ' el segundo parámetro es opcional&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;El número 32 equivale al código Ascii del espacio en blanco, 34 es el código Ascii de las comillas. La aplicación en C# separará los argumentos de la forma correcta, y los asignará a los elementos del array args, sólo si se los pasamos con espacios y comillas en el orden correcto.&lt;/span&gt; La aplicación en C# usa los espacios y las comillas para saber qué partes del string sExeName son el nombre del ejecutable y cada uno de los argumentos que está recibiendo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-3408204663183002587?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/3408204663183002587/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=3408204663183002587&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/3408204663183002587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/3408204663183002587'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/09/como-pasar-parametros-desde-una-app-en.html' title='Cómo pasar parámetros desde una App en VB6 a una App escrita en C#'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oeyRV6aCFxM/TI-ZlAxc4gI/AAAAAAAAALM/LJ9skrPhgss/s72-c/consola.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4096961580827207506</id><published>2010-08-23T09:57:00.000-07:00</published><updated>2012-01-07T08:50:28.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Cómo averiguar los tipos de datos almacenados en cada campo de una base de datos</title><content type='html'>Este método ha sido probado en bases de datos de Oracle 10g, SQL Server2005 y Access 2003. (el código está en VB6):&lt;br /&gt;&lt;div style="color: #38761d;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: #38761d;"&gt;' rs es el recorset ya enlazado a una base de datos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Select Case rs.Fields("un_campo").Type&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Case adBigInt, adBinary, adDecimal, adDouble, adNumeric, adInteger, adLongVarBinary, adSingle, _&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;adSmallInt, adTinyInt, adUnsignedBigInt, adUnsignedInt, adUnsignedSmallInt, adUnsignedTinyInt, _&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;adVarNumeric, adVarBinary, adBoolean&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #38761d;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; ' Hacer cosas con datos de tipo numérico&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Case adBSTR, adChar, adLongVarChar, adLongVarWChar, adVarChar, adVarWChar, adWChar, _&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;adVariant&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-color: white; color: #38761d;"&gt;' Hacer cosas con datos de tipo texto o caracteres&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Case adDate, adDBDate, adDBTime, adDBTimeStamp&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If IsDate(&lt;i&gt;lo que hay en el campo&lt;/i&gt;) Then&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&lt;/span&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="background-color: white; color: #38761d;"&gt;' Esto funciona sólo para Access y SQL Server&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="background-color: white; color: #38761d;"&gt;' Para Oracle se debe usar la función TO_DATE(&lt;i&gt;lo que hay en el campo&lt;/i&gt;, formato de fecha)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: white; color: #38761d;"&gt;' el formato de fecha es DD/MM/YY por defecto.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;Case Else&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #38761d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #38761d;"&gt;' El formato de imágenes para estas tres bases de datos es en VB6 el tipo AdLongVarBinary,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' el cual tiene el valor de 205. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: blue;"&gt;End Select&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4096961580827207506?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4096961580827207506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4096961580827207506&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4096961580827207506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4096961580827207506'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/08/como-averiguar-los-tipos-de-datos.html' title='Cómo averiguar los tipos de datos almacenados en cada campo de una base de datos'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-1803970539578272015</id><published>2010-07-02T11:23:00.000-07:00</published><updated>2010-07-02T11:23:34.709-07:00</updated><title type='text'>Reutilización de componentes en desarrollo de software</title><content type='html'>Una respuesta que di cuando alguien me preguntó sobre la reutilización de componentes en desarrollo de software:&lt;br /&gt;&lt;br /&gt;Las librerías de la plataforma .Net agrupan clases que sirven para hacer todo: mandar y recibir datos de la consola, controlar el puerto serial, los trabajos de impresión, contienen controles tales como formularios para crear ventanas, botones, cajas de texto, etc. &lt;br /&gt;&lt;br /&gt;.Net se basa en la reutilización de pedazos de software (las librerías) y la POO. En .Net todo son clases (las librerías, también llamadas Namespaces agrupan a las clases) y objetos que referencian a estas clases y pueden "heredar" o hacer uso de sus métodos, dentro de éstos están los algoritmos. &lt;br /&gt;&lt;br /&gt;En el generador de laberintos se usan mucho las clases y objetos que proporciona el namespace System.Drawings. Yo no he creado ningún componente, todo el laberinto se crea usando este namespace. El objeto de tipo Graphics hereda los métodos necesarios para dibujar el laberinto.&lt;br /&gt;&lt;br /&gt;Una explicación más detallada de cómo lo programé está en mi web:&lt;br /&gt;&lt;a href="http://yelinna.comoj.com/eam/maze_generator.html" rel="nofollow" target="_blank"&gt;http://yelinna.comoj.com/eam/maze_generator.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yelinna.comoj.com/eam/maze_generator_hex.html" rel="nofollow" target="_blank"&gt;http://yelinna.comoj.com/eam/maze_generator_hex.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El equivalente de .Net para Java es la JVM o la máquina virtual. Para el Visual C++ existe además el MFC (Microsoft Foundation Clases) que hacen un poco más fácil trabajar directamente con las funciones mismas del sistema operativo (las Apis), que son funciones que se pueden usar para hacer las mismas cosas que con el .Net o la JVM, pero dependen mucho del tipo y versión del sistema operativo (los virus para Windows son básicamente muchas llamadas a las Apis, con ellas se puede ver la libreta de direcciones de Outlook, controlar el envío por red, copair en carpetas específicas del disco duro, ver el usuario actual del sistema, etc).&lt;br /&gt;Como verás, las apis son otro componente reutilizable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-1803970539578272015?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/1803970539578272015/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=1803970539578272015&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1803970539578272015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1803970539578272015'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/07/reutilizacion-de-componentes-en.html' title='Reutilización de componentes en desarrollo de software'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4022850025830510498</id><published>2010-05-21T09:57:00.000-07:00</published><updated>2012-01-07T08:53:28.989-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Retornando un valor nulo en lugar de un mapa de bits</title><content type='html'>Tengo un método, dentro de una clase cualquiera programada en C#, que procesa un par de mapas de bits y además genera un tercer mapa de bits que es el valor de retorno:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;public Bitmap Foo (string r1, string r2)&lt;/div&gt;&lt;div style="color: #073763;"&gt;{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap bmap = new Bitmap(r1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap bmap2 = new Bitmap(r2);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap bmapR = new Bitmap(bmap.Width, bmap.Height, bmap.PixelFormat); &lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hacer cosas, muchas muchas cosas con bmap y bmap2, y la imagen resultante va a bmapR&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap2.Dispose();&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return bmapR;&lt;/div&gt;&lt;div style="color: #073763;"&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;El problema es que un mapa de bits consume una cantidad considerable de memoria, además todas esas muchas cosas sólo quiero hacerlas si bmap y bmap2 tienen las mismas dimensiones, además que bmapR sólo se crearía para este caso. Se podría programar un método intermedio que llamaría al método Foo sólo si se cumple la condición, pero eso implicaría crear bmap y bmap2 en este método.&lt;br /&gt;&lt;br /&gt;Esta manera de solucionarlo ya no me estaba convenciendo.&lt;br /&gt;&lt;br /&gt;Entonces recordé que en .Net todo es un objeto, y como tal todo puede tener un valor nulo. ¿Y si retorno un valor nulo (null) en lugar de un bitmap si la condición de las dimensiones iguales no se cumple? Luego podría evaluar si se devolvío un valor nulo o no.&lt;br /&gt;&lt;br /&gt;Mi método modificado resultó ser:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;public Bitmap Foo (string r1, string r2)&lt;/div&gt;&lt;div style="color: #073763;"&gt;{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap bmap = new Bitmap(r1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap bmap2 = new Bitmap(r2);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bmap.Width != bmap2.Width || bmap.Height != bmap2.Height)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap.Dispose();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap2.Dispose();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Bitmap bmapR = new Bitmap(bmap.Width, bmap.Height, bmap.PixelFormat);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // hacer cosas, muchas muchas cosas con bmap y bmap2, y la imagen resultante va a bmapR&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bmap2.Dispose();&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return bmapR;&lt;/div&gt;&lt;div style="color: #073763;"&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Y la forma de llamarla es:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;private void Metodo()&amp;nbsp;&lt;/div&gt;&lt;div style="color: #073763;"&gt;{&lt;/div&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnaClase M = new UnaClase();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap bt = M.Foo(ruta1, ruta2);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bt == null)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("Las imágenes deben tener las mismas dimensiones");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pictureBox.Image = bt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;nbsp; bt.Dispose();&amp;nbsp; Esta lìnea es mejor omitirla pues da problemas si está en el evento Click de un botón&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #073763;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;¡Funciona! Y me evito crear tres mapas de bits cuando no los necesito.&lt;br /&gt;&lt;br /&gt;:D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4022850025830510498?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4022850025830510498/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4022850025830510498&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4022850025830510498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4022850025830510498'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/05/retornando-un-valor-nulo-en-lugar-de-un.html' title='Retornando un valor nulo en lugar de un mapa de bits'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4173543118540139529</id><published>2010-05-14T14:10:00.000-07:00</published><updated>2012-01-07T08:55:12.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Fixed o no Fixed</title><content type='html'>Tengo el siguiente código:&lt;br /&gt;&lt;div style="color: #073763;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #073763;"&gt;using System.Drawing;&lt;/div&gt;&lt;div style="color: #073763;"&gt;namespace SomeNamespace { &lt;/div&gt;&lt;div style="color: #073763;"&gt;unsafe class SomeClass{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void One() {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point[] esq = new Point[3];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point* p = &amp;amp;esq[0];&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two(p);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Two(Point *p) {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Write your add here :) &lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;&lt;div style="color: #073763;"&gt;}&lt;/div&gt;&lt;br /&gt;Y pareciera que no hubiera error, pues he declarado la clase como "insegura" y estoy pasando un puntero a un dato tipo "Point" como parámetro a otra función. Y aún así me sale este error:&lt;br /&gt;&lt;br /&gt;"Error&amp;nbsp; 1 Sólo se puede adquirir la dirección de una expresión de tipo unfixed de un inicializador de instrucción fixed"&lt;br /&gt;&lt;br /&gt;C# no deja usar punteros no "fijos" (es decir, cuyo valor, o dirección a la que apuntan, se puedan modificar). Esto es debido al colector de basura, que está siempre monitoreando la memoria, desasignando espacios de memoria, borrando objetos o moviéndolos a otras ubicaciones. Un puntero "fixed" evita que su valor apuntado sea movido a otra ubicación en la memoria, y así poder asegurarse que su valor no será reemplazado por otro sin que nos demos cuenta.&lt;br /&gt;&lt;br /&gt;El código "fixed" sería:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;using System.Drawing;&lt;/div&gt;&lt;div style="color: #073763;"&gt;namespace SomeNamespace { &lt;/div&gt;&lt;div style="color: #073763;"&gt;unsafe class SomeClass{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void One() {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point[] esq = new Point[3];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; fixed( Point* p = &amp;amp;esq[0]) {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two(p);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Two(Point *p) {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Write your add here :) &lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;&lt;div style="color: #073763;"&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Según la documentación de Microsoft, es posible evitar usar "fixed" si se separa espacio en la pila para nuestros punteros. Esto se hacce con "stackalloc". La memoria se libera cuando se sale del método donde se separó el espacio en la pila:&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #073763;"&gt;using System.Drawing;&lt;/div&gt;&lt;div style="color: #073763;"&gt;namespace SomeNamespace { &lt;/div&gt;&lt;div style="color: #073763;"&gt;unsafe class SomeClass{&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void One() {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point[] esq = stackalloc Point[3];&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Two(&amp;amp;esq[0]);&amp;nbsp;&amp;nbsp;&amp;nbsp; // también es válido: Two(esq);&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Two(Point *p) {&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Write your add here :)&amp;nbsp; &lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style="color: #073763;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;&lt;div style="color: #073763;"&gt;}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4173543118540139529?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4173543118540139529/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4173543118540139529&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4173543118540139529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4173543118540139529'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/05/fixed-o-no-fixed.html' title='Fixed o no Fixed'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-331333769487956786</id><published>2010-03-29T11:43:00.000-07:00</published><updated>2012-01-07T08:55:02.129-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>Un dato muy útil para VB6</title><content type='html'>Por qué no se debe poner SetFocus en el evento Load de un formulario:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devx.com/vb2themax/Tip/18513"&gt;Don't use SetFocus on Invisible Controls&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esto se debe a que el Visual basic llama al método SetFocus antes de que los controles del formulario se hayan cargado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-331333769487956786?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/331333769487956786/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=331333769487956786&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/331333769487956786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/331333769487956786'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2010/03/un-dato-muy-util-para-vb6.html' title='Un dato muy útil para VB6'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-6706554557135911330</id><published>2009-11-20T10:13:00.000-08:00</published><updated>2012-01-07T08:54:42.134-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>Cómo saber si un PictureBox tiene una imagen cargada en VB6 y C#</title><content type='html'>En VB6:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;If PictureBox1.Picture = 0 Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;'PictureBox sin imagen&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;Else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;'PictureBox con imagen&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;en C#:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;if (pictureBox1.Image == null)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;{&lt;span style="color: #38761d;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #38761d;"&gt;//picturebox sin imagen&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #38761d;"&gt;&amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: #38761d;"&gt;//picturebox con imagen&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-6706554557135911330?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/6706554557135911330/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=6706554557135911330&amp;isPopup=true' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6706554557135911330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/6706554557135911330'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/11/como-saber-si-un-picturebox-tiene-una.html' title='Cómo saber si un PictureBox tiene una imagen cargada en VB6 y C#'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-8928291231473035561</id><published>2009-10-12T11:34:00.000-07:00</published><updated>2012-01-07T08:54:25.982-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB6'/><title type='text'>ListBox y ListView para Visual basic 6, algunos detalles.</title><content type='html'>Índices de los elementos de un ListBox: Va desde 0 hasta ListBox.ListCount-1.&lt;br /&gt;Índices de los elementos de un ListView: Va desde 1 hasta ListView.ListItems.count&lt;br /&gt;&lt;br /&gt;Para capturar el texto del elemento seleccionado en un ListBox se llama a su propiedad "Text":&lt;span style="color: #073763;"&gt; &lt;span style="color: blue;"&gt;ListBox.Text&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El equivalente para un ListView:&lt;br /&gt;&lt;div style="color: blue;"&gt;ListView.ListItems(ListView.SelectedItem.Index).Text&lt;/div&gt;&lt;br /&gt;Lo que va entre paréntesis es el índice del elemento del que queremos saber el texto. En este caso es el ídnice del elemento seleccionado.&lt;br /&gt;&lt;br /&gt;Para copiar en un ListView los elementos de un ListBox (y además se muestra cómo recorrerlos):&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;For i = 0 To ListBox.ListCount - 1&lt;/div&gt;&lt;div style="color: blue;"&gt;ListView.ListItems.Add , , ListBox.List(i)&lt;/div&gt;&lt;div style="color: blue;"&gt;Next&lt;/div&gt;&lt;br /&gt;El ListView trabaja con dos imageList si se desea poner íconos grandes y pequeños a sus elementos. Para el ejemplo no se asigna ningún ícono, por eso hay parámetros que no se usan en la propiedad ListItems.Add (donde están las comas que van seguidas).&lt;br /&gt;&lt;br /&gt;Para borrar todos los elementos de un ListBox y un ListView se usa la propiedad Clear:&lt;br /&gt;&lt;div style="color: blue;"&gt;ListBox.Clear&lt;/div&gt;&lt;div style="color: blue;"&gt;ListView.Clear&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.elguille.info/vb/ejemplos/listview.htm"&gt;Cómo Usar el Control ListView en la página del Guille&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-8928291231473035561?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/8928291231473035561/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=8928291231473035561&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/8928291231473035561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/8928291231473035561'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/10/listbox-y-listview-para-visual-basic-6.html' title='ListBox y ListView para Visual basic 6, algunos detalles.'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-4312183019577680034</id><published>2009-09-09T20:36:00.000-07:00</published><updated>2009-10-26T11:11:47.756-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Conversión de rutas en formato URI a formato del sistema operativo.</title><content type='html'>&lt;span style="font-family: Arial,sans-serif;"&gt;Ya he hablado de este problema en &lt;/span&gt;&lt;a href="http://toyscaos.tripod.com/hist_csharp.html"&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;http://toyscaos.tripod.com/hist_csharp.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;La clase "Process" no tiene problemas con el &lt;/span&gt;&lt;a href="http://es.wikipedia.org/wiki/Uniform_Resource_Identifier"&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;formato URI&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;, pero hay otros casos en que es necesario convertir este tipo de rutas a archivos en sus equivalentes "normales" (como al cargar una imagen en un picture box).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;En VB se puede usar:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;path = "..\some file"&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;Donde "path" es un dato de tipo string que almacena la ruta relativa a nuestra aplicación, algo necesario cuando queremos cargar algo ubicado en su misma carpeta, cualquiera que esta sea. Pero esta forma de declarar rutas relativas tiende a generar errores. Una manera más segura, es:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;C#:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;path = System.IO.Path.GetDirectoryName&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;path = string.Concat(path, "\\some file");&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;VB:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;path = System.IO.Path.GetDirectoryName_&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;path = String.Concat(path, "\some file")&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;Pero esto nos da las rutas en formato URI. La forma de convertir a formato "normal" (eliminar la cadena "file://" que tiene al comienzo) es:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;C#:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;string path;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           path = System.IO.Path.GetDirectoryName&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           path = string.Concat(path, "\\some file");&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           char[] charBuf = path.ToCharArray();&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           char[] charbuf2 = new char[path.Length - 6];&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           for (int i = 6; i &amp;lt; path.Length; i++)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;               charbuf2[i - 6] = charBuf[i];&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           string ruta = "";&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           ruta = new string(charbuf2);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;VB:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;D&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;im path As String&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;Dim i As Integer&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;Dim charbuf As String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       path = System.IO.Path.GetDirectoryName_&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       path = String.Concat(path, "\some file")&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       charbuf = ""&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       For i = 7 To path.Length&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;           charbuf = String.Concat(charbuf, path.Chars(i - 1))&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       Next&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;       ruta = charbuf&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial,sans-serif;"&gt;Happy Coding!&amp;nbsp;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-4312183019577680034?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/4312183019577680034/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=4312183019577680034&amp;isPopup=true' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4312183019577680034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/4312183019577680034'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/09/conversion-de-rutas-en-formato-uri.html' title='Conversión de rutas en formato URI a formato del sistema operativo.'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-5228865304878461559</id><published>2009-08-23T19:18:00.000-07:00</published><updated>2009-09-09T20:10:44.155-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.Net Visual Studio'/><title type='text'>Limpiar un Combobox (para Visual Studio 2008)</title><content type='html'>Si se tiene un control tipo combobox y se lo desea limpiar (borrar todos los elementos de su lista) en VB6 bastaba hacer:&lt;br /&gt;Combobox.Clear&lt;br /&gt;&lt;br /&gt;En .Net se debe añadir la propiedad "Items":&lt;br /&gt;Combobox.Items.Clear()&lt;br /&gt;&lt;br /&gt;Si el combobox tiene la propiedad "DataSource" enlazada a una base de datos, antes se deberá "romper" el enlace a ésta. Una manera es asignarle un valor nulo:&lt;br /&gt;&lt;br /&gt;En VB:&lt;br /&gt;Combobox.DataSource = Nothing&lt;br /&gt;&lt;br /&gt;En C#:&lt;br /&gt;Combobox.DataSource = null; &lt;br /&gt;&lt;br /&gt;Si no se rompe el enlace, el compilador no nos permitirá limpiarlo. "Nothing" es el valor nulo en VB, "null" es el valor nulo para C#, C++, C o Java. Ambas son palabras reservadas en sus respectivos lenguajes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-5228865304878461559?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/5228865304878461559/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=5228865304878461559&amp;isPopup=true' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5228865304878461559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/5228865304878461559'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/08/limpiar-un-combobox.html' title='Limpiar un Combobox (para Visual Studio 2008)'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-241426039332549808</id><published>2009-08-10T11:06:00.000-07:00</published><updated>2009-09-09T20:11:11.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Matlab'/><title type='text'>Diferencias entre las versiones del Matlab</title><content type='html'>Matlab 6.5: Puede instalarse en Windows 98 SE y en Windows 2000 y en computadoras con 128Mb de RAM y procesador de 500MHz.&lt;br /&gt;&lt;br /&gt;Matlab 7: Puede instalarse en Windows 2000 y en Windows XP y en computadoras con 512Mb de RAM y procesador de un núcleo de 2GHz. No corre en computadoras con procesadores de doble núcleo. Tampoco ejecuta los programas hechos con el Guide de Matlab 6.5 ni con Simulink del Matlab 6.5&lt;br /&gt;&lt;br /&gt;Matlab 7.6: Puede instalarse en Windows XP y Windows Vista. Corre en computadoras con procesador de doble núcleo. Puede ejecutar los programas hechos con el Guide del Matlab 7. No es recomendable correrlo en computadoras con menos de 1Gb de RAM.&lt;br /&gt;&lt;br /&gt;Página oficial de Matlab: &lt;a href="http://www.mathworks.com/"&gt;http://www.mathworks.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alternativas gratuitas:&lt;br /&gt;&lt;a href="http://www.gnu.org/software/octave/"&gt;Octave&lt;/a&gt;&lt;br /&gt;&lt;a href="http://freemat.sourceforge.net/"&gt;FreeMat&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.scilab.org/"&gt;Scilab&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-241426039332549808?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/241426039332549808/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=241426039332549808&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/241426039332549808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/241426039332549808'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/08/diferencias-entre-las-versiones-del.html' title='Diferencias entre las versiones del Matlab'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1158634561357243831.post-1407846926579910434</id><published>2009-08-07T11:30:00.000-07:00</published><updated>2009-09-09T20:11:50.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# .Net Microsoft'/><title type='text'>Microsoft Connect y cómo instanciar una clase en C#</title><content type='html'>Sucedió que necesitaba trabajar con manipulación de imágenes en C# (en el namespace System.Drawing) pero en una aplicación de consola. Los problemas que tuve al declarar objetos globales del tipo ColorPalette e Image me llevaron a escribirles a la gente de Microsoft Connect (siempre programo mi C# en el Visual Studio Express). Lo que me respondieron está &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=478610"&gt;en este link (en inglés).&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En la solución que dan dicen que hace falta crear una instancia a la clase Process. Crear una instancia es simplemente usar: AnyClass p = new AnyClass(); pues .net asigna un constructor por defecto a todas las clases, aún si este no se declara (también hay un destructor implícito).&lt;br /&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=478610"&gt;La solución la programé yo misma, luego de leer las instrucciones de Alex Turner.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Haciendo simplemente:&lt;br /&gt;&lt;span id="ctl00_MasterBody_WorkaroundList_ctl00_WorkaroundDescriptionLabel"&gt;        Image fotoJpg;&lt;br /&gt;ColorPalette cp;&lt;br /&gt;&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;Program p = new Program();&lt;br /&gt;p.fotoJpg = Image.FromFile("C:\\background-black.jpg");&lt;br /&gt;p.cp = p.fotoJpg.Palette;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Ya tenía los objetos ColorPalette e Image como globales.&lt;br /&gt;&lt;br /&gt;See ya next time!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1158634561357243831-1407846926579910434?l=programacionamartillazos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programacionamartillazos.blogspot.com/feeds/1407846926579910434/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1158634561357243831&amp;postID=1407846926579910434&amp;isPopup=true' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1407846926579910434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1158634561357243831/posts/default/1407846926579910434'/><link rel='alternate' type='text/html' href='http://programacionamartillazos.blogspot.com/2009/08/microsoft-connect-y-como-instanciar-una.html' title='Microsoft Connect y cómo instanciar una clase en C#'/><author><name>Yelinna Pulliti</name><uri>http://www.blogger.com/profile/01485252540288156823</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://2.bp.blogspot.com/_oeyRV6aCFxM/STAE8TpWKSI/AAAAAAAAAIo/RTadQTeCTEI/S220/avatar.gif'/></author><thr:total>0</thr:total></entry></feed>
