pero que bueno vale, a la gente le gusta lo que escribo y eso me motiva a seguir creando estos mini tutoriales, así que ahora viene el manejo de las funciones más básicas en una Base de datos.
Transacciones
Cuando Hablamos de una transacción en una base de datos nos referimos a una serie de cambios que, o todas tienen exito o todas fracasan, por ejemplo, si estamos intentando cambiar un registro, pero en alguno no coindiden los tipos, entonces todo el proceso se tiene que revertir y no se guarda nada.
Crear Registros
Lo primero que hacemos es iniciar la transacción con
Luego creamos un objeto Result con el método Create
hRes = $hConn.CREATE("tabla")
Esto nos crea un registro vacio donde vamos a establecer los datos del registro:
hRes!campo1 = "Registro #1"
hRes!campo2 = 300
hRes!campo3 = DATE(Now())
hRes!campo4 = TRUE
hRes!campo5 = 2235644.232
El objeto Result también puede usarse como un Array para guardar los datos, sería algo como esto:
hRes["campo1"] = "Registro #1"
hRes["campo2"] = Rnd(200, 20000)
hRes["campo3"] = DATE(Now())
hRes["campo4"] = TRUE
hRes["campo5"] = 2235644.232
Una ventaja al hacerlo de esta manera es que podemos por ejemplo usar variables en lugar de cadenas, pudiendo potimizar mas el código, la opciones son variadas.
Luego se actualiza el registro, para guardar estos datos:
Con esto nos aseguramos de que ingresen los datos al registro, finalmente cerramos la transacción:
En caso de error echamos todo el proceso para atras:
Podemos ver el código completo acá:
DIM hRes AS Result
$hConn.Begin
hRes = $hConn.CREATE("tabla")
hRes!campo1 = "Registro #1"
hRes!campo2 = Rnd(200, 20000)
hRes!campo3 = DATE(Now())
hRes!campo4 = TRUE
hRes!campo5 = 2235644.232
hRes.Update
$hConn.Commit
CATCH
$hConn.Rollback
Buscar Registros
Para buscar un registro podemos usar el método Find del objeto Collection:
hRes = $hconn.Find("tabla") ' Esto es equivalente a SELECT * FROM tabla
Esto crea un objeto Result de solo lectura que nos guardará, en este caso buscamos todos los datos que están guardados en la tabla, podemos filtrar con la clausula where de esta manera:
hRes = $hconn.Find("tabla", "campo2 < 10000") ' Esto es equivalente a SELECT * FROM tabla WHERE campo2 < 10000
Con esta tendremos como resultado todos los registros cuyo valor para campo2 sea menor a 10000.
Solo nos queda enumerar la salida
FOR EACH hRes
PRINT hRes!campo1
PRINT hRes!campo2
PRINT hRes!campo3
PRINT hRes!campo4
PRINT hRes!campo5
NEXT
Al final el código nos queda así:
DIM hRes AS Result
hRes = $hconn.Find("tabla", "campo2 < 10000")
FOR EACH hRes
PRINT hRes!campo1
PRINT hRes!campo2
PRINT hRes!campo3
PRINT hRes!campo4
PRINT hRes!campo5
NEXT
Editar un Registro
Lo primero que debemos hacer es iniciar una transacción
Luego creamos un objeto Result de lectura y escritura usando la función Edit de la clase Connection, al igual que la función Find usaremos como primer parametro el nombre de la tabla y como segundo parametro la clausula where para obtener resultados mas precisos.
hRes = $hconn.Edit("tabla", "campo2 < 10000")
En este caso buscará todos los registros cuyo valor de campo2 sea menor a 10000, generalmente se busca editar un solo registro, para esto buscamos por ejemplo el campo que sea clave primaria que en nuestro ejemplo es id.
Ahora editamos los campos.
FOR EACH hRes
hRes!campo1 = "Campo con valor menor a 10000"
hRes.Update
NEXT
En este caso iremos registro por registro editando campo1, es importante que luego se coloque la linea hRes.Update para guardar los registros, si solo van a editar un registro no necesitar usar el FOR EACH.
Otra cuestión que hay que acotar es sobre el limite que le colocamos a los campos, si recordamos en el TutoGambas #2 habíamos creado campo2 como un campo de tipo string y una longitud de 16 caracteres pero en la edición colocamos una cadena de 29, no nos dará error pero si vemos el resultado solo nos guardará “Campo con valor “.
Finalizamos cerrando la transacción.
O devolviendola si ha ocurrido un error.
El código completo se vería así.
DIM hRes AS Result
$hconn.Begin
hRes = $hconn.Edit("tabla", "campo2 < 10000")
FOR EACH hRes
hRes!campo1 = "Campo con valor menor a 10000"
hRes.Update
NEXT
$hconn.Commit
CATCH
$hconn.Rollback
El método Exec
Si alguno de métodos anteriores se queda corto siempre podemos crear nuestras propias sentencias SQL usando el el metodo Exec
hRes = hConn.EXEC("Tu sentencia SQL")
Este método siempre va a devolver un objeto Result aunque no será necesario en todos los casos.
Tal vez te interese: