December 20, 2016 | Author: luis_rodriguez_295 | Category: N/A
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ónicoEscribe 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 parámetros 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 vídeo esta en esta dirección: http://www.mediafire.com/?6gltk93s9do7c2t podrá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ónicoEscribe 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 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ónicoEscribe 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 días de descanso para Nomina en México
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ónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 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
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 electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: temp table, variable table
Como convertir un numero a su expresión en letras
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ónicoEscribe 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 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.
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 electrónicoEscribe 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
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 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 pequeño truco pero efectivo que a continuacion te lo enseñamos. 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
Como modificar la sentencia SQL de una DW en tiempo de ejecución
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 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 electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
Etiquetas: 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 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
[email protected] saludos. Publicado por Adolfo Chairez en 9:31 a.m. No hay comentarios: Enviar por correo electrónicoEscribe 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 electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
Como leer el numero de serie de mi disco duro Dentro de la seccion Declare agregar esta línea 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 parámetro 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 electrónicoEscribe 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 electrónicoEscribe 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 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ónicoEscribe 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 botón 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 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!) 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 electrónicoEscribe un blogCompartir con TwitterCompartir 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ónicoEscribe un blogCompartir con TwitterCompartir 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ónicoEscribe 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 = "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
//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 electrónicoEscribe un blogCompartir con TwitterCompartir 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
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 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 electrónicoEscribe 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 dinámico 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 electrónicoEscribe 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 electrónicoEscribe 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 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
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 electrónicoEscribe 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 electrónicoEscribe 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 electrónicoEscribe 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 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_r OLEObject xlapp , xlsub int 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 xlapp xlApp = Create OLEObject // Se conecta a Excel y verifica el código 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 electrónicoEscribe un blogCompartir con TwitterCompartir 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 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 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 0 next Publicado por Adolfo Chairez en 9:18 a.m. No hay comentarios: Enviar por correo electrónicoEscribe 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 electrónicoEscribe un blogCompartir con TwitterCompartir 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 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