Mostrando entradas con la etiqueta Ejemplo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ejemplo. Mostrar todas las entradas

24 febrero 2016

Cómo seleccionar un valor concreto de un objeto Select y un Input Radio (HTML) utilizando PHP


En esta ocasión les enseñaré cómo podemos seleccionar un valor concreto de un objeto Select (HTML) utilizando PHP a partir del valor guardado en una variable de sesión. En el ejemplo la variable es $_SESSION["NumeroGenero"].

En este ejemplo en particular el objeto Select (conocido por ComboBox en otros lenguajes de programación) tiene por valores los dos géneros sexuales, y un punto. En su origen, antes de introducirle las lineas PHP (código programado entre las palabras clave y ?>), el valor que se cargaba cada vez que la página se refrescaba era el punto. Sin embargo, un cliente me pidió que realizara cambios para ahorrarle tiempo, y después de pensar y buscar en Internet llegué a esta conclusión.

Pero si en un fichero anteriormente (en nuestro caso se llama check_anonimo.php) se procesaba la variable $_SESSION["NumeroGenero"] cuando por segunda vez se llegara a la página del formulario  (ubicada en el archivo llamado anonimo.php) dibujando cada objeto (inclusive el objeto Select que tratamos), por cada uno de los valores a agregar sería necesario leer la variable $_SESSION["NumeroGenero"] para comparar. Es decir,  el código quedaría así:

<tr>
                   <td>Género:</td>
                   <td><select name="genero" class="Estilo2" id="select222">
                     <option value="." <?php if($_SESSION["NumeroGenero"] == 0) echo 'selected="selected"'; ?>>.</option>
                     <option value="Masculino" <?php if($_SESSION["NumeroGenero"] == 1) echo 'selected="selected"'; ?>>Masculino</option>
                     <option value="Femenino" <?php if($_SESSION["NumeroGenero"] == 2) echo 'selected="selected"'; ?>>Femenino</option>
                                      </select></td>
 </tr>


Mi fuente en este caso, fue https://codex.wordpress.org/Function_Reference/selected



Para finalizar les enseñaré cómo podemos seleccionar un valor concreto de un objeto Input Radio (HTML) utilizando PHP a partir del valor guardado en una variable de sesión. En el ejemplo la variable es $_SESSION["NumeroGeografico"].

En este ejemplo en particular el objeto Input Radio tiene por valores los tres valores que se corresponden con tres zonas geográficas. En su origen, antes de introducirle las lineas PHP (código programado entre las palabras clave ?>)el valor que se cargaba cada vez que la página se refrescaba era el punto. Sin embargo, con este código y con el anterior se cargará el valor que en el anterior usó se estableció. 


Porque si en un fichero anteriormente (en nuestro caso se llama check_anonimo.php) se procesaba la variable $_SESSION["NumeroGeografico"] cuando por segunda vez se llegara a la página del formulario  (ubicada en el archivo llamado anonimo.php) dibujando cada objeto (inclusive el objeto Input Radio que tratamos), por cada uno de los valores a agregar sería necesario leer la variable $_SESSION["NumeroGeografico"] para comparar. Es decir,  el código quedaría así:

<tr>
               <td height="352" valign="top">                 <div align="left">
                 <p>GEOGRÁFICO:</p>
                 <table width="670" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
                   <tr valign="top">
                     <td width="209" height="50"><input name="zona" type="radio" value="ZONA A" <?php if ($_SESSION["NumeroGeografico"] == 1 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA A</span> (La Estrella. La Milagosa, S. Antón) </td>
                     <td width="235"><input name="zona" type="radio" value="ZONA B" <?php if ($_SESSION["NumeroGeografico"] == 2 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA B </span> (Carretas, Hnos. Falcó;, Hospital, Universidad) </td>
                     <td width="226"><input name="zona" type="radio" value="ZONA C" <?php if ($_SESSION["NumeroGeografico"] == 3 ) echo 'checked="checked"'; ?>>
                       <span class="Estilo6"> ZONA C </span> (Fátima, Franciscanos, Parque Sur, Pedro Lamata, San Pedro Mortero, Santa Teresa, Sepulcro Bolera, Vereda) </td>

                   </tr>
                   </table>
                   </div>
                   </td>
                   </tr>

26 marzo 2015

Cómo solventar el problema de las tildes y las eñes pronto al programar con PHP y HTML



Qué hacer cuando trabajando con PHP / HTML tienes un texto con tildes o eñes y no quieres pasar media hora reemplazando caracteres.


Si estás en HTML, yendo a la sección META puedes indicar que el valor de la propiedad charset valga iso-8859-1, quedando así la sentencia completa: . Abajo un ejemplo:

. . .
// mostramos los resultados
echo $row["campo1"];
?>
. . .


En cambio si estas en PHP, el proceder es diferente. Aquí se utiliza una función en las primeras lineas de código PHP. El ejemplo a continuación:


header('Content-Type: text/html; charset=ISO-8859-1');
?>

Y hasta aquí es todo.

16 diciembre 2012

Acciones básicas de Python manejando una base de datos SQLite3


Buenas tardes!

Después de día y medio programando he llegado a terminar esta muestra sencilla muestra de cómo interactuar con Python en una base de datos SQLite3

Para esto cree la clase AccionesSQL. Dentro de ella, la primera linea importa la librería que necesitaremos para funcionar : import sqlite3

El segundo trozo de código relevante está en el constructor de la clase, función __init__(self): Aquí se crea un objeto conexión que se conectara con la base de dato que queramos. Después se crea   un cursor, que es propio de la conexión creada.

La función insertarTelefonoBD es el tercer trozo importante. Aquí se hace una inserción. Para esto usamos una sentencia SQL ejecutada sobre el cursor. Y al punto se realiza un commit porque sino  la inserción no se  hace efectiva.

Poco más abajo tenemos la función  modificarTelefonoBD. Aquí, se desarrolla una actualización de un campo existente y salvo la sentencia SQL todo es igual a caso anterior. Lo mismo pasa con la función suprimirTelefonoBD. Mas esta, suprime.

La penúltima función es listarTelefonosBD y en ella se cargan y muestran todos los registros de la tabla indicada. Se puede añadir una clausula WHERE y también una ORDER BY, y así acotaríamos u ordenaríamos.

La función buscarTelefonosBDxNumero busca teléfonos dependiendo de la opción indicada. Me apeteció hacer 4 tipos de búsqueda: coincidencia total, coincidencia parcial, que empezase por un valor determinado o que acabase según un valor. Luego, para finalizar recorrí el cursor donde se guardaron los registros resultantes, y mostré los datos guardados.

A continuación, el código integro:

import sqlite3 
import sys
class AccionesSQL:
    def __init__(self): 
        self.conexion=sqlite3.connect('listinTelefonico.sqlite')
        self.cursor=self.conexion.cursor()

    def insertarTelefonoBD(self,nombre1,numero1, notas1):
        SQL='insert into Telefonos (Nombre, NumeroTelefono, Notas) values("'+nombre1+'","'+numero1+'","'+notas1+'")'
        self.cursor.execute(SQL)
        self.conexion.commit()
        print 'se ha insertado exitosamente'

    def modificarTelefonoBD(self,id1, nombre1, numero1, notas1):
        SQL='update Telefonos set Nombre="'+ nombre1 + '",NumeroTelefono="' + numero1 + '", Notas="'+notas1 +'" where id='+str(id1)
        self.cursor.execute(SQL)
        self.conexion.commit()
        print 'modificacion exitosa'

    def suprimirTelefonoBD(self, id):
        SQL='delete from Telefonos where ID='+str(id)
        self.cursor.execute(SQL)
        self.conexion.commit()

    def listarTelefonosBD (self):
        SQL = 'select * from Telefonos order by nombre '
        self.cursor.execute(SQL)
        for row in self.cursor:
            print "%s --> %s --> %s" % (row[0],row[1],row[2])

    def buscarTelefonosBDxNumero(self, numero, opcion):
        SQL='HOLA'
        if opcion==1:
            print 'Numeros que terminan por ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono like "%'+numero +'"'
            self.cursor.execute(SQL)
        elif opcion==2:
              print 'Numeros que contienen el numero ' + numero
              SQL = 'select * from Telefonos where NumeroTelefono like "%'+numero +'%"'
              self.cursor.execute(SQL)
        elif opcion==3:
            print 'Numeros que empieza exactamente son el numero ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono = "'+numero +'"'
            self.cursor.execute(SQL)
        elif opcion==4:
            print 'Numeros que empizan por ' + numero
            SQL = 'select * from Telefonos where NumeroTelefono like "'+numero + '%"'
            self.cursor.execute(SQL)
        for row in self.cursor:
            print "%s --> %s --> %s" % (row[0],row[1],row[2])

Esta parrafada que se gestiona en diferentes funciones la llamo desde otra clase según procede. Se llama Telefonos y su código es este:


from AccionesSQL import AccionesSQL
        
class Telefonos:

    def __init__(self,nmb1,tlf1,nts1):
        self.Nombre = nmb1
        self.NumTelefono = tlf1
        self.Notas = nts1
        self.ID=0    
        
    def imprimir(self):
        print self.Nombre + " --> " + self.NumTelefono
        
    def insertar(self):
        a1=AccionesSQL()
        a1.insertarTelefonoBD(self.Nombre,self.NumTelefono,self.Notas)
        
    def modificar(self, id1, nombre1, numeroTelefono1, notas1):
        a1=AccionesSQL()
        a1.modificarTelefono(id1, nombre1, numeroTelefono1, notas1)
        
    def suprimir (self, id1):
        a1=AccionesSQL()
        a1.suprimirTelefonoBD(id1)
    
    def listar(self):
       a1=AccionesSQL()
       a1.listarTelefonosBD()
       
    def buscarPorNumero (self, numero1, op1):
        a1=AccionesSQL()
        a1.buscarTelefonosBDxNumero(numero1,op1) 

La sentencia from AccionesSQL import AccionesSQL sirve para importar el código creado en la clase anterior. De esta manera podremos funcionar con las funciones anteriores llamándolas desde u objeto de esa clase.

Así por ejemplo en la función  insertar podremos utilizar la función insertarTelefonoBD después de haber cread un objeto. Y en las diferentes funciones, el funcionamiento es igual.

Si he creado dos clases no ha sido por ir de listo, sino porque así todo funciona mejor. Es más sencillo y eficiente.


Saludos.

26 junio 2012

SQL Server: Solución para ignorar lois acentos en una búsqueda

 En este sencillo ejemplo que muestro a continuación, muestro lo fácil que resulta evitar que en una búsqueda con where no haya distinciones entre las palabras con tildes o sin ellas

Así, por ejemplo me mostrará de igual modo el registro si busco por ALCALA DE GUADAIRA' como por ALCALÁ DE GUADAIRA'.

La solución está en po ner esto COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI al final de la sentencia WHERE. 
 

declare @clipo1_origen varchar(40)

set @clipo1_origen='ALCALÁ DE GUADAIRA'
 
select IntIdMunicipio, StrNombre from [bd_prueba].[dbo].[municipios] where upper(StrNombre) = upper(@clipo1_origen) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI


Sin embaargo si lo que se quiere es ignorar las acentuaciones en toda la base de  datos (de modo pernanente o hasta que usted quiera desactivarlo), haga esto:

ALTER DATABASE [nombrebasededatos] COLLATE Modern_Spanish_CI_AI

Así afectará a toda la base de datos.


Saludos


21 mayo 2012

SQL Server: Sentencia que de un dato de tipo datetime nos extrae el dia, el mes, el año, la hora, el minuto y el segundo

Aparentemente resultaba complicado, pero nada más lejos de la realidad. Con esta breve sentencia, saco en diferentes columnas el día, el mes, el año, la hora, el minuto y el segundo.

select dtpfecha, day(dtpfecha) "dia", month(dtpfecha)"mes", year(dtpfecha) "año", datepart(hour,dtpfecha)"hora", datepart(minute,dtpfecha) "minutos", datepart(second,dtpfecha) "segundos"
from [basededatos].[dbo].[tabla]

No me rompí mucho la cabeza, la solución la encontré aquí.
Aquí os dejo una foto del resultado al ejecutar la sentencia.



Saludos.

04 mayo 2012

C#: Función que devuelve la primera letra de un string en mayuscula

Sencillo y eficaz código que devuelve un string con el primer caracter en mayuscula. Así por ejemplo, metiendo como parámetro el string víctor está loco, nos devolverá Víctor está loco.
 
        private string UppercaseFirst(string s)
        {
            // Check for empty string.
            if (string.IsNullOrEmpty(s))
            {
                return string.Empty;
            }
            // Return char and concat substring.
            return char.ToUpper(s[0]) + s.Substring(1);
        }
Saludos.

25 abril 2012

SQL SERVER: Cómo activar/desactivar que la clave primaria de una tabla sea autoincrementada.


Tras una breve y éxitosa búsqueda por Google, encontré que esta es la sintaxis:

SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }

Por ejemplo:

set identity_insert [mibasededatos].[dbo].[clientes] on
insert into clientes(IntIdCliente, strRazonSocial, intMunicipio,DtpFechaAlta) values (124,'Probando1',534, '6/10/1982 10:00:15')
set identity_insert [klevinmig].[dbo].[clientes] off

Donde la primera linea del ejemplo desactiva el incremento automatico del campo IntIdCliente, la segunda realiza la acción de inserción y la tercera vuelve a activar el autoincremento.

Adiós.

23 abril 2012

SQL Server: ejemplo con funciones de extraccion de dadtos

Sentencia SQL que a partir de clinom (campo donde se guarda el nombre de la empresa clienta y su código) nos extrae la longitud del campo clinom, la primera ocurrencia del campo separador (en este caso el parentesis de apertura), el tamaño del código, y el código.


select clinom,  len(clinom) as 'longitud', charindex('(',clinom) as 'primera ocurrencia', len(clinom)- charindex('(',clinom) -1 as 'tamaño del codigo',
substring(clinom, charindex('(',clinom)+1, len(clinom)- charindex('(',clinom) -1) as 'codigo'
from [klevinmig].[dbo].[clientesmig] where clinom like 'SUB. NEVERO -CSE BADAJOZ (%'



Este seria el resultado: 


10 febrero 2012

Monodevelop y MySQL:Inserción



Utilizando Monodevelop he creado un formulario simple y con él, en una base de datos llamada probatura, hice un simple ejrcicio para insertar registros en una tabla.

string cadenaDeConexion = "Server=localhost;Database=mono_prueba;User ID=admin;Password=123;Pooling=false;";

MySql.Data.MySqlClient.MySqlConnection conexion = new MySql.Data.MySqlClient.MySqlConnection(cadenaDeConexion);

conexion.Open();

MySql.Data.MySqlClient.MySqlCommand oComando = conexion.CreateCommand();

string sql ="INSERT INTO probatura(cadena) VALUES ('"+txtCadena.Text+"')";

oComando.CommandText=sql;

oComando.ExecuteNonQuery();

conexion.Close();

Viendo este ejemploo creo que hay poco que explicar. Aún así haré un breve resumen.

Por supuesto, lo primero es descargar el conector para MySQL. Yo descargué este: mysql-connector-net-5.2.7.zip. Que está aquí
Tras instalarlo, marché a referencias y me agregué las nuevas referencias.
Luego, ya en el archivo .cs escribí:
using System.Data;
y
using System.Data.SqlClient;
para invocar a los nuevos componentes.

Volviendo al código Ya en la función insertar, lo primero que hago es inicializar una conxión, qu seguidamente abro.
Segundo paso, me creo un comano que inicializo con una función de la conexión.
Tercero, preparo la instrucción SQL para insertar en la cuarta linea.
En el cuarto paso, ejecuto el comendo.
Y para finalizar cierro la conexión.

Saludos

05 enero 2012

¿Qué es el Modelo Vista Controlador?

Según la amiga Wikipedia se definiria así:
Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos. El patrón de llamada y retorno MVC (según CMU), se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista.Enlace
Luego un compañero del trabajo me pasó este enlace y me quedó más claro porque se incluye un ejemplo hecho en Java.

Ver enlace de la Wikipedia.

Saludos.

Ahora solo falta ponerlo en practica.

19 diciembre 2011

C#: ¿Cómo se ordena una TList ?

Es muy sencillo. De tan fácil como es hasta cavilé demasiado.

Teniendo una lista:
TList listaDePersonasDeContacto = DataRepository.PersonsContacto.GetAll();
y esta se ordena así:
listaDePersonasDeContacto.Sort(PersonasContactoColumn.StrApellido1.ToString());

Por cierto, PersonasContactoColumn.StrApellido1.ToString() devuelve la columna por la que queremos ordenar. En este caso el primer apellido del contacto.

Saludos!

Gracias Edwin por explicarmelo porque yo me calenté mucho la cabeza. ¡Con lo tirao que está!

P.D.: Haciendo esto, indico que en caso de que haya coincidencia, mire el segundo apellido
listaDePersonasDeContacto.Sort(PersonasContactoColumn.StrApellido1.ToString() + ", " + PersonasContactoColumn.StrApellido2.ToString());

18 diciembre 2011

Ejemplo básico de interface gráfca de usuario con Python

Para hacer interfaces gráficas utilizando Python existen muchas librerias que se pueden descargar e instalar en el equipo. Aquí hay un listado http://wiki.python.org/moin/GuiProgramming. No obstante para este ejemplo se usa Tkinter. Siendo está ya la integrada al instalar Python.

En elejemplo de hoy vamos a utilizar Tkinter para crer un botón que al ppulsarlo nos escriba la palabra "Hola".

En primer lugar hacemos la importación de la libreria para tener todos sus componentes disponibles:
from Tkinter import *

En segundo lugar creamos la ventana principal. Para ello usamos Frame, que es uno de los componentes de la libreria Tkinter. Frame es la ventana principal.
frame=Frame()

Para visualizar el texto utilizaremos el componente Entry de Python porque este componente sirve para meter o visualizar una linea. En cambio si fuesen varias utilizariamos Text.

Para crear nuestro cmpo de texto necesitamos crear una variable del tipo StringVar. Esta variable simplemente contiene una caja de texto le diremos a nuestra caja de texto que en ella guarde el texto. La forma de hacerlo es así de sencilla:
v = StringVar() campoTexto = Entry(frame, textvariable=v )
Con esto hemos creado la variable v de tipo StringVar y luego hemos creado campoTexto de tipo Entry. Los parametros: frame indica donde queremos que vaya el campo de texto y con textvariable=v indicamos cual es la StringVar donde queremos que deje el texto escrito por el usuario o en el que queremos dejr nosotros el texto que se muestre. Los métodos v.get() y v.set() nos van a permitir obtener o fijar el texto.

Para el botón, usaremos el componente Button de Python.
boton=Button(frame, text="Saludar",command=saludando)
Aquí de nuevo, frame, indica donde queremos que aparezca el botón. Con text indicamos que la propiedad text valga "Saludar" y que la función qu se ejecute al pulsar el botón se llame Saludando. Por supuesto esta función se debe de definir antes de escribir este código:
def saludando():
  v.set("Hola")
Esta función simplemente pone Hola dentro del StringVar que asociamos previamente al campo de texto Entry. Cuando se ejecute esta función, se meterá dentro de v un texto "Hola" y este se mostrará en el campo Entry de la ventana.

El código completo es este:

from Tkinter import *

def saludando():
  v.set("Hola")

frame=Frame()
v=StringVar()
campo=Texto=Entry(frame,textvariable=v)
boton=Button(frame,text="Saludar",command=saludando)
buton.pack(side=LEFT)

v = StringVar()
text = Entry(frame, textvariable=v )
text.pack(side=LEFT)

frame.pack()
frame.mainloop()

Nos quedan por explicar algunos detalles:
Para cada widguet (button, entry, frame,...) necesitaremos llamar a su método pack() el cual se encarga de colocar cadda elemento de la ventana dándole el tamaño adecuado. Podemos dejar los parametros vacios, dejando que elija, o bien, indicar la ubicación nosotros mismos. En estas lineas lo pusimos nosotros mismos: text.pack(side=LEFT) y text.pack(side=LEFT). Asi aparecerán en horizontal.

Una vez terminado el programa, para siga activo y la ventana funcionando, debemos meternos en el bucle principal de tratamiento de eventos de frame. Es decir, hacemos la llamada a frame.mainloop(). Si no lo hacemos así, el programa termina inmediatamente y no veremos nada (salvo que escribamos línea a línea en el intérprete de python). Esta llamada lo único que tiene dentro es un bucle infinito, en el que va recogiendo los eventos de teclado o ratón para "despacharlos" a los componentes de la ventana y que estos puedan tratarlos, por ejemplo, el click sobre el botón.



Est articulo lo he sacado de http://chuwiki.chuidiang.org/index.php?title=Ejemplo_b%C3%A1sico_de_interface_gr%C3%A1fica_de_usuario_con_Python.


Saludos. Y mañana mas






08 octubre 2011

Ejercicio hecho en C # que carga en una combo subcadeenas escritas en un textbox y separadas por ;

Este ejercicio, como reza el titulo del articulo, consiste en cargar en la combo cmbDatos, las palabras delimitadas por ; que se escriben en txtString.
El uso del ArrayList lista es puramente para mi comodidad porque así, cuando probaba la aplicación iba corroborado que subcadenas se extraian.

private void btnCargar_Click(object sender, EventArgs e)
{
cmbDatos.Items.Clear();
ArrayList lista = new ArrayList();
string subcadena;
string cadena = txtString.Text;
while (cadena.Length > 0)
{
int indice = cadena.IndexOf(';');
if (indice > 0)
subcadena = cadena.Substring(0, indice);
else
{
subcadena = cadena;
cadena = "";
}
lista.Add(subcadena);
int numeroDeCararteres= (cadena.Length-1) - indice;
if (numeroDeCararteres>-1)
cadena = cadena.Substring(indice+ 1,numeroDeCararteres);


}
for (int i = 0; i < lista.Count; i++)
{
cmbDatos.Items.Add(lista[i].ToString());
}
}

Saludos.

08 mayo 2011

En C sharp, seleccionar registros en una base de datos Access (versión 97) usando las librerias ODBC


Aqui escribo el ódigo para seleccionar el máximo valor de un campo determinado:

private void IdMasAlto()
{
DatosConexionABaseDeDatos odatosConexion = new DatosConexionABaseDeDatos();
OleDbConnection conexion = odatosConexion.getConexion();
conexion.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();

string strSQL = "SELECT MAX(IdTipo) AS ultimo FROM Tipo";
//La consulta únicamente devolverá un registro de una columna: Un valor.
OleDbDataAdapter oAdaptador= new OleDbDataAdapter(strSQL, conexion);
oAdaptador.Fill(ds, "elultimo");
dt = ds.Tables["elultimo"];
DataRow fila =dt.Rows[0];
//ID es una propiedad
ID = Convert.ToInt32(fila["ultimo"].ToString());
conexion.Close();
}

Este códigio, modificandolo, servirá para recorrer varios registros devuelvos. Quedando así: if (dt.Rows.Count == 0)
this.lblUsuario.Text = "No existe el usuario...";
else
{
foreach (System.Data.DataRow fila in dt.Rows)
{
this.lblUsuario.Text = "Bienvenido " + fila["nombre"].ToString();
}

}



Por supuesto, y antes de marchar, recordar que hay que hacer las siguientes importaciones antes de empezar, en las primeras líneas:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;



Saludos ;)

19 marzo 2011

En C sharp, eliminar registros en una base de datos Access (versión 97) usando las librerias ODBC


Aqui escribo el ódigo para modificar un registro utilizando las mismas herramientas y lois mismos métdos que seusaron para hacer la inserciónen el articulo En C sharp, insertar registros en una base de datos Access (versión 97) usando las librerias ODBC

Al igual que en el anterior, importo las siguientes librerias:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

y trabajo en la clase Tipo.


public void Eliminar(Tipo _tipo)

{
DatosConexionABaseDeDatos odatosConexion = new DatosConexionABaseDeDatos();
OleDbConnection conexion = odatosConexion.getConexion();
string eliminarSQL = "DELETE FROM Tipo WHERE IdTipo=" + _tipo.id;
conexion.Open();
OleDbDataAdapter oAdaptador = new OleDbDataAdapter(eliminarSQL, conexion);
OleDbCommandBuilder oBuilder = new OleDbCommandBuilder(oAdaptador);

DataSet oDsTipo = new DataSet("Tipo");
oAdaptador.Fill(oDsTipo, "Tipo");
conexion.Close();
}

Este mantiene diferencias con el sucesor, como que nunca se seleccionan todos los campos, y en cambio se ejecuta una sentencia DELETE. Además se ahorran las líneas donde se creabe un objeto Row agregandose como nuevo, porque obviamente esto no añade sino que suprime registros que ya existen.




