Está en la página 1de 35

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 funcin CONVERT, esta funcin 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 cdigo 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: funcion convert, funcion sql, separador miles sq

viernes, 9 de marzo de 2012


Paso de parmetros variables entre Windows y uso del Entry

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 vdeo esta en esta direccin: http://www.mediafire.com/?6gltk93s9do7c2t podrn encontrar una funcin que utilizo mucho es Entry recibe como parmetros un string una posicin y caracter de separacin y resresa el valor indicado por posicin, luego les muestro un ejemplo de como usar entry. Publicado por Adolfo Chairez en 4:51 p.m. 1 comentario: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: Parametros PowerBuilder, paso parametros entre ventanas, windows parameters

Funcion en SQL para calcular el ISR Nomina Mexico

En Mxico 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 direccin pueden descargar tanto la definicin de tablas sus valores como la funcin, este permitir calcular el ISR para nominas de perodos 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 parmetros el primero es la base gravable de los ingresos del trabajador en el perodo OJO dije ingresos gravables no total de ingresos si tienen dudas escribnme, el segundo parmetro es el tipo de perodo 1 es semanal, 2 quincenal y 3 es mensual y ltimo parmetro es el ao. 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: calculo isr, calculo nomina, descuento isr, isr nomina, ISR sueldos y salarios

Calculo de das de descanso para Nomina en Mxico

Cuando realizamos el calculo de una nomina necesitamos saber si el da es descanso de ley o no, en Mxico antes los das de descanso eran fijos ahora son variables eso que significa, que para disfrutar del da de descanso por aniversario de la revolucin mexicana debemos calcular cual ser el tercer lunes del mes de noviembre.

La siguiente liga contiene la definicin de una tabla que contendr los das 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 funcin compatible para servidores SQL: http://www.mediafire.com/?nfoc2sbfxsrcvp8 Publicado por Adolfo Chairez en 9:38 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces 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'

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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: update 2 tablas, update from

Como crear un store procedure que regrese valores


CREATE PROCEDURE PruebaRegreso @Cant Int AS BEGIN SET @Cant = @Cant + 1 RETURN @Cant END go

DECLARE @regreso INTEGER EXEC @regreso = PruebaRegreso 81 PRINT @regreso --debug imprime 82

Publicado por Adolfo Chairez en 10:44 a.m. 1 comentario: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces 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

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 and syscolumns.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_tabla order by 1;

Publicado por Adolfo Chairez en 10:44 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces 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:

Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces 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 pequeo 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 sera al revs:
DECLARE @st datetime

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 temporales SET @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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: temp table, variable table

Como convertir un numero a su expresin en letras

A veces necesitamos convertir un importe a letras, aqui les traigo la funcin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: convertir numeros, numero a letras

11 Formatos de fecha en SQL


Ahora les tengo una funcin en SQL que recibe un dato tipo DateTime y regresa una cadena de caracteres correspondiente al valor del paremtro DateTime y se puede seleccionar 1 de 11 formatos para expresar dicha fecha con y sin hora, esta funcin 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.

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 Forfec http://www.mediafire.com/?9v7446agt5b8bhf

Publicado por Adolfo Chairez en 8:44 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada

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

mircoles, 7 de marzo de 2012


Como cambiar el color de las lineas de una DW
Este es cdigo que se ve en la imagen en el punto 3 IF(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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: alternar colores en registros, alternate color, background color, powerbuilder band

Como tocar un archivo wav


Private Constant Long SND_APPLICATION = 128 // look for application specific association Private Constant Long SND_ALIAS = 65536 // name is a WIN.INI [sounds] entry Private Constant Long SND_ALIAS_ID = 1114112 // name is a WIN.INI [sounds] entry identifier Private Constant Long SND_ASYNC = 1 // play asynchronously Private Constant Long SND_FILENAME = 131072 // name is a file name Private Constant Long SND_LOOP = 8 // loop the sound until next sndPlaySound Private Constant Long SND_MEMORY = 4 // lpszSoundName points to a memory file Private Constant Long SND_NODEFAULT = 2 // silence not default, if sound not found Private Constant Long SND_NOSTOP = 16 // don't stop any currently playing sound Private Constant Long SND_NOWAIT = 8192 // don't wait if the driver is busy Private Constant Long SND_PURGE = 64 // purge non-static events for task Private Constant Long SND_RESOURCE = 262148 // name is a resource name or atom Private 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: wav play

Como usar bcp


--exportar de sql a tabla txt bcp mig2.dbo.sidetcon_bcp out sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur --Tabla nativa bcp mig2.dbo.sidetcon out sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur --Esta opcion exporta a tabla con TAB separator bcp 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 sql bcp 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: bcp sql

Como simular un tab con el enter en una dw


Muchos programadores, han encontrado la necesidad de pasar de un campo a otro del datawindow con Enter. Para esto se debe hacer un pequeo truco pero efectivo que a continuacion te lo enseamos. En el datawindow se define un evento de usuario con un nombre cualquiera y que se inicie cuando opriman enter, para eso seleccione el event ID pbm_dwnprocessenter. Luego como el evento se dispara cuando oprimen el enter, lo que se hace es enviar un tab en ese evento. El codigo que debe 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 datawindow con el enter y con tab. Para darle una secuencia ordenada debes abrir el DW Format- Tab Order y ver que los codigos asignados a cada campo estan de forma ascendente 10, 20,, 30, etc. Saludos Publicado por Adolfo Chairez en 9:36 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como selecciono un archivo


integer li_rtn string 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: abrir archivo en powerbuilder, fileopen, getfileopen

Como obtengo las columnas de una datawindow

//dw_free es el control datawindows string ls_tabla, ls_columna integer 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_j string 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 columna ls_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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: columnas de una dw, datawindow

Como pasar parametros entre ventanas

Suponemos que la ventana w_pro_lot llama a la ventana w_cap_dat para que esta ultima captura unos 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 como parametros puede utilizarse tambien para el objeto message WordParm tipo de dato long LongParm tipo de dato long DoubleParm tipo de dato double (numeric) StringParm tipo de dato string PowerObjectParm tipo de dato objecto (incluyendo estructuras) Publicado por Adolfo Chairez en 9:34 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir 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 centraliza Publicado por Adolfo Chairez en 9:33 a.m. No hay comentarios:

Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como obtener los fonts instalados


string ls_name,ls_key, ls_subkeylist[] integer li_rtn integer li_pic, li_position,lpos ls_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) Next END 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como modificar la sentencia SQL de una DW en tiempo de ejecucin

Este vdeo demuestra que si es posible modificar en tiempo de ejecucin la sentencia SQL embebida en un DW. Vean el video desde youtube se ve mejor. Direccin para descargar el proyecto que se ve en el video, incluye la creacin y llenado de las tablas: http://www.mediafire.com/?2n2x51tta17wmnj CODIGO BSICO: //declaramos una variable de instancia tipo caracter llamada is_query //colocamos este codigo en el open de window is_query = dw_reporte.Describe("DataWindow.Table.Select") //Antes de hacer el retrieve de la DW hariamos algo como esto string ls_query ls_query = is_query if 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: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Etiquetas: DW Describe, DW modify, DW SQL, Modifcacin SQL DW tiempo ejecucin, 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 function function ulong capCreateCaptureWindowA(string lpszWindowName,ulong dwStyle,long li_x ,long li_y ,long nWidth ,long nHeight ,ulong ParentWin ,long nId ) LIBRARY 'AVICAP32.DLL' //Instance Variables Uint lhand Constant long GET_FRAME = 1084 Constant long COPY = 1054 Constant long WM_USER = 1024 Constant long WM_CAP_START = WM_USER Constant long WM_CAP_STOP = WM_CAP_START + 68 Constant long WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 Constant long WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 Constant long WM_CAP_SAVEDIB = WM_CAP_START + 25 Constant long WM_CAP_GRAB_FRAME = WM_CAP_START + 60 Constant long WM_CAP_SEQUENCE = WM_CAP_START + 62 Constant long WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20 Constant long WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63 Constant long WM_CAP_SET_OVERLAY =WM_CAP_START+ 51 Constant long WM_CAP_SET_PREVIEW =WM_CAP_START+ 50 Constant long WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6 Constant long WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2 Constant long WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3 Constant long WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5 Constant long WM_CAP_SET_SCALE=WM_CAP_START+ 53 Constant long WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52 Long wm_cap_savedatdib = 1049 Long wm_cap_dlg_videoformat = 1065 Long wm_cap_dlg_videosource = 1066 Long wm_cap_dlg_videodisplay = 1067 Long wm_cap_get_videoformat = 1068 Long wm_cap_set_videoformat = 1069 Long wm_cap_dlg_videocompression = 1070 Long cf_bitmap = 2 Long wm_close = 16

Ulong scrcopy = 32 string gs_pic_path string gs_cd_path string gs_path string gs_ds_pic string gs_ds_cd string gs_cd_rq long gl_pic_sj = 0 //Boton inicia camara string lpszName ulong l1 l1=handle(parent) lpszName='webcam.' lhand=capCreateCaptureWindowA(lpszName,262144+12582912+1073741824 + 268435456 ,10,10,200,200,l1,0) if lhand <> 0 then send(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 imagen string s_map s_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 = true st_1.visible = false p_1.picturename = s_map SendMessage(lhand, WM_CAP_DRIVER_DISCONNECT, 0, 0) lhand =0 this.enabled = false cb_1.enabled = true end if

//Boton captura video string s s='c:save.avi' if lhand <>0 then Send(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 aagomezp@hotmail.com saludos. Publicado por Adolfo Chairez en 9:31 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

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


datetime ldt_fecha date ld_fecha STRING ls_query

if sqlca.sqlcode = -1 then messagebox("Error",sqlca.sqlerrtext) return end 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 if ld_fecha = date(ldt_fecha) 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como leer el numero de serie de mi disco duro


Dentro de la seccion Declare agregar esta lnea en Global External functions FUNCTION 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 parmetro pasado por valor del tipo string llamado par_unidad string cad1, cad2 long 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 electrnicoEscribe un blogCompartir con TwitterCompartir 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

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 espaol 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: 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 siguiente PBMaxBlobSize='32767' PBMaxTextSize='32767' y cambiarlo por PBMaxBlobSize='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.

Para el botn Guardar: string ls_pathname, ls_filename, ls_filtro integer li_clave, li_file blob lb_usu_foto, lb_temp ChangeDirectory("C:\Documents and Settings\COR_ACHAIREZ\Mis documentos\Mis imgenes") 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!) return else 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 if end if

Para el boton leer: integer li_clave Blob lb_usu_foto long 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

end if p_foto.setpicture(lb_usu_foto) Publicado por Adolfo Chairez en 9:27 a.m. 6 comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como evitar aplicacion en la barra


Como evitar que mi Aplicacin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como enviar un mensaje a una direccin IP


Si se cambia la direccin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como enviar un mail 2 formas


La forma facil: //send e-mail String ls_Null

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_error integer value mailSession sesion_mail mailReturnCode codigo_retorno mailMessage mensaje_mail mailFileDescription 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 = "Cancelacin 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 = 'achairez@lajat.com.mx' //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

//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 if End If Publicado por Adolfo Chairez en 9:26 a.m. 1 comentario: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como ejecutar una aplicacion y esperar a que termine


Normalmente desde PB tu lanzas una aplicacin con el comando Run se lanza la aplicacion

y PB sigue con la ejecucin del script sin esperar a que terminar la aplicacin, aqui una forma de lanzar una aplicacin y esperar a que termine. OleObject wsh integer li_rc CONSTANT integer MAXIMIZED = 3 CONSTANT integer MINIMIZED = 2 CONSTANT integer NORMAL = 1 CONSTANT boolean WAIT = TRUE CONSTANT boolean NOWAIT = FALSE wsh = CREATE OleObject li_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 electrnicoEscribe un blogCompartir con TwitterCompartir 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

CLOSE cur_sup; end if /* Si lo que queremos es ejecutar una instruccion para modificar tablas no usar las instrucciones anteriores 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 dinmico En el declare de la window: DynamicStagingArea SQLSA2 En el open: SQLSA2 = CREATE DynamicStagingArea En el close DESTROY SQLSA2 // En un servidor sql como un STORE PROCEDURE CREATE PROCEDURE sp_nada(@ls_columna varchar(15)) AS BEGIN 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) END Publicado por Adolfo Chairez en 9:24 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir 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)

return end if

//En el server corremos: CREATE PROCEDURE dbo.sp_nada(@ls_cen char(3), @fec_ini datetime, @fec_fin datetime) AS BEGIN SELECT centraliza, nombre from sicentra WHERE centraliza = @ls_cen END // 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 if CLOSE sp_prueba; Publicado por Adolfo Chairez en 9:23 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como usar COMMIT y ROLLBACK


Este es un ejemplo de como se utiliza el commit junto con el rollback, este cdigo va en el botn 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

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 FIN end 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 FIN end 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 FIN end if

FIN: if lb_error then ls_query = "ROLLBACK TRANSACTION" else ls_query = "COMMIT TRANSACTION" messagebox("Informacion","Factura grabada exitosamente", Information!) end if EXECUTE 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como ejecutar una aplicacion OLE

OLEObject NiceObject long ll_labelid,ll_status NiceObject = Create OLEObject ll_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.Quit end if Destroy NiceObject Publicado por Adolfo Chairez en 9:22 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como crear un segundo canal de comunicacion


//Declarar en varialbe global o de instancia transaction sqlca2 //Y en el open de la window sqlca2 = Create transaction // conectamos a la bd SQLCA2.DBMS = "ODBC" SQLCA2.AutoCommit = True SQLCA2.DBParm = "ConnectString='DSN=HRMSSYS;UID=ACHAIREZ;PWD=CHAIREZ'" Connect using sqlca2; // en close de la ventana o del proyecto disconnect using sqlca2; destroy sqlca2 Publicado por Adolfo Chairez en 9:21 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir 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.

Con esto usted puede aprender la manera de enviar datos desde una aplicacin 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 cdigo esta la posibilidad de descomentar las funciones para guardar el archivo, o guardarlo con otro nombre. El cdigo es el siguiente:

long ll_numcols , ll_numrows , ll_c, ll_r OLEObject xlapp , xlsub int li_ret // Coloca el nmero 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 xlapp xlApp = Create OLEObject // Se conecta a Excel y verifica el cdigo de retorno li_ret = xlApp.ConnectToNewObject( "Excel.Sheet" ) if li_ret < 0 then MessageBox("Error Conectandose a Excel !",string(li_ret)) return end if // Abre un archivo especifico de Excel xlApp.Application.Workbooks.Open("c:ejemplo.xls") //,false,true // Hace Excel visible xlApp.Application.Visible = true xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1] // El for/next loop copia todas las filas de cada columna For 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] Next Next // Guarda el archivo abierto

//xlApp.Application.Activeworkbook.Save() // Guarda el arvhivo con diferente nombre //xlApp.Application.Activeworkbook.SaveAs("c:ejemplo2.xls") // se desconecta de excel xlApp.DisConnectObject() Destroy xlapp Publicado por Adolfo Chairez en 9:21 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como "barrer" una DW en funcin del valor de ciertos campos


En alguna ocasin deba de recorrer una DW en funcin del contenido de ciertos campos de otra DW la dw_mig610301r es la DW maestra la recorremos obteniendo centraliza, nvo_suc y nvo_contra luego se recorre la DW dw_mig610401r mediante la instruccin find se arma una cadena de caracters con ls_cad que el criterio de bsqueda 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 <> 0 next Publicado por Adolfo Chairez en 9:18 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook

Como accesar datos de una dw mas eficientemente

Recorrer una DW cuando es pequea 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 DW integer 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_data DWObject dwo_empsalary dwo_empsalary = dw_1.Object.emp_salary

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

También podría gustarte