43
Separador de miles en SQL Mostrar importes con separador de miles es muy útil vean que la columna Costo que es del tipo Money no tiene formato y la siguiente columna ya se le aplicó el formato, esto lo logramos aplicando la función CONVERT, esta función es muy utilizada para hacer conversiones entre tipos de campos pero en este ejemplo la utilizamos para darle formato a un campo Money.Este es el código que generó la salida anterior: Esta es la query que generó la salida anterior: SELECT b.Nombre, a.Costo,CONVERT(VarChar(20),a.Costo,1) FROM CostoAeropuerto a, Aeropuertos b WHERE b.ID_Aeropuerto = a.ID_Aeropuerto Y si pensaban que se requiere forzosamente tener una tabla o campo, pues no el convert trabaja sobre variables, como ven esta es una sola sentencia SQL DECLARE @Costo Money = 44252.23;SELECT CONVERT(VarChar(20),@Costo,1) Publicado por Adolfo Chairez en 9:18 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook Enlaces a esta entrada Etiquetas: funcion convert , funcion sql , separador miles sq viernes, 9 de marzo de 2012 Paso de parámetros variables entre Windows y uso del Entry

Power Builder

Embed Size (px)

Citation preview

Page 1: Power Builder

Separador de miles en SQL

Mostrar importes con separador de miles es muy útil vean que la columna Costo que es del tipo Money no tiene formato y la siguiente columna ya se le aplicó el formato, esto lo logramos aplicando la función CONVERT, esta función es muy utilizada para hacer conversiones entre tipos de campos pero en este ejemplo la utilizamos para darle formato a un campo Money.Este es el código que generó la salida anterior:

Esta es la query que generó la salida anterior:

SELECT b.Nombre, a.Costo,CONVERT(VarChar(20),a.Costo,1)    FROM CostoAeropuerto a, Aeropuertos b    WHERE b.ID_Aeropuerto = a.ID_Aeropuerto

Y si pensaban que se requiere forzosamente tener una tabla o campo, pues no el convert trabaja sobre variables, como ven esta es una sola sentencia SQLDECLARE @Costo Money = 44252.23;SELECT CONVERT(VarChar(20),@Costo,1) Publicado por Adolfo Chairez en 9:18 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: funcion convert, funcion sql, separador miles sq

viernes, 9 de marzo de 2012

Paso de parámetros variables entre Windows y uso del Entry

Page 2: Power Builder

Cuando empecé a programar con PB y necesitaba pasar varios valores entre ventanas en ese entonces utilizaba estructuras, ahora utilizo una string donde pongo todos los valores que quiero y en la ventana que la recibe saca esos valores y los convierte al tipo que se necesite es mas practico pasar 1 solo valor que pasar una estructura. En el proyecto que se ve en el vídeo esta en esta dirección:http://www.mediafire.com/?6gltk93s9do7c2tpodrán encontrar una función que utilizo mucho es Entry recibe como parámetros un string una posición y caracter de separación y resresa el valor indicado por posición, luego les muestro un ejemplo de como usar entry.

Publicado por Adolfo Chairez en 4:51 p.m. 1 comentario: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: Parametros PowerBuilder, paso parametros entre ventanas, windows parameters

Funcion en SQL para calcular el ISR Nomina Mexico

Page 3: Power Builder

En México todo aquel empleado debe de pagar el Impuesto Sobre la Renta por concepto de Sueldos y Salarios (luego les explicaré como recuperar algo de este impuesto) entonces es necesario si estamos haciendo un sistema de nominas saber como calcular el impuesto sobre la renta, en la siguiente dirección pueden descargar tanto la definición de tablas sus valores como la función, este permitirá calcular el ISR para nominas de períodos semanal, quincenal y mensual vigentes para el 2012:http://www.mediafire.com/?o38ouw4jg5a34eh

Script que generó la salida anterior es:

PRINT "EL descuento del ISR para un ingreso Semanal de 4,500.00 es de " + CAST(dbo.ISR(4500,1,2012) As VarChar(10))PRINT "EL descuento del ISR para un ingreso Quincenal de 4,500.00 es de " + CAST(dbo.ISR(4500,2,2012) As VarChar(10))PRINT "EL descuento del ISR para un ingreso Mensual de 4,500.00 es de " + CAST(dbo.ISR(4500,3,2012) As VarChar(10))

El store procedure recibe 3 parámetros el primero es la base gravable de los ingresos del trabajador en el período OJO dije ingresos gravables no total de ingresos si tienen dudas escribnme, el segundo parámetro es el tipo de período 1 es semanal, 2 quincenal y 3 es mensual y último parámetro es el año.El ISR puede ser rojo entonces se le llama Subsidio al Salario.

Publicado por Adolfo Chairez en 9:58 a.m. 1 comentario: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: calculo isr, calculo nomina, descuento isr, isr nomina, ISR sueldos y salarios

Calculo de días de descanso para Nomina en México

Page 4: Power Builder

Cuando realizamos el calculo de una nomina necesitamos saber si el día es descanso de ley o no, en México antes los días de descanso eran fijos ahora son variables eso que significa, que para disfrutar del día de descanso por aniversario de la revolución mexicana debemos calcular cual será el tercer lunes del mes de noviembre.

La siguiente liga contiene la definición de una tabla que contendrá los días de descanso por ley un store procedure que al ejecutarse llena dicha tabla de esta forma sabremos si una fecha es descanso obligatorio por ley, esta tabla contiene un campo llamado Borrar lo pongo en 0 (cero) porque por ley no se puede evitar pagar esos dias.

Descargar la función compatible para servidores SQL:http://www.mediafire.com/?nfoc2sbfxsrcvp8 Publicado por Adolfo Chairez en 9:38 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: das descanso obligatorio, dias de descanso mexico, dias descanso por ley, dias festivo mexico, ley federal del trabajo dias descanso

jueves, 8 de marzo de 2012

Como actualizar una tabla desde otra 2 formas

En ocasiones necesitamos hacer update a una tabla con el resultado del select de otra aqui 2 ejemplos:

UPDATE mig930501r    SET mig930501r.pre_venta = simaplan.tot_eng    FROM mig930501r, simaplan    WHERE mig930501r.usu_clave = 'ADOLFO'

Page 5: Power Builder

    AND simaplan.centraliza = mig930501r.centraliza    AND simaplan.folio = mig930501r.folio    AND simaplan.cve_paq = mig930501r.cve_paq    AND LTRIM(simaplan.cve_plan) = 'CONTA'    AND simaplan.no_descto = '00000'    AND simaplan.cve_det = mig930501r.deter 

Otra forma que utilizo mucho:UPDATE considoc    SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen = considoc.centraliza) Publicado por Adolfo Chairez en 10:46 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: update 2 tablas, update from

Como crear un store procedure que regrese valores

CREATE PROCEDURE PruebaRegreso @Cant IntASBEGIN    SET @Cant = @Cant + 1    RETURN @CantENDgo

DECLARE @regreso INTEGEREXEC @regreso = PruebaRegreso 81PRINT @regreso --debug imprime 82

Publicado por Adolfo Chairez en 10:44 a.m. 1 comentario: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: procedimientos almacenados, sql store procedure, store procedure

Como saber los indices de una tabla

Esta funcion puede ser util en diversos casos, yo la utilizo para saber cuales con los campos de una tabla que sean definido como llaves primarias para generar joins automaticos con otras tablas que mis usuarios manipulan; este es el primer paso de un generador de reportes (NOTA: el codigo que hace las relaciones no esta aca):

1. Cree la funcion en SQL:

CREATE FUNCTION f_llave_primaria (@p_nombre_tabla Varchar(100), @p_nombre_campo

Page 6: Power Builder

Varchar(100)) RETURNS Numeric(9) AS BEGIN Declare @v_key Numeric(9);

SELECT @v_key = count(*)FROM syscolumns INNER JOIN (SELECT * FROM SysIndexKeys IK WHERE IK.Id = (select id from sysobjects where name = @p_nombre_tabla)AND IK.IndId = (select indid from sysindexes where name = (select name from sysobjects where xtype = 'PK' and parent_obj = (select id from sysobjects where name = @p_nombre_tabla)))) PKColumns ON PKColumns.id = syscolumns.id AND PKColumns.colid = syscolumns.colid andsyscolumns.name = @p_nombre_campo

Return @v_key ; 

END

2. Cree un Datawindow con la siguiente sentencia SQL y un argumento llamado nombre_tabla a la cual sele va a pasar el nombre de la tabla con la cual queremos trabajar.

select syscolumns.name as NombreCampo,dbo.f_llave_primaria(:nombre_tabla,syscolumns.name) as 'isnullable'from syscolumns inner join sysobjects on sysobjects.id=syscolumns.id inner join systypes on systypes.xtype=syscolumns.xtype where sysobjects.name = :nombre_tablaorder by 1; Publicado por Adolfo Chairez en 10:44 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: index table

Como obtener la llave primaria de una tabla en SQL

CREATE FUNCTION dbo.llave_primaria(@TABLA VARCHAR(50)) RETURNS VARCHAR(50)BEGIN DECLARE @TABLE VARCHAR(50)

SELECT @TABLE = Nombre FROM Nom_Entidades WHERE UPPER(Clave) = UPPER(@TABLA) SELECT @TABLE = name FROM sys.identity_columns WHERE object_id = object_id(@TABLE)        RETURN LTrim(RTrim(@TABLE))END

Publicado por Adolfo Chairez en 10:41 a.m. No hay comentarios:

Page 7: Power Builder

Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: primary key, sql key

Programando Store Procedures: Variable table VS temp table ¿quien ganará?

Cuando programamos Store Procedure en SQL a veces necesitamos crear tablas temporales para ahí depositar datos procesados y luego volverlos a utilizarlos en otra rutina, es aquí donde nos topamos con la disyuntiva de utilizar variable table ó temp table aquí les dejo un pequeño script que les ayudará a decidir que es mas eficiente, este script fué probado con un servidor Microsoft SQL Server 2008:

Tengo la idea de que Oracle sería al revés:

DECLARE @st datetime 

Page 8: Power Builder

DECLARE @VariableTabla TABLE(   ID_Recibo_Det bigint,    ID_Calculo    int,    Iva           money,    Importe       money)    CREATE TABLE #TablaTemporal(   ID_Recibo_Det bigint,    ID_Calculo    int,    Iva           money,    Importe       money)    SET @st = getdate()INSERT @VariableTabla(ID_Recibo_Det, ID_Calculo, Importe)SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos

UPDATE @VariableTabla    SET Importe = Importe * 1.72342    UPDATE @VariableTabla    SET Iva = Importe /1.15    DELETE @VariableTabla    WHERE Importe >= 234.23    PRINT 'Utilizando Variable Tabla la operacion consume: ' + RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs'

---Utilizando Tablas temporalesSET @st = getdate()INSERT #TablaTemporal(ID_Recibo_Det, ID_Calculo, Importe)SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos

UPDATE #TablaTemporal    SET Importe = Importe * 1.72342    UPDATE @VariableTabla    SET Iva = Importe /1.15    DELETE #TablaTemporal    WHERE Importe >= 234.23    PRINT 'Utilizando Tabla Temporal la operacion consume: ' + RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs' Publicado por Adolfo Chairez en 9:48 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: temp table, variable table

Como convertir un numero a su expresión en letras

Page 9: Power Builder

A veces necesitamos convertir un importe a letras, aqui les traigo la función que lo hace.Al final dice Pesos pero uds. pueden cambiar por la moneda de su pais.

