PDF de programación - TRABAJANDO CON SERVIDORES SQL

Imágen de pdf TRABAJANDO CON SERVIDORES SQL

TRABAJANDO CON SERVIDORES SQLgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 18 de Marzo del 2018)
542 visualizaciones desde el 18 de Marzo del 2018
422,3 KB
34 paginas
Creado hace 18a (02/10/2005)
TRABAJANDO CON SERVIDORES SQL

CLIP proporciona simples pero poderosas herramientas para accesar a varios servidores SQL. Los principios
ocultos de estas herramientas, son considerados en este capítulo. Algunas características, posibilidades, clases
y funciones relacionadas, son descritas a continuación.

1.- CARACTERISTICAS

Algunas de las características y posibilidades son las siguientes:

● CLIP unifica el uso de varios servidores SQL ocultando peculiaridades del API de sus desarrolladores,
tanto como le sea posible. Sin embargo, deberías saber el dialecto SQL del RDBMS deseado (“Relational
Data Base Manager System” = Sistema de Bases de Datos Relacionales).

● Las transacciones son soportadas. Por defecto cada instrucción SQL trabaja en su propia transacción (cada
instrucción es pareada implícitamente con START/COMMIT). Sin embargo es posible lograr una
secuencia de las instrucciones en una transacción, llamando explícitamente funciones START, COMMIT
o ROLLBACK en puntos apropiados.

● El ordenamiento local permite cambiar el orden de filas localmente, no es necesario cargar el servidor con
una claúsula ORDER BY para una consulta similar. Además, los órdenes locales permiten rápidas
búsquedas para una fila deseada en enormes set de resultados.

● Automatización de actualizaciones de réplicas en bases de datos. Tú puedes proporcionar las apropiadas
instrucciones UPDATE, DELETE e INSERT, que pueden ser ejecutadas automáticamente después de
actualizar el set local de las filas seleccionadas.

● Dos modos de traer (“fetch”); (a) traer todo y (b) traer a pedido. En el primer modo, todos los resultados
de las filas son traidos después de la ejecución de la instrucción SELECT. El proceso de traida puede ser
observado y cancelado por una función definida por el usuario. En el segundo modo, la traida es realizada
sólo con el alcance de la fila que ha sido direccionada. Tal tipo de ejecución es útil cuando la cantidad de
filas de resultados no pueden ser estimados.



2.- INICIO RÁPIDO

2.1 CONSTRUYENDO UNA APLICACIÓN

Para construir una aplicación con el servidor SQL que desees, debes tener instalado (compilado) el paquete
apropiado clip-<rdbms>. Los siguientes paquetes están por ahora disponibles:

Pag. 1

Librería: clip-postgres
Sitio oficial: http://www.postgresql.org/index.html
Enlaces interesantes:
http://www.postgresql.org.mx/
http://torresquevedo.hispalinux.es/LuCAS/

http://www.postgresql.cl/

Tutoriales/NOTAS-CURSO-BBDD/notas-curso-BD.pdf



Librería: clip-mysql
Sitio oficial: http://www.mysql.com/
Enlaces interesantes:
http://www.mysql-hispano.org/
http://www.cybercursos.net/sql/sql.html

Librería: clip-oracle
Sitio oficial: http://www.oracle.com/index.html
Enlaces interesantes:
http://www.oracle.com/global/es/index.html

Librería: clip-odbc
Administrador del controlador ODBC: http://support.microsoft.com/default.aspx?scid=kb;es;110093

Librería: clip-interbase
Sitio oficial: http://www.borland.com/us/products/interbase/index.html
Enlaces interesantes:
http://www.firebird.com.mx/modules/news/

Librería: clip-dbtcp
Sitio oficial: Servidor proxy para conexiones ODBC http://www.fastflow.it/dbftp/

Una vez instalado el paquete deseado, puedes construir tu aplicación de una forma similar a esto:

$ clip -es test.prg -lclip-mysql

2.2 PASO A PASO

Antes de comenzar a hacer algo, debes crear una conexión al servidor. Para este propósito se debe usar la
función ConnectNew(). Esta función es un constructor de la clase Tconnect, o sea, si tiene exito retorna un
objeto Tconnect. Una vez obtenido el objeto, puede ser usado para ejecutar instrucciones SQL, para
seleccionar un set de filas deseado o para comenzar y finalizar transacciones. Por ejemplo:

conn := ConnectNew(...) // Obtengo una conexión
conn:Start() // Comienzo una transacción

// Voy a actualizar poniendo 'Total' donde el nombre es 'Rust'.
conn:Command( “UPDATE emp SET name='Total' WHERE name='Rust' “ )
// La próxima vez, en la oficina de pago Rust dirá: “Mi nombre es Total” :-)

Pag. 2

conn:Rollback() // Era sólo una broma, cancelo el cambio :)

NOTA: Varias conexiones pueden ser hechas simultáneamente. Es más, también es posible conectarse a
varios servidores a la vez.

Las consultas e instrucciones SQL pueden tener parámetros. Los nombres de los parámetros deben ser
precedidos con un “:” (dos puntos). Los valores de parámetros son pasados a un arreglo bidimensional, una
fila por parámetro. La primera columna contiene el nombre y la segunda el valor. Por ejemplo.

conn:Command( “UPDATE emp SET fname=:fname,lname=:lname” , ;
{{“fname”,”John”},{“lname”,”Smith”}} )

La función CreateRowset(), perteneciente a Tconnect, se usa para obtener un set de filas – resultado de la
instrucción SELECT. Esta retorna un objeto de la clase Trowset. Por ejemplo:

rs := conn:CreateRowset( “SELECT * FROM emp WHERE fname=:fname”,{{“fname”,”John”}} )
rs:Browse() //Un simple BROWSE para Trowset.

