You are on page 1of 6

Sea el problema: Sea la base de datos DOCENTES, con los siguientes campos: - Cdigo - char - 4 - Nombre - varchar - 15 - Especialidad

- varchar - 15 - Sueldo - decimal - 7 - 2 - Condicin - varchar - 10 - Sexo - varchar 1

Agregar unos 15 registros en la base de datos

Hallar:

Profesores varones de condicin nombrados Cuantos profesores son de computacin Cuantos ganan en total los docentes varones Cuanto ganan los docente contratados en total La aplicacin debe poder agregar y borrar registros. Ordenar los registros ascendente y descendentemente segn cualquier campo Permitir la bsqueda de registros segn el nombre de los docentes

Si las preguntas son as primero tendramos que crear una base de datos con los campos que nos piden y con su tipo y tamao (el tamao y el tipo no siempre nos dan as es que tu debes ponerlo como creas conveniente), pero si tienes que

acordarte que tipo es el campo, esto para ms adelante.

Ya despus de crear la base de datos tenemos que crear un objeto data windows, crea estilo grid, y una ventana y en esta agrega un control datawindow, y te quedara as mas o menos; no te olvides de conectar el objeto d_decentes_g con el control dw_1

Ya casi

queda codificar as que te explicare las lneas en que objetos y sus eventos respectivamente Primero en el evento open del w_docentes dw_1.settransobject(sqlca) dw_1.retrieve() En el cb_1 (agregar) el evento clicked integer n n = dw_1.insertrow(0) dw_1.scrolltorow(n) dw_1.setfocus()

//crea un registro al final //Se posiciona en el final de los registros

En el cb_2 (Actualizar) en el evento clicked dw_1.update() // Guarda los cambios dw_1.retrieve() //Actualiza la tabla

En el cb_3 (Eliminar) en el evento clicked dw_1.deleterow(dw_1.getrow()) dw_1.update()

//elimina el registro que esta selecionado

En el cb_4 (Buscar) en el evento clicked string nom, m integer n, r nom = string(trim(sle_1.text)) m = "nombre='" + nom + "'" //Busca en el campo nombre lo que esta escrito en el sle_1 r = dw_1.find(m, 1, dw_1.rowcount()) //busca en todos los registros y si lo encuentra captura en r en # de registro donde esta // si no lo encuentra le da el valor de cero (0) a r // dw_1.rowcount() no da la cantidad de registros q posee la base de datos if r <> 0 then dw_1.scrolltorow(r) else messagebox("Upss!!","No se encomtro") end if //en este caso la busqueda no es muy notoria pero si fuera un tipo freeform seria mejor en todo caso crea otro tipo freeform y all prueba la bsqueda, para buscar tienes que escribir tal como esta en la tabla sea con mayscula y minscula Antes de seguir con los radio buttons damos la posibilidad al usuario de cmo quieres que sea la ordenacin, ascendente o descendente, adems con que campo quiere que se ordene y una opcin que no se ordene(ninguno)

En la instancia de clase string fo, campo

//con estas variables capturamos lo que elija el usuario al hacer clic en los radio buttons

En el rb_5 (Ninguno) en el evento clicked if rb_5.checked = true then //Si este rb esta activado entonces los rb para elegir campo se desactivan fo = "Codigo A" //ademas a la variable fo le da el valor de codigo A rb_3.enabled = false rb_4.enabled = false rb_7.enabled = false rb_6.enabled = false end if

En el rb_1 (Descendente) en el evento clicked if rb_1.checked = true then //Si este rb esta activado entonces los rb para elegir campo se activan Fo = "A" //ademas a la variable fo le da el valor de A rb_3.enabled = true rb_4.enabled = true rb_6.enabled = true rb_7.enabled = true end if

En el rb_2 (Ascendente) en el evento clicked if rb_2.checked = true then //Si este rb esta activado entonces los rb para elegir campo se activan Fo = "D" //ademas a la variable fo le da el valor de D rb_3.enabled = true rb_4.enabled = true rb_6.enabled = true rb_7.enabled = true end if

En el rb_3 (Sueldo) en el evento clicked if rb_3.checked = true then campo = "Sueldo " //Si este rb esta activado entonces a la variable campo le asigna Sueldo