Descargar el codigo aqui, incluyo un archivo .srf para que nada mas importen este archivo y listo:http://www.mediafire.com/?ouhdx9l1touuue9 Publicado por Adolfo Chairez en 9:32 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada Etiquetas: convertir numeros, numero a letras

11 Formatos de fecha en SQL

Ahora les tengo una función en SQL que recibe un dato tipo DateTime y regresa una cadena de caracteres correspondiente al valor del paráemtro  DateTime  y se puede seleccionar 1 de 11 formatos para expresar dicha fecha con y sin hora, esta función se puede agregar a una sentencia SQL, ejm. Select dbo.forfec(campofecha, num_formato, num_hora). Importante no importa el lenguaje del servidor SQL, de hecho por eso la hice.

Page 10: Power Builder

Esta es el script que generó la salida de la imagen:BEGIN    DECLARE @Fecha DateTime = CAST('20120228 15:35:15' As DateTime),            @li_i  Int = 1        WHILE 1=1    BEGIN        PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " sin hora " + dbo.forfec(@Fecha,@li_i,0)        PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " con hora " + dbo.forfec(@Fecha,@li_i,1)        SET @li_i = @li_i + 1        IF @li_i = 12            BREAK    END            END    

Descargar la funcion Forfechttp://www.mediafire.com/?9v7446agt5b8bhf Publicado por Adolfo Chairez en 8:44 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEnlaces a esta entrada

Page 11: Power Builder

Etiquetas: conversion fecha, conversion fecha y hora, convert datetime, date convert, date format, fecha y hora en sql, formato fecha

miércoles, 7 de marzo de 2012

Como cambiar el color de las lineas de una DW

Este es código que se ve en la imagen en el punto 3IF(MOD(GETROW(),2)=0,rgb(205,205,205),RGB(219,233,255))

Publicado por Adolfo Chairez en 9:50 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: alternar colores en registros, alternate color, background color, powerbuilder band

Page 12: Power Builder

Como tocar un archivo wav

Private Constant Long SND_APPLICATION = 128 // look for application specific associationPrivate Constant Long SND_ALIAS = 65536 // name is a WIN.INI [sounds] entryPrivate Constant Long SND_ALIAS_ID = 1114112 // name is a WIN.INI [sounds] entry identifierPrivate Constant Long SND_ASYNC = 1 // play asynchronouslyPrivate Constant Long SND_FILENAME = 131072 // name is a file namePrivate Constant Long SND_LOOP = 8 // loop the sound until next sndPlaySoundPrivate Constant Long SND_MEMORY = 4 // lpszSoundName points to a memory filePrivate Constant Long SND_NODEFAULT = 2 // silence not default, if sound not foundPrivate Constant Long SND_NOSTOP = 16 // don't stop any currently playing soundPrivate Constant Long SND_NOWAIT = 8192 // don't wait if the driver is busyPrivate Constant Long SND_PURGE = 64 // purge non-static events for taskPrivate Constant Long SND_RESOURCE = 262148 // name is a resource name or atomPrivate Constant Long SND_SYNC = 0 // play synchronously (default)

Public Function Long PlaySound (String lpszName, Long hModule, Long dwFlags) Library "winmm.dll" Alias for "PlaySoundA"

PlaySound ("Ding.wav", 0, SND_FILENAME + SND_ASYNC) Publicado por Adolfo Chairez en 9:37 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: wav play

Como usar bcp

--exportar de sql a tabla txtbcp mig2.dbo.sidetcon_bcp out sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur     --Tabla nativabcp mig2.dbo.sidetcon out sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur        --Esta opcion exporta a tabla con TAB separatorbcp select * from mig2.dbo.sidetcon where year(fum) in (2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000) queryout sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur

--importar de tabla txt a sqlbcp mig2.dbo.sidetcon_bcp in sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur

--Para lanzar los triggers agregar la opcion -hFIRE_TRIGGERS Publicado por Adolfo Chairez en 9:36 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: bcp sql

Page 13: Power Builder

Como simular un tab con el enter en una dw

Muchos programadores, han encontrado la necesidad de pasarde un campo a otro del datawindow con Enter. Para esto sedebe hacer un pequeño truco pero efectivo que acontinuacion te lo enseñamos.

En el datawindow se define un evento de usuario con unnombre cualquiera y que se inicie cuando opriman enter, paraeso seleccione el event ID pbm_dwnprocessenter.Luego como el evento se dispara cuando oprimen el enter, loque se hace es enviar un tab en ese evento. El codigo quedebe tener el evento de usuario que creamos es el siguiente

Send(Handle(this),256,9,Long(0,0))

Con este codigo se pasa de un campo a otro del datawindowcon el enter y con tab.Para darle una secuencia ordenada debes abrir el DW -Format- Tab Order y ver que los codigos asignados a cadacampo estan de forma ascendente 10, 20,, 30, etc.

SaludosPublicado por Adolfo Chairez en 9:36 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como selecciono un archivo

integer li_rtnstring ls_path

li_rtn = GetFileOpenName("Archivo a cargar", sle_archivo.text, ls_path, "txt", "Archivos Tab (*.txt), *.txt", GetCurrentDirectory())

if li_rtn < 1 then return

Publicado por Adolfo Chairez en 9:35 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: abrir archivo en powerbuilder, fileopen, getfileopen

Como obtengo las columnas de una datawindow

Page 14: Power Builder

//dw_free es el control datawindows

string ls_tabla, ls_columnainteger li_i, li_j

ls_tabla = dw_free.Describe("DataWindow.table.columns")li_j = num_entries(ls_tabla,"~t")for li_i = 1 to li_j ls_columna = entry(ls_tabla,li_i,'~t') messagebox("Columnas",ls_columna)next

//Otra forma:integer li_i, li_jstring ls_col

li_j = integer(dw_datos.Object.Datawindow.Column.Count)

for li_i = 1 to li_j ls_col = dw_datos.Describe("#"+string(li_i) + ".name") messagebox("Columna",ls_col,Information!)next

//Para recueperar la etiqueta de la columnals_col = dw_datos.Describe("#"+string(li_i) + ".name")dw_datos.Describe(ls_col + "_t.text")

Publicado por Adolfo Chairez en 9:35 a.m. 1 comentario: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: column label, column name, datawindow, datawindow column, datawindow describe, describe

Como posicionar el cursor en una columna

dw_control_name.setcolumn(nom_col)

//nom_col es el nombre de la columna que puede ser tambien Publicado por Adolfo Chairez en 9:34 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: columnas de una dw, datawindow

Como pasar parametros entre ventanas

Page 15: Power Builder

Suponemos que la ventana w_pro_lot llama a la ventana w_cap_dat para que esta ultima capturaunos datos los cuales debera de pasar a la ventana w_pro_lot

en el boton de salir o cerrar de  w_cap_dat ponemos:su_dat_pac is_dat_pac

is_dat_pac.fecha = date(em_fecha.text)is_dat_pac.carrier = Trim(sle_carrier.text)is_dat_pac.sellos = trim(sle_sellos.text)is_dat_pac.tarimas = integer(em_tarimas.text)is_dat_pac.salida = trim(sle_salida.text)closewithreturn(w_dat_pac,is_dat_pac)

en w_pro_lot (la que llama) ponemos:su_dat_pac ls_dat_pac

open(w_cap_dat)

ls_dat_pac = message.PowerObjectParm

donde:su_dat_pac es una estructura que contiene los campos que se van a pasar comoparametros

puede utilizarse tambien para el objeto messageWordParm tipo de dato longLongParm tipo de dato longDoubleParm tipo de dato double (numeric)StringParm tipo de dato stringPowerObjectParm tipo de dato objecto (incluyendo estructuras)

Publicado por Adolfo Chairez en 9:34 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como obtener el periodo de una fecha via SQL

select centraliza,convert(char(6),fec_elabor,112),count(*)    from sinvocon    where centraliza = '020'    group by centraliza,convert(char(6),fec_elabor,112) order by centralizaPublicado por Adolfo Chairez en 9:33 a.m. No hay comentarios:

Page 16: Power Builder

Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como obtener los fonts instalados

string  ls_name,ls_key, ls_subkeylist[]integer li_rtninteger li_pic, li_position,lposls_key= "Hkey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Fonts"

li_rtn = RegistryValues(ls_key, ls_subkeylist)IF li_rtn = 1 THEN   li_pic = 1   For li_position =  1 To UpperBound(ls_subkeylist)       ls_name = ls_subkeylist[li_position]       li_position = plb_fontname.AddItem(ls_name, li_pic)   NextEND IF

// Asigno a un picturelistbox los nombres de los fonts// Pero cuidado, en el evento selectionchange del picturelistbox

fontname.text = This.SelectedItem()st_example.facename = fontname.text

Publicado por Adolfo Chairez en 9:33 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como modificar la sentencia SQL de una DW en tiempo de ejecución

Page 17: Power Builder

Este vídeo demuestra que si es posible modificar en tiempo de ejecución la sentencia SQL embebida en un DW. Vean el video desde youtube se ve mejor.

Dirección para descargar el proyecto que se ve en el video, incluye la creación y llenado de las tablas:http://www.mediafire.com/?2n2x51tta17wmnj

CODIGO BÁSICO://declaramos una variable de instancia tipo caracter llamada is_query

//colocamos este codigo en el open de windowis_query = dw_reporte.Describe("DataWindow.Table.Select")

//Antes de hacer el retrieve de la DW hariamos algo como estostring ls_query

ls_query = is_queryif ddlb_deptos.text <> 'TODOS' then   ls_query = ls_query + " and dbo.gl_emp.emp_d03 = '" + trim(ddlb_deptos.text) + "'"end if ls_query = 'DataWindow.Table.Select = "' + ls_query + '"'ls_res = dw_reporte.Modify(ls_query)

if ls_res = "" then   dw_reporte.retrieve(gi_cia_ot,ddlb_tip_nom.text,ls_fec_ini,ls_fec_fin,ddlb_deptos.text)

else   MessageBox("Error","Falla al modificar la query de la datawindow ~n" + ls_res)end if Publicado por Adolfo Chairez en 9:32 a.m. No hay comentarios:

Page 18: Power Builder

Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: DW Describe, DW modify, DW SQL, Modifcación SQL DW tiempo ejecución, sql embebido

Como leer una web cam (por probar)

Como estas Juan, yo estoy tratando de hacer lo mismo y por lo que he averiguado existe una funcion api para hacer esto..pero no he logrado que funcione bien.. este es el codigo:

//Local external functionfunction ulong capCreateCaptureWindowA(string lpszWindowName,ulong dwStyle,long li_x ,long li_y ,long nWidth ,long nHeight ,ulong ParentWin ,long nId ) LIBRARY 'AVICAP32.DLL'

//Instance VariablesUint lhandConstant long GET_FRAME = 1084Constant long COPY = 1054Constant long WM_USER = 1024Constant long WM_CAP_START = WM_USERConstant long WM_CAP_STOP = WM_CAP_START + 68Constant long WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10Constant long WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11Constant long WM_CAP_SAVEDIB = WM_CAP_START + 25Constant long WM_CAP_GRAB_FRAME = WM_CAP_START + 60Constant long WM_CAP_SEQUENCE = WM_CAP_START + 62Constant long WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20Constant long WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63Constant long WM_CAP_SET_OVERLAY =WM_CAP_START+ 51Constant long WM_CAP_SET_PREVIEW =WM_CAP_START+ 50Constant long WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6Constant long WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2Constant long WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3Constant long WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5Constant long WM_CAP_SET_SCALE=WM_CAP_START+ 53Constant long WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52

Long wm_cap_savedatdib = 1049Long wm_cap_dlg_videoformat = 1065Long wm_cap_dlg_videosource = 1066Long wm_cap_dlg_videodisplay = 1067Long wm_cap_get_videoformat = 1068Long wm_cap_set_videoformat = 1069Long wm_cap_dlg_videocompression = 1070

Page 19: Power Builder

Long cf_bitmap = 2Long wm_close = 16Ulong scrcopy = 32string gs_pic_pathstring gs_cd_pathstring gs_pathstring gs_ds_picstring gs_ds_cdstring gs_cd_rqlong gl_pic_sj = 0

//Boton inicia camara

string lpszNameulong l1l1=handle(parent)

lpszName='webcam.'lhand=capCreateCaptureWindowA(lpszName,262144+12582912+1073741824 + 268435456 ,10,10,200,200,l1,0)if lhand <> 0 thensend(lhand, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0)send(lhand, WM_CAP_SET_CALLBACK_ERROR, 0, 0)send(lhand, WM_CAP_SET_CALLBACK_STATUSA, 0, 0)

send(lhand, WM_CAP_DRIVER_CONNECT, 0, 0)send(lhand, WM_CAP_SET_SCALE, 1, 0)send(lhand,WM_CAP_GRAB_FRAME, 0, 0)Send(lhand, WM_CAP_SAVEDIB, 0, 0)send(lhand, WM_CAP_SET_PREVIEWRATE, 66, 0)send(lhand, WM_CAP_SET_OVERLAY, 1, 0)send(lhand, WM_CAP_SET_PREVIEW, 1, 0)end if

//boton grabar imagenstring s_maps_map='c:save.bmp'if FileExists(s_map) then FileDelete(s_map)if lhand <> 0 then

Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0,s_map);p_2.visible = truest_1.visible = falsep_1.picturename = s_mapSendMessage(lhand, WM_CAP_DRIVER_DISCONNECT, 0, 0)lhand =0this.enabled = false

Page 20: Power Builder

cb_1.enabled = trueend if

//Boton captura videostring ss='c:save.avi'if lhand <>0 thenSend(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0, s);Send(lhand,WM_CAP_SEQUENCE, 0, 0)end if

Ojala te sirva de algo..si tu lo lograste hacer funcionar..te agradeceria que me indcaras como hacerlo..mi correo es [email protected]

saludos.

Publicado por Adolfo Chairez en 9:31 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como leer la fecha y hora del servidor de la bd a la que me conecté

datetime ldt_fechadate ld_fechaSTRING ls_query

if sqlca.sqlcode = -1 then messagebox("Error",sqlca.sqlerrtext) returnend if

ls_query = "SELECT getdate()"DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA;PREPARE SQLSA FROM :ls_query;OPEN cur_sup;

if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext)else FETCH cur_sup INTO :ldt_fecha;CLOSE cur_sup;end ifld_fecha = date(ldt_fecha)

Page 21: Power Builder

messagebox("dato","La fecha y hora del servidor es " + string(ldt_fecha))messagebox("dato","La fecha del servidor es " + string(ld_fecha))Publicado por Adolfo Chairez en 9:31 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como leer el numero de serie de mi disco duro

Dentro de la seccion Declare agregar esta línea en Global External functionsFUNCTION long VolSerialNum (string lpRootPathName, string pVolumeNameBuffer, long nVolumeNameSize, REF long lpVolumeSerialNumber, long lpMaximumComponentLength, long lpFileSystemFlags, string lpFileSystemNameBuffer, long nFileSystemNameSize) LIBRARY "kernel32.dll" ALIAS FOR "GetVolumeInformationA;Ansi"

Creamos una funcion a nivel proyecto llamada obten_nserie que regrese string y tenga un solo parámetro pasado por valor del tipo string llamado par_unidad

string cad1, cad2long numSerie = 0, longitud, flag

VolSerialNum(par_unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)return string(numSerie)

En el script del componente que necesitemos ponemos esto:

string ls_num_serie

ls_num_serie = obten_nserie("C:\")Publicado por Adolfo Chairez en 9:31 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como mostar archivos PDF en mi window

Se inserta un ole object llamado Adobe PDF reader

y el script para leer es:

ole_manual.object.LoadFile("C:\temp2\DIRECTOR COMERCIAL 5.PDF")ole_manual.object.printall()Publicado por Adolfo Chairez en 9:30 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Page 22: Power Builder

Como dar de alta manual la impresora Sybase DataWinwos para poder generar PDF's

Descargar el driver para 64 bits del controlador de:   http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/8.70/

Despues de la descargar correr el programa gs870w64.exe asegurandonos que se instale en C:\Program Files\gs o su equivalente en español

Abrimos el panel de control - Impresoras

Agregamos una impresora nueva

Seleccionamos Impresora local

Seleccionamos Usar puerto existente y seleccionar Imprimir en Archivo

Seleccionar usar contolador y seleccionar la carpeta C:\Program Files\gs y seleccionar el archivo ghostpdf.inf

Nombrar a la nueva impresora como "Sybase DataWindow PS" exactamente Publicado por Adolfo Chairez en 9:30 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con FacebookEtiquetas: exportar a PDF, ghostscrp, PDF, Sybase DataWindows PS

Como guardar y recuperar una imagen

1.- Debemos modificar c:\archivos de programa\sybase\shared\powerbuilder\pbodb105.ini (o en su caso la version que sea. ejm.pb0db12.ini) y localizar lo siguientePBMaxBlobSize='32767'PBMaxTextSize='32767'y cambiarlo porPBMaxBlobSize='2147483647'PBMaxTextSize='32767000'

2.- Para este ejemplo debemos de tener la siguiente tabla:CREATE TABLE dbo.nada(   clave  int         IDENTITY,    nombre longsysname NULL,    foto   image       NULL) En la ventana debemos crear 3 controles un single line edit llamado sle_clave.text un boton guardar y un boton leer.

Page 23: Power Builder

Para el botón Guardar:string ls_pathname, ls_filename, ls_filtrointeger li_clave, li_fileblob lb_usu_foto, lb_temp

ChangeDirectory("C:\Documents and Settings\COR_ACHAIREZ\Mis documentos\Mis imágenes")

ls_filtro = "JPEG Files (*.jpg),*.jpg," + "GIFF Files (*.gif),*.gif, BMP (*.bmp)"if GetFileOpenName("Archivo de Imagen:", ls_pathname, ls_filename , "jpg", ls_filtro) = 0 then return

li_file = FileOpen(ls_pathname, StreamMode!)if li_file = -1 then messagebox('Error','Falló la apertura del archivo imagen',stopsign!) returnelse li_clave = integer(sle_clave.text) DO WHILE FileRead(li_file,lb_temp) > 0 lb_usu_foto += lb_temp LOOP FileClose(li_file) p_foto.SetPicture(lb_usu_foto) UPDATEBLOB nada SET foto = :lb_usu_foto WHERE clave = :li_clave; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query actualiza foto~n~r" + sqlca.sqlerrtext, stopsign!) return end ifend if

Para el boton leer:integer li_claveBlob lb_usu_fotolong ll_i

li_clave = integer(sle_clave.text)SELECTBLOB foto INTO :lb_usu_foto FROM nada WHERE clave = :li_clave;if sqlca.sqlcode = -1 then messagebox("Error","No se pudo recuperar imagen" + sqlca.sqlerrtext, StopSign!) return

Page 24: Power Builder

end ifp_foto.setpicture(lb_usu_foto)

Publicado por Adolfo Chairez en 9:27 a.m. 6 comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como evitar aplicacion en la barra

¿ Como evitar que mi Aplicación se vea en la barra de tareas de Windows ?

    Primero declara la sig. funcion externa:

    FUNCTION ulong SetWindowLongA( ulong hWnd, int nIndex, long newValue ) LIBRARY "user32.dll"

    Agrega el sig. Script en el evento OPEN de tu ventana.

    Long ll_RC

    ll_RC = SetWindowLongA(Handle(This), -20, 128)    IF ll_RC = 0 THEN        // function call failed    END IF

Publicado por Adolfo Chairez en 9:27 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como enviar un mensaje a una dirección IP

Si se cambia la dirección IP por u nombre no funciona.

net send 194.0.1.193 "terminó leon" Publicado por Adolfo Chairez en 9:27 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como enviar un mail 2 formas

La forma facil://send e-mailString ls_Null

Page 25: Power Builder

SetNull (ls_Null)ShellExecute (0, ls_Null, "mailto:" + Text + "&subject=PB%20SysTray%20v%20example" , ls_Null, ls_Null, SW_SHOWNORMAL)

La Forma elaborada:string docname, named,ls_errorinteger value

mailSession sesion_mailmailReturnCode codigo_retornomailMessage mensaje_mailmailFileDescription mensaje_archivo

sesion_mail = create mailSession

/*Intenta la conexcion mail*/codigo_retorno = sesion_mail.mailLogon(mailNewSession!)

If codigo_retorno <> mailReturnSuccess! Then Destroy sesion_mail //Si existe algun error en la conexion cancelar y salir Choose Case codigo_retorno Case mailReturnLoginFailure! ls_error = "Usuario/Password incorrecto(s)" Case mailReturnInsufficientMemory! ls_error = "Memoria insuficiente" Case mailReturnTooManySessions! ls_error = "Demasiadas sesiones abiertas" Case mailReturnUserAbort! ls_error = "Cancelación por usuario" End Choose Messagebox("Error",ls_error,Information!)Else

mensaje_mail.Subject = 'Saludos' mensaje_mail.notetext = 'Este mail fue enviado desde una aplicacion PB, si te interesa el codigo escribeme. Saludos'

//Aqui viene el destino, como podras ver es un arreglo, //es decir el recipient[2] seria poner otro destino mensaje_mail.recipient[1].address = '[email protected]'

//Aqui viene los archivos adjuntos que tambien son un arreglo, //Se puede sacar este codigo a un boton de tal forma que se puedrian agregar tantos archivos

Page 26: Power Builder

//como fuese necesario, habria que cuidar el contador del array del Attachmentfile value = GetFileOpenName("Selecciona el archivo a enviar por mail",docname,named,"All","All Files (*.*),*.*")

If value = 1 Then mensaje_archivo.filename = docname mensaje_archivo.pathname = docname mensaje_mail.AttachmentFile[1] = mensaje_archivo End if codigo_retorno = sesion_mail.mailResolveRecipient(mensaje_mail.Recipient[1].Name) if codigo_retorno <> mailReturnSuccess! Then messagebox("Error","No se pudo resolver la siguiente direccion "+ls_dir_mail) else   codigo_retorno = sesion_mail.mailsend(mensaje_mail) if codigo_retorno <> mailReturnSuccess! then ls_error = "El mail no pudo ser enviado por: " Choose Case codigo_retorno Case mailReturnInsufficientMemory! ls_error = ls_error + "Memoria insuficiente" Case mailReturnUserAbort! ls_error = ls_error + "Cancelado por usuario" Case mailReturnDiskFull! ls_error = ls_error + "Disco duro lleno" Case mailReturnTooManySessions! ls_error = ls_error + "Demasiadas sesiones abiertas" Case mailReturnTooManyFiles! ls_error = ls_error + "Demasiados archivos" Case mailReturnTooManyRecipients! ls_error = ls_error + "Demasiados destinatarios" Case mailReturnUnknownRecipient! ls_error = ls_error + "Destinatario(s) desconocido(s)" Case mailReturnAttachmentNotFound! ls_error = ls_error + "Archivo adjunto no hallado" End Choose messagebox("Error",ls_error,Information!) end if end ifEnd IfPublicado por Adolfo Chairez en 9:26 a.m. 1 comentario: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como ejecutar una aplicacion y esperar a que termine

Normalmente desde PB tu lanzas una aplicación con el comando Run se lanza la aplicacion

Page 27: Power Builder

y PB sigue con la ejecución del script sin esperar a que terminar la aplicación, aqui una forma de lanzar una aplicación y esperar a  que termine.

OleObject wshinteger  li_rc

CONSTANT integer MAXIMIZED = 3CONSTANT integer MINIMIZED = 2CONSTANT integer NORMAL = 1CONSTANT boolean WAIT = TRUECONSTANT boolean NOWAIT = FALSE

wsh = CREATE OleObjectli_rc = wsh.ConnectToNewObject( "WScript.Shell" )

li_rc = wsh.Run("Notepad" , NORMAL, WAIT)messagebox("hello", "world")Publicado por Adolfo Chairez en 9:26 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como ejecutar una query dinamicamente

ls_query = "SELECT a.emp_id,emp_nom from emp_dat_adi a,gl_emp b WHERE a.emp_cia = "ls_query = ls_query + string(gi_cia_ot) +" and b.emp_cia = a.emp_cia and Emp_Feb <> ' ' and "ls_query = ls_query + "niv_descrip = 'SUPERVISOR' and a.emp_id = b.emp_id"

if depto <> 'TODOS' then ls_query = ls_query + " and emp_d03 = '"+depto+"'" DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA;PREPARE SQLSA FROM :ls_query;OPEN cur_sup;

if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext)else DO FETCH cur_sup INTO :ls_numero,:ls_nombre; if sqlca.sqlcode = 0 then ddlb_supervisor.additem(ls_nombre) lb_supervisor.additem(ls_numero) end if LOOP WHILE sqlca.sqlcode = 0

Page 28: Power Builder

CLOSE cur_sup;end if

/* Si lo que queremos es ejecutar una instruccion para modificar tablas no usar las instruccionesanteriores sino esta*/EXECUTE IMMEDIATE :ls_query;if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE~n"+sqlca.sqlerrtext)end if

// Para un segundo canal dinámicoEn el declare de la window:DynamicStagingArea SQLSA2

En el open:SQLSA2 = CREATE DynamicStagingArea

En el closeDESTROY SQLSA2

// En un servidor sql como un STORE PROCEDURECREATE PROCEDURE sp_nada(@ls_columna varchar(15))ASBEGIN    DECLARE @ls_query AS varchar(256)       SET @ls_query = "INSERT nada(clave,nombre,"+@ls_columna+") "    SET @ls_query = @ls_query + "SELECT cla_clave, ven_periodo, ven_cantidad FROM venta WHERE cla_clave = '08' AND ven_periodo = '200910'"       EXECUTE(@ls_query)ENDPublicado por Adolfo Chairez en 9:24 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como ejecuar un Store Procedure

string ls_query

ls_query = "execute sp_saldos '012','02/03/2009'"EXECUTE IMMEDIATE :ls_query;if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE~n~r"+sqlca.sqlerrtext)

Page 29: Power Builder

returnend if

//En el server corremos:CREATE PROCEDURE dbo.sp_nada(@ls_cen char(3), @fec_ini datetime, @fec_fin datetime)ASBEGIN    SELECT centraliza, nombre from sicentra    WHERE centraliza = @ls_cenEND

// En la aplicacion creamos:string ls_centraliza, ls_nombre, ls_cen

ls_cen = '001'DECLARE sp_prueba PROCEDURE FOR sp_nada(:ls_cen);EXECUTE sp_prueba;

if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar el stored procedure prueba~n"+sqlca.sqlerrtext)else DO FETCH sp_prueba INTO :ls_centraliza, :ls_nombre; if sqlca.sqlcode = 0 then messagebox("info", ls_centraliza + " " + ls_nombre, Information!) end if LOOP WHILE sqlca.sqlcode = 0 end ifCLOSE sp_prueba;Publicado por Adolfo Chairez en 9:23 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como usar COMMIT y ROLLBACK

Este es un ejemplo de como se utiliza el commit junto con el rollback, este código va en el botón guardar:

li_cliente = integer(sle_cli_clave.text)li_factura = integer(sle_fac_numero.text)

ls_query = "BEGIN TRANSACTION" EXECUTE IMMEDIATE :ls_query;if sqlca.sqlcode = -1 then

Page 30: Power Builder

messagebox("Error","En el commando EXECUTE IMMEDIATE para BEGIN TRAN~n"+sqlca.sqlerrtext) lb_error = true goto FIN end if

INSERT factura VALUES(:li_factura, :li_cliente, :ld_hoy, :ld_importe);if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query inserta factura~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FINend if

INSERT factura_det VALUES(:li_factura, 1, :sle_articulo.text, :ld_importe,'sd');if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query inserta detalle factura~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FINend if

UPDATE clientes SET cli_saldo = cli_saldo + :ld_importe WHERE cli_clave = :li_cliente;if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query actualiza saldo de clientes~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FINend if

FIN:if lb_error then ls_query = "ROLLBACK TRANSACTION" else ls_query = "COMMIT TRANSACTION" messagebox("Informacion","Factura grabada exitosamente", Information!)end ifEXECUTE IMMEDIATE :ls_query USING SQLCA;if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE " + ls_query + "~n~r" + sqlca.sqlerrtext)

end if Publicado por Adolfo Chairez en 9:23 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como ejecutar una aplicacion OLE

Page 31: Power Builder

OLEObject NiceObjectlong ll_labelid,ll_status

NiceObject = Create OLEObjectll_status = NiceObject.ConnectToNewObject("NiceLabel.Application")if ll_status <> 0 then messagebox("Error","No se pudo crear el objecto Nice Label",StopSign!)else ll_labelid = NiceObject.LabelOpen("c:\embarque\eti_sor.lbl") NiceObject.LabelPrint(ll_labelid,"VARIABLE") NiceObject.LabelClose(ll_labelid) NiceObject.Quitend ifDestroy NiceObjectPublicado por Adolfo Chairez en 9:22 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como crear un segundo canal de comunicacion

//Declarar en varialbe global o de instanciatransaction sqlca2

//Y en el open de la windowsqlca2 = Create transaction

// conectamos a la bdSQLCA2.DBMS = "ODBC"SQLCA2.AutoCommit = TrueSQLCA2.DBParm = "ConnectString='DSN=HRMSSYS;UID=ACHAIREZ;PWD=CHAIREZ'"Connect using sqlca2;

// en close de la ventana o del proyectodisconnect using sqlca2;destroy sqlca2Publicado por Adolfo Chairez en 9:21 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como copiar datos desde un DW a celdas especificas de una Hoja de Excel

El siguiente script  copia todas las filas de un datawindow a un archivo de excel existente.

Page 32: Power Builder

Con esto usted puede aprender la manera de enviar datos desde una aplicación de Power Builder a celdas especificas de un archivo de excel.El ejemplo copia la fila 1 columna 1 del datawindow a la fila1 columna1 de una hoja existente de excel, y asi con todas las celdas. Usted puede modificar este script para enviar solamente las celdas que usted necesite.En este ejemplo se abre un archivo localizado en c:ejemplo.xls pero usted debe modificar el directorio y el nombre del archivo para que abra un archivo existente de excel en su disco duro. En la parte final del código esta la posibilidad de descomentar las funciones para guardar el archivo, o guardarlo con otro nombre.El código es el siguiente:

long ll_numcols , ll_numrows , ll_c, ll_rOLEObject xlapp , xlsubint li_ret

// Coloca el número de columnas y filas a copiar// Este script copia todo el DW pero ud puede solo copiar las celdas que desee

ll_numcols = long(dw_1.Object.DataWindow.Column.Count)ll_numrows = dw_1.RowCount()

// Crea el oleobject en la variable xlappxlApp = Create OLEObject

// Se conecta a Excel y verifica el código de retornoli_ret = xlApp.ConnectToNewObject( "Excel.Sheet" )if li_ret < 0 then    MessageBox("Error Conectandose a Excel !",string(li_ret))    returnend if

// Abre un archivo especifico de ExcelxlApp.Application.Workbooks.Open("c:ejemplo.xls") //,false,true

// Hace Excel visiblexlApp.Application.Visible = truexlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]

// El for/next loop copia todas las filas de cada columnaFor ll_c = 1 to ll_numcols    For ll_r = 1 to ll_numrows        xlsub.cells[ll_r,ll_c] = dw_1.object.data[ll_r,ll_c]    NextNext

// Guarda el archivo abierto

Page 33: Power Builder

//xlApp.Application.Activeworkbook.Save()

// Guarda el arvhivo con diferente nombre//xlApp.Application.Activeworkbook.SaveAs("c:ejemplo2.xls")

// se desconecta de excelxlApp.DisConnectObject()Destroy xlapp

Publicado por Adolfo Chairez en 9:21 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como "barrer" una DW en función del valor de ciertos campos

En alguna ocasión debía de recorrer una DW en función del contenido de ciertos campos de otra DWla dw_mig610301r es la DW maestra la recorremos obteniendo centraliza, nvo_suc y nvo_contra luego se recorre la DW dw_mig610401r mediante la instrucción find se arma una cadena de caracters con ls_cad que el criterio de búsqueda

for ll_i = 1 to dw_mig610301r.rowcount() ls_centraliza = dw_mig610301r.getitemstring(ll_i,"centraliza") ls_nvo_suc = dw_mig610301r.getitemstring(ll_i,"nvo_suc") ls_nvo_contra = dw_mig610301r.getitemstring(ll_i,"nvo_contra") //Barremos la datawindow que contiene los contratos con todos sus status y sus datos ll_j = 1 DO ls_cad="centraliza='"+ls_centraliza+"' and nvo_suc='"+ls_nvo_suc+"'and nvo_contra='"+ls_nvo_contra+"'" ll_j = dw_mig610401r.find(ls_cad,ll_j,dw_mig610401r.rowcount()) if ll_j <> 0 then ls_status = dw_mig610401r.getitemstring(ll_j,"status") if ll_j = dw_mig610401r.rowcount() then ll_j = 0 else ll_j++ end if end if LOOP WHILE ll_j <> 0nextPublicado por Adolfo Chairez en 9:18 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Page 34: Power Builder

Como actualizar una tabla desde otra

UPDATE mig930501r    SET mig930501r.pre_venta = simaplan.tot_eng    FROM mig930501r, simaplan    WHERE mig930501r.usu_clave = 'ADOLFO'    AND simaplan.centraliza = mig930501r.centraliza    AND simaplan.folio = mig930501r.folio    AND simaplan.cve_paq = mig930501r.cve_paq    AND LTRIM(simaplan.cve_plan) = 'CONTA'    AND simaplan.no_descto = '00000'    AND simaplan.cve_det = mig930501r.deter

UPDATE considoc    SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen = considoc.centraliza)Publicado por Adolfo Chairez en 9:13 a.m. No hay comentarios: Enviar por correo electrónico Escribe un blog Compartir con Twitter Compartir con Facebook

Como accesar datos de una dw mas eficientemente

Recorrer una DW cuando es pequeña no tien mayor dificultad pero cuando dicha DW es muy muy grande recorrerla puede ser todo un tema.

Esta es la forma mas traidicional de recorrer una DWinteger li_data

FOR li_cnt = 1 to 100    li_data = dw_1.Object.emp_salary[li_cnt]    .. // Code to process data value

NEXT

Esta es una forma mas optima de recorrer la DW

integer li_dataDWObject dwo_empsalary

dwo_empsalary = dw_1.Object.emp_salary

Page 35: Power Builder

FOR li_cnt = 1 to 100    li_data = dwo_empsalary.Primary[li_cnt]    .. // Code to process data value

NEXT