En C sharp, modificar registros en una base de datos Access (versión 97) usando las librerias ODBC


Aqui escribo el ódigo para modificar un registro utilizando las mismas herramientas y lois mismos métdos que seusaron para hacer la inserckión en el articulo En C sharp, insertar registros en una base de datos Access (versión 97) usando las librerias ODBC

Al igual que en el anterior, importo las siguientes librerias:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;

y trabajo en la clase Tipo.

Sin más preámbulos aquí está el código para modificar un registro.

public void ModificarTipoExistente(Tipo _tipo)
{
DatosConexionABaseDeDatos odatosConexion = new DatosConexionABaseDeDatos();
OleDbConnection conexion = odatosConexion.getConexion();
string updateSQL = "UPDATE Tipo SET Descripcion='" + _tipo.descripcion + "', Tipo='" + _tipo.tipo + "' WHERE IdTipo=" + _tipo.id;
conexion.Open();
OleDbDataAdapter oAdaptador = new OleDbDataAdapter(updateSQL, conexion);
OleDbCommandBuilder oBuilder = new OleDbCommandBuilder(oAdaptador);

DataSet oDsTipo = new DataSet("Tipo");
oAdaptador.Fill(oDsTipo, "Tipo");


conexion.Close();

}

Este mantiene diferencias con el sucesor, como que nunca se seleccionan todos los campos, y en cambio se ejecuta una sentencia UPDATE. Además se ahorran las líneas donde se creabe un objeto Row agregandose como nuevo, porque obviamente esto no añade sino que actualiza registros que ya existen.


13 marzo 2011

En C sharp, insertar registros en una base de datos Access (versión 97) usando las librerias ODBC


Ayer, tras muchas horas buscando por Internet un ejemplo válido de cómo agregar registros en una base de datos Access, versión 97, utilizando las funciones de las librerias ODBC, di, al rededor de las 6 de la tarde con esta página web 32.36.2.Use DataTable to insert a Row

Aquí dejo mí codigio, logrado en base a esa página que os he dicho:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;


namespace GesPro.Tipo
{
class Tipo
{
string tipo;
string descripcion;
//constructor sin parametros de la clase
public Tipo()
{
this.descripcion = "";
this.tipo = "";
}
//constructor con parametros de la clase
public Tipo(string _tipo, string _descripcion)
{
this.descripcion = _descripcion;
this.tipo = _tipo;
}
// función que inserta nuevos regisrtros en la tabla Tipo de la base de datos GesPro.mdb
public void InsertarNuevoTipo(Tipo _tipo)
{
string ruta = System.IO.Directory.GetCurrentDirectory() + @"\GesPro.mdb"; //indica la ruta donde está la base de dxatos
string cadenaDeConexion = @"Provider=Microsoft.JET.OLEDB.4.0;" + @"data source=" + ruta; //establece cadena de conexión con la base de datos
OleDbConnection conexion = new OleDbConnection(cadenaDeConexion); //creo un objeto conexion
string seleccionarTodosLosRegistros = "SELECT * FROM Tipo";
conexion.Open(); //abro conexión
OleDbDataAdapter oAdaptador = new OleDbDataAdapter(seleccionarTodosLosRegistros,conexion); //creo un adaptador con una sql que selecciona todos los registros
OleDbCommandBuilder oBuilder = new OleDbCommandBuilder(oAdaptador);

DataSet oDsTipo = new DataSet("Tipo"); //creo un objeto dataset
oAdaptador.Fill(oDsTipo,"Tipo");
DataTable oTablaTipo = oDsTipo.Tables["Tipo"]; //creo una tabla para datos y le añado el nuevo registro campo a campo
DataRow oRow = oTablaTipo.NewRow();
oRow["Tipo"] = _tipo.tipo;
oRow["Descripcion"] = _tipo.descripcion;
oTablaTipo.Rows.Add(oRow);
oAdaptador.Update(oDsTipo, "Tipo"); //actualizo el objeto adaptador

conexion.Close();
}

}

}

05 septiembre 2010

Consejos de Rodrigo para futuro código con ASP, JavaScript, C Sharp, componentes Devexpress y no recuerdo qué más

El viernes el colega de trabajo Rodrigo se pasó buen rato ayudandome a resolver un código sencillo, pero repleto de errores por mi novatez.

Primero, el código javascript se tiene que separar de los archivos aspx porque así se gana limpieza. Estos nuevos archivos se llamarán como los aspx pero con extensión js. Y serán incluidos en los archivos form. De esta manera, siendo esto un ejemlo:

Y ojito con qué nombre ponen a ClientInstanceName, porque en los .js, a las variables de los asp, se las conoce por ese nombre. Se sugiere que el ID de un control y el clientinstancename sean el mismo.

Segundo, javascript es C. Sin enbargo, como en nuestro caso usamos herramientas DevExpress, tendremos que usar los métodos de estas herramientas. Para saber cuales son, pues vamos a la ayuda, y allí tecleamos el nombre del control.

Tercero, ah! Ojo, ojito... No podemos usar un visible común. Sino, que tenemos que usar un clientVisible. Porque la tenemos que visualizar o dejar de hacerlo, de lado del cliente, y no del lado del servidor. En tonces si usamos Visible, nos va a fallar.

Consejo, no vayan de listos, y... Otra cosa, observen si el navegdor seleccionado no dibuja una señal de advertencia.. Porque si lo hace, en el código tienen un error, aunque no se haya detectado en el depurador.

Otros consejos, pero de diseño: usen tablas, y siempre con el mismo número de columnas. Y otra cosa. Uff, no paro. Utilicen y reutilicen UserForm, porque así les va a cundir más.


Saludos.

21 julio 2010

El proyecto Bouncy Castle

¡Genial, en el curso deel DNIe a se habla de programción!

La imagen promociona el proyecto Bouncy Castle, que ya se puede descargar en su web oficial, de software libre que desarrolla una serie de librerías criptográficas libres y, entre otros, ofrece un provider para el JCE de Java.

Además del código del proyecto se puede encontrar una extensa documentación así como diversos ejemplos de uso de las librerías.

Además de la implementación de un provider JCE para usar en Java también contiene otras utilidades que pueden ser de interés a la hora de hacer una aplicación basada en el DNI electrónico, especialmente si se quieren implementar servicios de valor añadido. Las más relevantes son:

  • Librería para leer y escribir objetos codificados en ASN.1
  • API para comunicaciones TLS de cliente
  • Generador de Certificados X.509, CRLs y ficheros PKCS#12
  • Generación de Certificados de Atributos
  • Generación y procesado de objetos S/MIME y CMS (PKCS#7/RFC 3852)
  • Generación y procesado de consultas OCSP (RFC 2560)
  • Generación y procesado de sellos de tiempo TSP (RFC 3161)
  • Generación y procesado de objetos OpenPGP (RFC 2440).


Señores, no dispongo de tiempo por l momento, aí pes, dejo este tema a mitad, para abordr cuando sepa más.

SALUDOS :P


______________________

A continuación se muestra un ejemplo de aplicación realizada en Java usando los servicios criptográficos del provider Bouncy Castle en lugar del provider por defecto que viene en el sistema.

La aplicación en cuestión realiza el Hash (resumen criptográfico) de un fichero de texto en claro.

EJEMPLO de código:

/* Cargar "provider" */

Security.addProvider(new BouncyCastleProvider());

/* Crear función resumen, SHA-1 en el ejemplo */

MessageDigest messageDigest = MessageDigest.getInstance("SHA");

/* Leer fichero de 1k en 1k y resumir*/

byte[] buffer = new byte[1000];

FileInputStream in = new FileInputStream();

int leidos = in.read(buffer, 0, 1000);

while (leidos != -1)

{

// Pasa texto claro a la función resumen

messageDigest.update(buffer);

leidos = in.read(buffer, 0, 1000);

}

in.close();

// Completar el resumen

byte[] resumen = messageDigest.digest();

// Mostrar resumen

System.out.println("RESUMEN:");

mostrarBytes(resumen);

System.out.println();

02 mayo 2010

En C#: Cómo montar un navegador en un TreeView ( 2º versión)

Para desarrollar esta segunda versión, que sustituye, mejorando a "Más código en C#: Cómo montar un navegador en un TreeView", cree una clase. La llamé "SuperTreeNode" y hereda todo de la clase "TreeNode" perteneciente a System.Windows.Forms.

Código de la clase SuperTreeNode:

class SuperTreeNode:TreeNode //los dos puntos preceden a la clase superior
{
private string ruta;

public SuperTreeNode()
: base()
{
this.ruta = "";
}
public SuperTreeNode(string ruta)
: base()
{
this.ruta = ruta;
}
public SuperTreeNode(string texto, string ruta):base(texto)
{
this.ruta = ruta;
}
public string Ruta
{
get { return ruta; }
set { ruta = value; }
}

}



El código de la clase donde se realizan las funciones relativas a la carga de los directorios, en esta versión, se cargan cuando se procede a utilizarlos, resolviendo asi el problemas con la memoria RAM, que antes se veia afectada.

Código de la clase del formulario principal, donde uso System.IO;:

public partial class Form1 : Form
{
SuperTreeNode NodoRaiz;

public Form1()
{
InitializeComponent();
NodoRaiz = new SuperTreeNode();

NodoRaiz.ImageIndex = 0;
NodoRaiz.Text = "MI PC"; //doy un texto al nodo primario

TreeVArboleda.Nodes.Add(NodoRaiz); //el nodoprimario lo agrego al arbol
}

private void Form1_Load(object sender, EventArgs e)
{

Inicio();

TreeVArboleda.ExpandAll();
}

public void Inicio()
{
//lo primero, sacar las unidades.
DriveInfo[] drivers = DriveInfo.GetDrives();//se obtienen todos los drivers
foreach (DriveInfo driver in drivers)
{
try
{
//de cada driver se obtiene el nombre y el fullname y se convierte a nodo. El nodo se agrega al principal
SuperTreeNode nodo = new SuperTreeNode();
nodo.Text = driver.Name; //nombre
nodo.Ruta = driver.RootDirectory.FullName; //ruta

NodoRaiz.Nodes.Add(nodo);

StateLblInformacion.Text ="";

}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}
}

}

private void TreeVArboleda_AfterSelect(object sender, TreeViewEventArgs e)
{
SuperTreeNode nodo = (SuperTreeNode)e.Node;

TxtRutaActual.Text = nodo.Ruta; //obtengo la ruta seleccionada

try
{
//obtengo el contenido (subdirectorios) del directorio de la ruta
DirectoryInfo unDirectorio = new DirectoryInfo(TxtRutaActual.Text);

DirectoryInfo[] subdirectorios = unDirectorio.GetDirectories();
nodo.Nodes.Clear();

foreach (DirectoryInfo directorios in subdirectorios)
{
try
{
//por cada subdirectorio cro un nodo llamado hijo al que anclo al nodo creado al principio
SuperTreeNode hijo = new SuperTreeNode(directorios.Name, directorios.FullName);

nodo.Nodes.Add(hijo);

StateLblInformacion.Text = "";

}
catch (Exception ex2)
{

StateLblInformacion.Text = ex2.Message;
}
}
}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}


}
}
}

Saludos.