martes, 12 de mayo de 2015

CONEXIÓN A UNA BD DESDE UNA APLICACION (ACCES Y VISUAL STUDIO).

Primero lo que debes hacer es conseguir tu string de conexión. Para ello crea un archivo de texto en cualquier lado y cámbiale la extencion por ".udl". Vas a ver que se cambia el icono. Le haces doble clic y se te abre una ventana. Vas a la pestaña Proveedor y eliges Microsoft jet 4.0 OLE DB provider. Presiona siguiente y pone la ruta donde guardaste tu base de datos de Access, lo otro lo dejas como estas a menos que le hayas puesto una contraseña a la BD. En este último caso cambia los parámetros según corresponda. Dar aceptar.
Ahora abrirlo como el bloc de notas y copia la línea que dice algo como:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Public\Documents\DB\BaseDeDatos.md b;Persist Security Info=False


Ahora vamos a tu proyecto de vb. crea un formulario y ponle el textBox y un botón. Luego anda al código y escribí lo siguiente:

Public Class Form1
Dim stringConexion As String ="aca la linea de código que copiaste del archivo udl"

Private Sub insertarEnTabla()
Dim conexion As New Data.OleDb.OleDbConnection
Dim cmd As New Data.OleDb.OleDbCommand
Dim data As New DataTable
Dim consulta As String

conexion.ConnectionString = stringConexion
conexion.Open()

consulta = "insert into nombreTabla values ('" & texBox.text.trim & "')" 'esta es la sentencia que insertara el texto de tu texBox dentro de la tabla que hayas creado en access
cmd.CommandType = CommandType.Text
cmd.CommandText = consulta
cmd.Connection = conexion
cmd.ExecuteNonQuery()
conexion.Close()


End Sub

Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click 'esto es el evento click del botón, lo generas simplemente haciendo doble clic en el mismo dentro del formulario
insertarEnTabla

End Sub


End Class

domingo, 10 de mayo de 2015

TRANSACCIONES.

Las transacciones son un conjunto de instrucciones SQL que tienen la cualidad de ejecutarse como una unidad, es decir, o se ejecutan todas o no se ejecuta ninguna. Si una transacción tiene éxito, todas las modificaciones de los datos realizados durante la transacción se guardan en la base de datos. Si una transacción contiene errores los cambios no se guardaran en la base de datos.

En un sistema ideal, las transacciones deberían garantizar todas las propiedades ACID (en la práctica, a veces alguna de estas propiedades se simplifica o debilita con vistas a obtener un mejor rendimiento).

ACID son las siglas de Atomicity, Consistency, Isolation y Durability (Atomicidad, Consistencia, Aislamiento , Durabilidad)

·                  Atomicidad. Es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
·                  Consistencia. Esta propiedad esta ligada a la integridad referencial, es decir solo se pueden escribir datos válidos respetando los tipos de datos declarados y la integridad referencial.
·                  Aislamiento. Asegura que una operación no puede afectar a otras. Con esto se asegura que varias transacciones sobre la misma información sean independientes y no generen ningún tipo de error.
·                  Durabilidad. Cuando se completa una transacción con éxito los cambios se vuelven permanentes.
El ejemplo clásico de transacción es una transferencia bancaria, en la que quitamos saldo a una cuenta y lo añadimos en otra. Si no somo capaces de abonar el dinero en la cuenta de destino, no debemos quitarlo de la cuenta de origen.


Para implementar transacciones en MySQL hay que utilizar la versión 5.0.x y el motor de almacenamiento InnoDB.


Una transacción tiene dos finales posibles, COMMIT (se ejecutan todas las instrucciones y guardamos los datos) y ROLLBACK (se produce un error y no se guardan los cambios). Por defecto, MySQL trae activado el modo autocommit, por lo que cuando se realiza una transacción (INSERTUPDATEDELETE) esta se confirma automáticamente.

Ejemplo de una transacción:
mysql> CREATE TABLE innotest (campo INT NOT NULL PRIMARY KEY) TYPE = InnoDB;
Query OK, 0 rows affected (0.10 sec)

mysql> INSERT INTO innotest VALUES(1);
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO innotest VALUES(2);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO innotest VALUES(3);
Query OK, 1 row affected (0.04 sec)

mysql> SELECT * FROM innotest;
+-------+
| campo |
+-------+
|     1 |
|     2 |
|     3 |
+-------+

SENTENCIAS PREPARADAS.

Las sentencias preparadas de JDBC permiten la “precompilación” del código SQL antes de ser ejecutado, permitiendo consultas o actualizaciones más eficientes. En el momento de compilar la sentencia SQL, se analiza cuál es la estrategia adecuada según las tablas, las columnas, los índices y las condiciones de búsqueda implicados. Este proceso, obviamente, consume tiempo de procesador, pero al realizar la compilación una sola vez, se logra mejorar el rendimiento en siguientes consultas iguales con valores diferentes.

Otra ventaja de las sentencias preparadas es que permiten la parametrización: la sentencia SQL se escribe una vez, indicando las posiciones de los datos que van a cambiar y, cada vez que se utilice, le proporcionaremos los argumentos necesarios que serán sustituidos en los lugares correspondientes. Los parámetros se especifican con el carácter ‘?’.


public class Actualizacion{
private PreparedStatement sentencia;


public void prepararInsercion(){
String sql = "insert into personas values ( ?, ? ,? )";
sentencia = conexion.prepareStatement(sql);
}

public void insertarPersona(String nombre, dirección, telefono)
{
sentencia.setString(1, nombre);
sentencia.setString(2, direccion);
sentencia.setString(3, telefono);
sentencia.executeUpdate();
}
}

Al utilizar esta clase, obviamente, deberemos llamar primero al método que prepara la inserción, y posteriormente llamar tantas veces como sea necesario al método insertarPersona. 
Se definen tres parámetros en la sentencia SQL, a los cuales se hace referencia mediante números enteros consecutivos:


String sql = "insert into personas values ( ?, ? ,? )";

PROCEDIMIENTOS ALMACENADOS.


Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Los usos 'típicos' de los procedimientos almacenados se aplican en la validación de datos, integrados dentro de la estructura del banco de datos. Los procedimientos almacenados usados con tal propósito se llaman comúnmente disparadores, o triggers. Otro uso común es la 'encapsulación' de un API para un proceso complejo o grande que podría requerir la 'ejecución' de varias consultas SQL, tales como la manipulación de un conjunto de datos enorme para producir un resultado resumido. También pueden ser usados para el control de gestión de operaciones, y ejecutar procedimientos almacenados dentro de una transacción de tal manera que las transacciones sean efectivamente transparentes para ellos.
El siguiente es un ejemplo de procedimiento almacenado en MySQL:

DELIMITER |
CREATE PROCEDURE autos (IN velocidad INT, IN marca VARCHAR (50))
BEGIN
IF velocidad < 120 THEN
INSERT INTO familiares VALUES (velocidad, marca);
ELSE
INSERT INTO deportivos VALUES (velocidad, marca);
END IF;
END;

|

El procedimiento se manda llamar de la siguiente manera:


CALL NOMBRE DEL PROCEDIMIENTO (LOS VALORES A USAR);