miércoles, 9 de noviembre de 2011

Como Restaurar una Base de Datos FIREBIRD

Es muy sencillo. Les dejo como hacerlo esto lo deben de grabar en un archivo .bat, lo ejecutan y ya.
Agradeceria comentarios y/o puntuacion asi puedo saber si les fue de provecho y seguir posteando.

c:\trabajo\gbak -r -n -user SYSDBA -password masterkey c:\trabajo\backup_de_la_BD.fbk c:\trabajo\BD_RESTAURADA.fdb

Aclaro que deben de cambiar la ruta, nombre de usuario y pass de acuerdo a la BD de uds... pueden consultar si no esta claro.

miércoles, 28 de septiembre de 2011

Mas orden en DataWindow

// Permite ordenar ascendentemente o descendentemente la columna sobre la cual se ha hecho doble clic...
String ls_header, ls_temp, is_lastheader , is_order

// Para el caso que la columna sea de tipo texto...
IF dwo.Type = "text" THEN
       ls_header = dwo.Name
       IF ls_header = is_lastheader THEN
               IF is_order = "D" THEN
                       is_order = "A"
               ELSE
                       is_order = "D"
               END IF
       ELSE
               is_lastheader = ls_header
       END IF
      
       // Como los títulos de las columnas por defecto son <campo>_t recortamos los dos últimos caracteres
       ls_temp = Left(ls_header, Len(ls_header) - 2) + " " + is_order
       This.SetRedraw(False)
       This.SetSort(ls_temp)
       This.Sort()
       This.SetRedraw(True)
END IF

miércoles, 24 de agosto de 2011

Colores PowerBuilder

Algunos truquitos numericos para colorear text o backgroup
* Cambie la numeracion por el color que desea segun tabla de colores
   this.Modify( ls_dia+".Background.Color='12632256'")
   this.Modify( ls_dia+".Color='12632256'")
  • Colores Especiales
Button Face 79741120
Text 33554432
Background 1090519039
App. Workspace 276856960
  • Colores Clásicos

 Color             Red  Green Blue 

 Black 0 0 0 0
White 255 255 255 16777215
Gray 192 192 192 12632256
Dark Grey 128 128 128 8421504
Red 255 0 0 255
Dark Red 128 0 0 128
Green 0 255 0 65280
Dark Green 0 128 0 32768
Blue 0 0 255 16711680
Dark Blue 0 0 128 8388608
Magenta 255 0 255 16711935
Dark Magenta 128 0 128 8388736
Cyan 0 255 255 16776960
Dark Cyan 0 128 128 8421376
Yellow 255 255 0 65535
Brown 128 128 0 32896

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.