jueves, 28 de julio de 2011

Función para encriptar y desencriptar cadena de texto

Para esto creamos dos funciones, una que encripta y otra que desencripta el texto.
PARA ENCRIPTAR
Función 1: f_encripta(as_origen)

String vls_char, vls_result
String vls_str1, vls_str2
int    j

vls_str1 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890/"
vls_str2 = "zaq1xsw2cde3vfr4bgt5nhy6mju7ki8lo9ñp0ZAQXSWCDEVFRBGTNHYMJUKILOÑP&"
vls_result = ""

FOR j=1 TO len(a_origen)
     
      vls_char = mid(a_origen,j,1)
      vls_result += mid(vls_str2, pos(vls_str1, vls_char), 1)

NEXT
RETURN vls_result
PARA DESENCRIPTAR
Función 2: f_des_encripta(a_origen)

String vls_char, vls_result

String vls_str1, vls_str2
int    j

vls_str2 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz1234567890/"
vls_str1 = "zaq1xsw2cde3vfr4bgt5nhy6mju7ki8lo9ñp0ZAQXSWCDEVFRBGTNHYMJUKILOÑP&"
vls_result = ""

FOR j=1 TO len(a_origen)
     
      vls_char = mid(a_origen,j,1)
      vls_result += mid(vls_str2, pos(vls_str1, vls_char), 1)

NEXT
RETURN vls_result

sábado, 23 de julio de 2011

Algunos truquitos en Power Builder.


Pueden parecer insignificantes pero algunas veces hasta lo mas insignificante se vuelve importante en el mundo de la programación; espero les sirva en alguna ocasión. Gracias por los comentarios

* Quieres Saber cuanto tarda tu script en ejecutarse??... comparto un truco que podria ayudarte
long ll_start, ll_elapsed
ll_Start = CPU ( )

//El código que quieres comprobar

ll_elapsed = CPU ( ) - ll_Start

* API que intercambia la funcionalidad de los botones del mouse
Debe crear una funcion externa y luego ejecutarlo

Global External Function:
Function boolean swapmousebutton(boolean var) library 'user32.dll'

powerScript:
boolean rtn, l_mouse
rtn=swapmousebutton(l_mouse)
if l_mouse =true then
   messagebox('Cambio Realizado', 'Boton derecho como boton izquierdo')
else
   messagebox (Cambio realizado', 'boton derecho como boton derecho')
end if

* Necesita una funcionalidad que le ayude a realizar algun evento cuando se mueva el mouse en un  area determinada??....
  Si tiene un cdw... vaya a eventos y cree uno donde el EventId sera : pbm_mousemove
  cuando ya tenga creada el evento verifique en que area es donde quiere realizar lo que fuera...
  (util para uso de monitores touch screen).   Pongo un ejemplo de area:
   if ((xpos>= 1445 and xpos<=1518)  and (ypos>= 1520 and ypos<=1572)) then
        //aqui realizo mis scripts
    end if

*Muestra el día de la semana en español, útil para los reportes que necesiten ser agrupados por día, este codigo debe ser copiado en un campo tipo "COMPUTE FIELD"
case(DAYNAME(DATE(fecha)) when 'Monday' then 'Lunes' when 'Tuesday' then 'Martes' when 'Wednesday' then 'Miercoles' when 'Thursday' then 'Jueves' when 'Friday' then 'Viernes' when 'Saturday' then 'Sabado' else DAYNAME(DATE(fecha)) )

*Muestra el Mes en español,  este codigo debe ser copiado en un campo tipo "COMPUTE FIELD"
Case( Month ( Date ( fecha) )  when 1 then 'Enero' when 2 then 'Febrero'
when 3 then 'Marzo' when 4 then 'Abril' when 5 then 'Mayo' when 6 then 'Junio'
when 7 then 'Julio' when 8 then 'Agosto' when 9 then 'Septiembre' when 10 then 'Octubre'
when 11 then 'Noviembre' else 'Diciembre' )+ ' de '+String ( Year( fecha) )


*Retorna el número de días trasncurridos del año en curso

date ldt_desde,ldt_fecha_sis
date ld_fec_ini
string ls_fec_ini
integer li_dias

ldt_fecha_sis =today()
ld_fec_ini = date('01/01/'+ string(year(today())))
li_dias = daysafter(date(date(ldt_fecha_sis)),ld_fec_ini)
li_dias = (li_dias * -1) + 1
messagebox("Días Transcurridos",li_dias)

* ORDENAR DW POR CUALQUIER COLUMNA DE LA CABECERA

EN EL EVENTO CLICKED DE DW ESCRIBE EL SIGUIENTE CODIGO

string LS_Columna,LS_Col
integer LI_Pos
LS_Col =string(dw_1.GetObjectAtPointer())
for LI_Pos=1 to len(LS_Col)
If Mid(LS_Col,LI_Pos,1) = ' ' then
LI_Pos = len(LS_Col)
LS_Columna = mid(LS_Columna,1,len(LS_Columna) - 2)
Else
LS_Columna = LS_Columna + Mid(LS_Col,LI_Pos,1)
end if
next
dw_1.SetSort(LS_Columna+ A)
dw_1.Sort( )
/*Fuente: http://www.powerbuilder.org*/
*Añadir automáticamente la fecha de compilación a tu aplicación
Declara una variable global de la siguiente manera:
datetime gdt_build = DateTime(Today(), Now())

viernes, 22 de julio de 2011

Tipos y utilidades para MessageBox

* Caracteres ASCII para MessageBox .
  Nueva Línea: ~n
  Tabulación horizontal: ~t
  Tabulación vertical: ~v
  Retorno de línea: ~r
  Avance de hoja: ~f
  Backspace: ~b
  Comilla doble: ~"
  Comilla simple: ~'
  Tilde: ~~
  Cualquier carácter base decimal: ~### (3 dígitos numéricos de 000 a 255)
  Cualquier carácter base hexadecimal: ~h## (2 digitos hexa desde 01hasta FF)
  Cualquier carácter base octal: ~o### (3 dígitos octales de 000 a 377)
 Ejemplos:
  Messagebox('Atención','Si existe Fecha Fin Real, la actividad ~n~r debe estar confirmada', Exclamation!)
  "~64" Nos mostraría el carácter ASCII correspondiente ,o sea @
  "~hF1" Nos mostraría el carácter ASCII correspondiente , o sea la ñ

* Simbolos para MessageBox 
   ·    Information! (Default)
   ·    StopSign!
   ·    Exclamation!
   ·    Question!
   ·    None!

*Botones en   MessageBox 
   ·    OK! — (Default) OK button
   ·    OKCancel! — OK and Cancel buttons
   ·    YesNo! — Yes and No buttons
   ·    YesNoCancel! — Yes, No, and Cancel buttons
   ·    RetryCancel! — Retry and Cancel buttons
   ·    AbortRetryIgnore! — Abort, Retry, and Ignore buttons 

   Ejemplos:
   long result
   result = MessageBox("Result", Abs(Distance), &
                Exclamation!, OKCancel!, 2) //aqui se coloca 2 para q el boton de cancelar sea por defecto
        IF result = 1 THEN
         ................
       ELSE
        ................
       END IF
--------- Mostrar en 2 o mas lineas +&------------
messagebox('Atencion','El cargo que se le asignó no permite ver ~n~r' +&
                                 'esta actividad, o esta Actividad'+&
                                 ' no le pertenece',StopSign!)



viernes, 15 de julio de 2011

En Firebird como saber en que tablas esta un campo determinado

SELECT RDB$RELATION_NAME FROM RDB$RELATION_FIELDS WHERE RDB$FIELD_NAME LIKE '%campo_que_queremos%'

-Equivalencia de select top 1  from tabla del SQL SERVER en FIREBIRD
  SELECT FIRST  1 campo FROM tabla (reemplazas solo por la cantidad q deseas FIRST  2, FIRST  3 )

jueves, 14 de julio de 2011

Power Builder - Firebird

COMO EJECUTAR UN PROCEDIMIENTO ALMACENADO DESDE POWER BUILDER CON FIREBIRD
*Espero sea de mucha ayuda... lo comparto porque no encontré por ningun sitio una ayuda cuando lo necesite... todos iban sobre SQL Server... pero en fin lo unico que cambia es la forma de enviar los parametros.
declare pb_CONSULTA_PRODUC procedure for SP_CONSULTA_PRODUCTOS
(:ld_prod, :ls_usu) ;
connect using SQLCA;
//ejecutamos el procedimiento
execute pb_CONSULTA_PRODUC;
Commit using sqlca;
//probamos si ejecuto el procedimiento
IF SQLCA.SQLCode = -1 THEN
MessageBox("SQL error", SQLCA.SQLErrText)
END IF
close pb_CONSULTA_PRODUC;
  
PARA HACER UN REPORTE A PARTIR DE UN PROCEDURE CON FIREBIRD (No se si funciona con los demas SGBD, creo que no)
SELECT PON_ACTIVIDAD,
         POV_SUCURSAL,
         POV_EMPLEADO,
         POV_ESTADO,
         POV_PRIORIDAD,
         POV_ACTIVIDAD_DESCRIP
        FROM SP_ACTIVIDADES_DIARIAS_PREVIEW (:PD_FECHA)
Donde los campos seleccionados son los que devuelve el procedimiento y para este caso particular :PD_FECHA es el parametro tipo fecha que le enviamos al procedimiento para q devuelva los campos que necesitamos. Este tipo de llamadas a procedure no solo sirva para reportes... ya depende de la imaginacion y necesidad para utilizar esta forma o la anterior.