En el rb_4 (Nombre) en el evento clicked if rb_3.checked = true then campo = "Nombre " //Si este rb esta activado entonces a la variable campo le asigna Nombre

En el rb_7 (Especialidad) en el evento clicked if rb_3.checked = true then campo = "Especialidad "

En el rb_6 (Condicion) en el evento clicked if rb_3.checked = true then campo = "Condicion "

Luego de capturar esos datos en las variables fo y campo ahora si podemos hacer click en el cb_5 (Ordenar) En el cb_5 (Ordenar) en el evento clicked if rb_5.checked = true then //Si elige ninguno al ordenar entonces se ordena de acuerdo al campo codigo dw_1.setsort(fo) else dw_1.setsort(campo + fo) //si no ordena de acuerdo al campo y la forma ascend o descend end if dw_1.sort() //Este evento hace cumplir la orden de ordenacin, sin esto no se ordena Lo que hicimos hasta ahora es solamente ordenar y buscar los registros, ahora responderemos las preguntas de consulta; aqu tiene mucho que ver el tipo de campo que es (char, varchar, decimal, etc) y como esta escrito en la tabla Aqu programemos en el evento clic del static text sea al hacer clic en las letras saldr la respuesta. En el st_1 (Varones nombrados) en el evento clicked; para la respuesta le asigne el st_5 integer n, c string s, co for n = 1 to dw_1.rowcount() //recorre uno por uno todos los registros s = dw_1.getitemstring(n, "Sexo") //en s captura lo que esta escrito en el campo sexo en el registro n; n vale //primero 1, luego2, luego 3 y as hasta llegar al ultimo registro co = dw_1.getitemstring(n, "Condicion") //Ocurre lo mismo con la variable co if s = "M" and co = "Nombrado" then c = c + 1 // si co y s son lo q deseamos un contador se incrementa next //si uno registro dice en sexo M y en condicin Nombrado all se incrementa c st_5.text = string(c) //en el st_5 muestra el valor de c;

//dw_1.getitemstring captura datos solo de tipo varchar En el st_2 (Solo computacion) en el evento clicked; para la respuesta le asigne el st_6 integer n, c string e for n = 1 to dw_1.rowcount() e = dw_1.getitemstring(n, "Especialidad") if e = "Computacion" then c = c + 1 next st_6.text = string(c) //aqu es parecido, solo que aqu seleccionamos a los de computacin nada ms.

En el st_3 (Sueldo total de varones) en el evento clicked; para la respuesta le asigne el st_7 integer n decimal c, su string s for n = 1 to dw_1.rowcount() s = dw_1.getitemstring(n, "Sexo") su = dw_1.getitemdecimal(n, "Sueldo") //aqu se ve la importancia de cmo declaras tu campo, de q tipo es if s = "M" then c = c + su //en este caso c ya no aumenta, sino acumula en valor que encuentra en los registros next st_7.text = string(c) //dw_1.getitemdecimal captura datos solo de tipo decimal

En el st_4 (Sueldo total de contratados) en el evento clicked; para la respuesta le asigne el st_8 integer n decimal co, su string c for n = 1 to dw_1.rowcount() c = dw_1.getitemstring(n, "Condicion") su = dw_1.getitemdecimal(n, "Sueldo") if c = "Contratado" then co = co + su next st_8.text = string(co) //aqu es parecido, solo que aqu seleccionamos a los de computacin nada ms

La funcin getitemxxxxxx tienes diferentes formas para cada tipo de campo Si es de tipo varchar o char se usara getitemstring Si es de tipo numeric se usara getitemnumber Si es tipo date se usara getitemdate etc Y por ultimo en la aplicacin en el evento copiamos lo que esta escrito en las propiedades de la base de datos y abrimos la ventana. // Profile Docentes SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "Connectstring='DSN=Docentes'" connect; open(w_docentes)

Ahora ejecutemos el programa

Eso es todo. Aparte te adjunto el programa (esta zipeado); tal vez no puedas abrir por que la base de datos trae problemas pero si puedes dile a pal o Damin que te ayuden sobre todo a conectar la base de datos o si tu lo puedes mejor aun, ya nos vemos. Chau.

You might also like