Las funciones miembros de Trowset, te permiten navegar a través de un set de filas de resultados. Ellas son:
Bof(), Eof(), Skip(), Goto(), GoTop(), GoBottom(), Lastrec() y Recno().

Se han implementado dos funciones para leer/escribir en la fila en uso: Read() y Write(). La función Read()
retorna un objeto cuya estructura es la misma que la estructura de la fila. Por ejemplo:

rs := conn:CreateRowset( “SELECT fname,lname FROM emp” )
? rs:Recno(), rs:Read() //Imprime: 1 {FNAME: John, LNAME: Smith}

La función Write() recibe un objeto y setea los valores de los campos cuyos nombres concuerdan con los
nombres de los atributos de ese objeto. Por ejemplo:

? rs:Read() // {FNAME: John, LNAME: Smith}
obj := map() // Creo una objeto vacío
obj:fname := “Robert” //Añado atributos y valores
obj:salary := 10000
rs:Write(obj) //Adopto valores de nombres del objeto concordantes
? rs:Read() // {FNAME: Robert, LNAME: Smith}

Tu puedes añadir y borrar filas de un set usando Append() y Delete(). Append() puede recibir parámetros de
un obj. Por ejemplo:

rs := conn:CreateRowset( “SELECT fname,lname FROM emp”)
? rs:Lastrec() // 100

obj := map() // Creo un objeto vacío
obj:fname := “Homer”
obj:lname := “Simpson”
rs:Append( obj ) // Agrego un objeto
? rs:Lastrec() // 101

Pag. 3

? rs:Read() // {FNAME: Homer, LNAME: Simpson}
rs:Delete() //Borro la fila activa (generada del objeto)
? rs:Lastrec() // 100

NOTA: Todos los cambios ejecutados por Write(), Append() y Delete() son sólo aplicados a ese set. Sin
embargo, tres parámetros adicionales ( <cInsertSQL>, <cDeleteSQL>, <cUpdateSQL> ) pueden ser pasados a
CreateRowset(). Si es pasado <cInsertSQL>, será ejecutado implícitamente cuando se ejecute el método
Append(). De forma similar, <cDeleteSQL> y <cUpdateSQL> serán usados cuando sean invocados Delete()
y Write(). Una única identificación (ID) de la fila debería ser SELECTcionada en el caso de Write() y Delete
(). Por ejemplo:

rs := conn:CreateRowset( “SELECT rowid,fname,lname FROM emp”, , ;
“INSERT INTO emp values (:fname,:lname) ”, ;
“DELETE FROM emp WHERE rowid=:rowid”, ;
“UPDATE emp SET fname=:fname,lname=:lname WHERE rowid=:rowid” )

Si la cantidad de filas coincidentes no puede ser estimada, dos parámetros <bEval> y <nEvery> serán de gran
ayuda. El código de bloque <bEval>, será ejecutado durante el proceso de traida después de cierto número de
filas traidas, definido por <nEvery>. Si este retorna .F. (falso) el proceso se cancela. Así tú podrías hacer una
barra de progreso para enormes set de resultados y detener la traida en cualquier momento. El siguiente
ejemplo imprime un “.” (punto) por cada 100 filas y, puede ser cancelado presionando ESC.

rs := conn:CreateRowset( “SELECT * FROM tabla_enorme”, , , , , , , , , , ;
{ | | qqout( “.” ), inkey() != K_ESC},100 )

Por la misma razón (cuando la cantidad de filas coincidentes no puede ser estimada) tú puedes dirigir a
Trowset para que no traiga todas las filas inmediatamente, pero que las traiga de acuerdo las vaya
necesitando. Existe otro parámetro para este propósito, <lNoFetch>. Si se pasa como .T., CreateRowset()
termina de una vez. Pero el número de filas coincidentes no puede ser obtenido mientras haya filas
remanentes por traer. Para traer al resto, podría ser usada la función Trowset:FetchAll(). Para obtener el
número de filas traidas en el momento, se debería usar Trowset:Fetch(). Por ejemplo:

rs := conn:CreateRowset( “SELECT * FROM tabla_enorme”, , , , , , , , ,.T. )
rs:Gotop()
? rs:Fetched() // 1
? rs:Lastrec() // 0
for i:= 1 to 100
rs:Skip()
? rs:Fetched() // 2, 3, ..., 101

next
rs:FetchAll()
? rs:Lastrec() == rs:Fetched() // .T.

Trowset soporta algo llamado “órdenes locales”. Una “Orden Local” es un índice creado en el lado del cliente
y que permite cambiar el orden de las filas (registros) en un set. Esto es mayoritariamente lo mismo que los
índices estándar RDD, pero su duración está limitada por el tiempo de vida del set de filas., p.e. éste se
localiza en la memoria y no ocupa archivos. Trowset:CreateOrder() crea un orden con un nombre
determinado, Trowset:SetOrder() activa un orden . Por ejemplo:

Pag. 4

rs := conn:CreateRowset("SELECT fname,lname FROM emp")

// crea un orden 'Firstname' sobre el campo 'fname'
// El largo de la clave es 20 caracteres.
rs:CreateOrder("Firstname","fname",20)

// crea un orden 'Lastname' sobre el campo 'lname'
// El largo de la clave es 20 caracteres.
rs:CreateOrder("Lastname","lname",20)

// crea un orden 'Fullname' sobre ambos campos 'fname' y 'lname'.
// El largo de la clave es 40 caracteres.
rs:CreateOrder("Fullname
  • Links de descarga
http://lwp-l.com/pdf9664

Comentarios de: TRABAJANDO CON SERVIDORES SQL (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad