Anónimo
Como generar la ayuda en PB 9.0
Me gustaría que me ayudes con algunos problemas que tengo quiero hacer desde mi menu la ayuda, quiero llamar a un documento de word 2007 y estoy trabajando en PB 9.0... Y también como le hago el ejecutable porque ya lo hago pero no se me ejecuta, espero que me ayudes con esto por favor... Y también como puedo hacer con la fecha para que cuando no ingrese la fecha automáticamente se ingrese en lavase de datos...
Respuesta de rume83
1
1
rume83, Tengo mas de 3 años de experiencia en POO, manejo ampliamente...
Pues a lo primero, dentro del menu insertarás un nuevo item llamado ayuda supongo y dentro del script copiaras el sgte código-->
//creamos un objeto Ole
OLEObject ole_object
ole_object = CREATE OleObject
ole_object.ConnectToNewObject("word.application")
//lo abrimos
ole_object.documents.open("c:\ayuda.doc")
ole_object.Visible=true
//luego de que lo cierran destruimos el objeto creado anteriormente
ole_object.DisconnectObject()
DESTROY ole_object
Pues a lo segundo-->
1. Selecciona nuevo y dentro de las opciones de la pestaña project elegirás application y presionarás OK.
2. Aparecer una ventana nueva donde deberás indicar en la opción Executable File Name el nombre de la aplicación, para ello presionaras el botón que esta a la derecha de la opción que mencioné y vas a buscar la carpeta donde se encuentra alojada toda tu aplicación, proporcionas el nombre.exe y presionas Guardar.
3. Resource File Name... Nada
4. Prompt For Overwrite...No
5. Rebuild... Incremental
6. Machine Code.. No
7. Dentro de Version la información de tu aplicación.
8. Dentro de Library deberás marcar(tildar) todos en la columna PBD
9. Por ultimo deberás salvar el proyecto con el botón disponible en el menú para ello y luego presionarás el botón Deploy(es un cubo que esta a la derecha del botón de guardar)
Después de estos pasos ya estará disponible el ejecutable dentro de la carpeta donde se encuentra tu aplicación.
Pues a lo último no?-->
Deberías poner la fecha con un valor por defecto en la misma base de datos, para sql server sería este el ejemplo --> alter table nombre_tabla add campo_fecha not null default getdate();
Podrías también tener la fecha actual por defecto en la misma ventana donde registras los datos, ejemplo --> dw_nombre. SetItem(1, 'campo_fecha', today())
Bueno mauricio.
//creamos un objeto Ole
OLEObject ole_object
ole_object = CREATE OleObject
ole_object.ConnectToNewObject("word.application")
//lo abrimos
ole_object.documents.open("c:\ayuda.doc")
ole_object.Visible=true
//luego de que lo cierran destruimos el objeto creado anteriormente
ole_object.DisconnectObject()
DESTROY ole_object
Pues a lo segundo-->
1. Selecciona nuevo y dentro de las opciones de la pestaña project elegirás application y presionarás OK.
2. Aparecer una ventana nueva donde deberás indicar en la opción Executable File Name el nombre de la aplicación, para ello presionaras el botón que esta a la derecha de la opción que mencioné y vas a buscar la carpeta donde se encuentra alojada toda tu aplicación, proporcionas el nombre.exe y presionas Guardar.
3. Resource File Name... Nada
4. Prompt For Overwrite...No
5. Rebuild... Incremental
6. Machine Code.. No
7. Dentro de Version la información de tu aplicación.
8. Dentro de Library deberás marcar(tildar) todos en la columna PBD
9. Por ultimo deberás salvar el proyecto con el botón disponible en el menú para ello y luego presionarás el botón Deploy(es un cubo que esta a la derecha del botón de guardar)
Después de estos pasos ya estará disponible el ejecutable dentro de la carpeta donde se encuentra tu aplicación.
Pues a lo último no?-->
Deberías poner la fecha con un valor por defecto en la misma base de datos, para sql server sería este el ejemplo --> alter table nombre_tabla add campo_fecha not null default getdate();
Podrías también tener la fecha actual por defecto en la misma ventana donde registras los datos, ejemplo --> dw_nombre. SetItem(1, 'campo_fecha', today())
Bueno mauricio.
Ok gracias voy aprobar y cualquier duda vuelvo a preguntarte... y en eso de la fecha si esta en la base de datos por defecto getdate()... cuando ingreso directo en mysql si le coge pero en la aplicación cuando no ingreso la fecha por defecto me ingresa 1900/01/01 y no le coge la fecha actual que supuestamente debería cogerme cuando no ingresola fecha...
Lo de la fecha 1900/01/01 pasa porque el dato que esta guardando en la base de datos ya posee ese valor, me dirás no puede ser, pero es así, ¿sabes por qué? Pues porque envías un valor 0 tal vez sea porque utilizas una mascara 00/00/00 y ese valor lo toma como 1900/01/01.
Debería setearlo antes de guardarlo
v_fecha = dw_1.getitemdate(1,'campo_fecha')
if isnull(v_fecha) or v_fecha = '00/00/00' then
dw_1.SetItem(1, 'campo_fecha',today())
end if
Avísame como te fue.
Debería setearlo antes de guardarlo
v_fecha = dw_1.getitemdate(1,'campo_fecha')
if isnull(v_fecha) or v_fecha = '00/00/00' then
dw_1.SetItem(1, 'campo_fecha',today())
end if
Avísame como te fue.
Gracias lo voy a probar... y este me sucedió con lo anterior...
1.- Este error me sale para generar la ayuda
Error: Error calling external object function open at line 6 in clicked event of object m_ayuda of m_principal
2.-En el ejecutable ya se me crea todo, se crea el archivo punto dll y el punto exe, pero el punto exe no se abre o como debo hacer para poder abrir el punto exe... y para generar el ejecutable...
1.- Este error me sale para generar la ayuda
Error: Error calling external object function open at line 6 in clicked event of object m_ayuda of m_principal
2.-En el ejecutable ya se me crea todo, se crea el archivo punto dll y el punto exe, pero el punto exe no se abre o como debo hacer para poder abrir el punto exe... y para generar el ejecutable...
En eso de la fecha no me coge los cambios, bueno estoy trabajando con un singlelineedit para ingresar la fecha, ¿y todo esto debe ir en el botón Guardar? ¿O en donde?
Para sacar La fecha que me muestre ya de forma automática del sistema ya esta pero al guardar en la base de datos no se guarda y se pone 01/01/1900 soloescribiendo se guarda la fecha que uno ingresa...
También Como puedo imprimir...
Y También hay como sacar el respaldo(backup) de la base de datos desde la aplicación..
Gracias por tu ayuda y espero que me ayudes con todo esto por favor ... saludos...
Para sacar La fecha que me muestre ya de forma automática del sistema ya esta pero al guardar en la base de datos no se guarda y se pone 01/01/1900 soloescribiendo se guarda la fecha que uno ingresa...
También Como puedo imprimir...
Y También hay como sacar el respaldo(backup) de la base de datos desde la aplicación..
Gracias por tu ayuda y espero que me ayudes con todo esto por favor ... saludos...
Para lo del error que te sale al intentar abrir el documento word de ayuda cambia el código que lo hace por este otro
OLEObject ole_object
integer li_resultado
ole_object = CREATE OleObject
li_resultado = ole_object.ConnectToNewObject("word.application")
IF li_resultado <> 0 THEN
DESTROY ole_object
MessageBox("Error", "No puede conectarse a Word ")
RETURN
END IF
//Abrimos el documento
ole_object.documents.open("c:\ayuda.doc")
ole_object.Visible=true
//Nos desconectamos
ole_object.DisconnectObject()
DESTROY ole_object
Para lo de que aun no te guarda la fecha, pues me dices que lo tienes en un sle_fecha..., entonces supongo que las acciones para guardar lo tienes dentro de un botón guardar, con un script donde tomas la fecha dentro de una variable y luego la pasas al código sql que lo registra... similar a lo siguiente...
date v_fecha
v_fecha = date(sle_fecha.text)
v_campo1=......etc
v_campo2=......etc
insert into tabla (campo1, campo2, campo_fecha) values (v_campo1, v_campo2, v_fecha);
Una pregunta, ¿por qué no utilizas una datawindow para registrar los datos? Supongo que no utilizas una DW por que mencionaste un objeto external sle(singlelineedit)
Para lo de imprimir, pues si recuperas los datos de tu base de datos dentro de una datawindow, dentro del botón imprimir(evento clicked) solo deberías agregar la siguiente línea de código:
dw_nombre.print()
Para lo del ejecutable, ¿te muestra algún error específico? Yo tengo solo esas dll, pero podes buscar dentro de la ayuda que trae el powerbuilder, busca deployment y ahí vas a encontrar cuales son las dll que necesitas de acuerdo a lo que tu aplicación utiliza
Para lo del backup...necesitarás crear un .bat, puede llamarlo backup.bat y lo guardas en algun lugar de tu equipo, supongamos dentro del C directamente, el archivo bat deberá tener esta sintaxis
set FECHA=%date%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
set FILE=C:\\Backups\\Backup_%FECHA%.sql
C:/mysql/bin/mysqldump.exe -h SERVER -uUSER -pPASWWORD -r %FILE% DBNAME
SERVER= nombre_del_servidor, USER=usuario_mysql(supongo root), PASSWORD=obvio, FILE=nombre_archivo y DBNAME=nombre_base_de_datos
C:/mysql/bin/mysqldump.exe.... pon atención a esto, la ubicación del archivo dependerá de donde este instalado el mysql,
y ahora pasamos a PowerBuilder para que hagas el backup
te creas algún botón y dentro del evento clicked el siguiente código
run("c:/backup.bat")
Y ya tienes tu backup
OLEObject ole_object
integer li_resultado
ole_object = CREATE OleObject
li_resultado = ole_object.ConnectToNewObject("word.application")
IF li_resultado <> 0 THEN
DESTROY ole_object
MessageBox("Error", "No puede conectarse a Word ")
RETURN
END IF
//Abrimos el documento
ole_object.documents.open("c:\ayuda.doc")
ole_object.Visible=true
//Nos desconectamos
ole_object.DisconnectObject()
DESTROY ole_object
Para lo de que aun no te guarda la fecha, pues me dices que lo tienes en un sle_fecha..., entonces supongo que las acciones para guardar lo tienes dentro de un botón guardar, con un script donde tomas la fecha dentro de una variable y luego la pasas al código sql que lo registra... similar a lo siguiente...
date v_fecha
v_fecha = date(sle_fecha.text)
v_campo1=......etc
v_campo2=......etc
insert into tabla (campo1, campo2, campo_fecha) values (v_campo1, v_campo2, v_fecha);
Una pregunta, ¿por qué no utilizas una datawindow para registrar los datos? Supongo que no utilizas una DW por que mencionaste un objeto external sle(singlelineedit)
Para lo de imprimir, pues si recuperas los datos de tu base de datos dentro de una datawindow, dentro del botón imprimir(evento clicked) solo deberías agregar la siguiente línea de código:
dw_nombre.print()
Para lo del ejecutable, ¿te muestra algún error específico? Yo tengo solo esas dll, pero podes buscar dentro de la ayuda que trae el powerbuilder, busca deployment y ahí vas a encontrar cuales son las dll que necesitas de acuerdo a lo que tu aplicación utiliza
Para lo del backup...necesitarás crear un .bat, puede llamarlo backup.bat y lo guardas en algun lugar de tu equipo, supongamos dentro del C directamente, el archivo bat deberá tener esta sintaxis
set FECHA=%date%
set FECHA=%FECHA:/=%
set FECHA=%FECHA: =%
set FECHA=%FECHA::=%
set FECHA=%FECHA:,=%
set FILE=C:\\Backups\\Backup_%FECHA%.sql
C:/mysql/bin/mysqldump.exe -h SERVER -uUSER -pPASWWORD -r %FILE% DBNAME
SERVER= nombre_del_servidor, USER=usuario_mysql(supongo root), PASSWORD=obvio, FILE=nombre_archivo y DBNAME=nombre_base_de_datos
C:/mysql/bin/mysqldump.exe.... pon atención a esto, la ubicación del archivo dependerá de donde este instalado el mysql,
y ahora pasamos a PowerBuilder para que hagas el backup
te creas algún botón y dentro del evento clicked el siguiente código
run("c:/backup.bat")
Y ya tienes tu backup
Eso para guardar los datos lo hice así porque no sabia como hacerlo porque primera vez que lo estoy utilizando y slo consultando más o menos entendí y por eso encontré esta página, mmm pero estoy haciendo un proyecto para una óptica y debo guardar más de 50 datos en un solo formulario no se demora o como lo tendría que hacer porque no entiendo como agregar, eliminar, modificar y todo en el datawindows...
Y en eso del ejecutable no me sale ningún error sino que no se como abrir ya la aplicación porque ya se me crea todo eso hasta el punto exe pero no se abre o como debo abrirlo o sera porque esta mal instalado o porque falta librerías o como podría verlo...
Gracias por tu ayuda... Saludos...
Y en eso del ejecutable no me sale ningún error sino que no se como abrir ya la aplicación porque ya se me crea todo eso hasta el punto exe pero no se abre o como debo abrirlo o sera porque esta mal instalado o porque falta librerías o como podría verlo...
Gracias por tu ayuda... Saludos...
Te diré la verdad absoluta de powerbuilder, debes de entender todas las virtudes de una DataWindow, una DW sirve para guardar, modificar, borrar datos dentro de tu base de datos, y otro punto importante, con la DW puedes visualizar los datos de muchísimas formas con las cuales podrás crear tus reportes
Básicamente utilizaras 2 tipos de DW, 1- FreeForm que utilizarás para tus ABM(altas, bajas y modificaciones)-->registrar datos, borrar y modificar.
Y 2- DW tipo Tabular que utilizaras para listar tus reportes.
Vamos a crear una DW de actualización tipo FreeForm
1-archivo/nuevo-->seleccionas la pestaña datawindow y luego la opción FreeForm, culmina la acción con OK.
2-Seleccionas la opción SQL Select, culmina con OK
3-Aparecerá el pintor donde deberás seleccionar una tabla de tu base de datos, finaliza con aceptar
4-Luego seleccionaras todas las columnas de la tabla y presionaras en el botón return que se encuentra cerca y la derecha del botón guardar
5-Todo lo demás aceptar hasta que aparezca la DataWindow final, al luego lo guardas con algún nombre, tal vez dw_primera y listo ya tienes tu DW que utilizaras para actualización.
LO SIGUIENTE importante es crear una Window para alojar dentro de ella la DW que creamos en los pasos anteriores.
1-archivo/nuevo-->seleccionas la pestaña PBObject y luego la opción Window, culmina la acción con OK.
2-Dentro de la Window que creamos deberás incluir tu DW--> lo harás desde menú insert/control/DataWindow y aparecerá el contenedor dentro de la ventana
3-Te posicionas sobre la DW que acabas de insertar(inicialmente en name aparecerá dw_1 dejalo así para utilizarlo luego) y dentro de sus propiedades, específicamente DataObject deberás seleccionar la DW que creamos al inicio dw_primera.
4- lo básico, en el evento constructor de la DataWindow que acabaste de inlcuir dentro de la Window tienes que incluir estas líneas-->
this.SetTransObject(SQLCA)
this.Reset()
this.InsertRow(0)
this.SetFocus()
//Esto especifica con que transacción la DW trabajara, lo resetea, inserta una fila para poder guardar un registro y pone el foco sobre la DW, en lugar de "this" podemos utilizar dw_1 pero como estamos sobre el mismo objeto podemos referenciarlo con this
5-crearás un boton para guardar con el sgte codigo-->
dw_1.accepttext()
if dw_1.update(true,false) = 1 then
commit using sqlca;
dw_1.resetupdate()
dw_1.Reset()
dw_1.InsertRow(0)
dw_1.SetFocus()
else
rollback using sqlca;
MessageBox("Error de grabacion","La aplicacion ha encontrado un error",StopSign!)
end if
//Con esto ya podrás registrar todo lo que ingreses en la DW dentro de tu base de datos
Para ejecutar tu aplicación debes correrlo con Run o presionando Control + R, y obviamente deberás tener la aplicación conectada a tu BD
Por ultimo deberías de bajarte este pequeño tutorial de 35 paginas
http://www.lawebdelprogramador.com/cursos/enlace.php?idp=2744&id=73&texto=Power+Builder
Bueno doy por terminada esta ayuda.
Básicamente utilizaras 2 tipos de DW, 1- FreeForm que utilizarás para tus ABM(altas, bajas y modificaciones)-->registrar datos, borrar y modificar.
Y 2- DW tipo Tabular que utilizaras para listar tus reportes.
Vamos a crear una DW de actualización tipo FreeForm
1-archivo/nuevo-->seleccionas la pestaña datawindow y luego la opción FreeForm, culmina la acción con OK.
2-Seleccionas la opción SQL Select, culmina con OK
3-Aparecerá el pintor donde deberás seleccionar una tabla de tu base de datos, finaliza con aceptar
4-Luego seleccionaras todas las columnas de la tabla y presionaras en el botón return que se encuentra cerca y la derecha del botón guardar
5-Todo lo demás aceptar hasta que aparezca la DataWindow final, al luego lo guardas con algún nombre, tal vez dw_primera y listo ya tienes tu DW que utilizaras para actualización.
LO SIGUIENTE importante es crear una Window para alojar dentro de ella la DW que creamos en los pasos anteriores.
1-archivo/nuevo-->seleccionas la pestaña PBObject y luego la opción Window, culmina la acción con OK.
2-Dentro de la Window que creamos deberás incluir tu DW--> lo harás desde menú insert/control/DataWindow y aparecerá el contenedor dentro de la ventana
3-Te posicionas sobre la DW que acabas de insertar(inicialmente en name aparecerá dw_1 dejalo así para utilizarlo luego) y dentro de sus propiedades, específicamente DataObject deberás seleccionar la DW que creamos al inicio dw_primera.
4- lo básico, en el evento constructor de la DataWindow que acabaste de inlcuir dentro de la Window tienes que incluir estas líneas-->
this.SetTransObject(SQLCA)
this.Reset()
this.InsertRow(0)
this.SetFocus()
//Esto especifica con que transacción la DW trabajara, lo resetea, inserta una fila para poder guardar un registro y pone el foco sobre la DW, en lugar de "this" podemos utilizar dw_1 pero como estamos sobre el mismo objeto podemos referenciarlo con this
5-crearás un boton para guardar con el sgte codigo-->
dw_1.accepttext()
if dw_1.update(true,false) = 1 then
commit using sqlca;
dw_1.resetupdate()
dw_1.Reset()
dw_1.InsertRow(0)
dw_1.SetFocus()
else
rollback using sqlca;
MessageBox("Error de grabacion","La aplicacion ha encontrado un error",StopSign!)
end if
//Con esto ya podrás registrar todo lo que ingreses en la DW dentro de tu base de datos
Para ejecutar tu aplicación debes correrlo con Run o presionando Control + R, y obviamente deberás tener la aplicación conectada a tu BD
Por ultimo deberías de bajarte este pequeño tutorial de 35 paginas
http://www.lawebdelprogramador.com/cursos/enlace.php?idp=2744&id=73&texto=Power+Builder
Bueno doy por terminada esta ayuda.
Ok gracias por tu ayuda y una ultima ayuda como puedo llamar a un archivo pdf...
OLEObject ole_pdf
integer li_rc
ole_pdf = CREATE OleObject
li_rc = ole_pdf.ConnectToNewObject('WScript.Shell')
IF li_rc<>0 THEN
DESTROY ole_pdf
messagebox('Error', 'No se puede conectar con Acrobat',stopsign!)
return
END IF
ole_pdf.run('AcroRd32 ' + 'c:\archivo.pdf')
integer li_rc
ole_pdf = CREATE OleObject
li_rc = ole_pdf.ConnectToNewObject('WScript.Shell')
IF li_rc<>0 THEN
DESTROY ole_pdf
messagebox('Error', 'No se puede conectar con Acrobat',stopsign!)
return
END IF
ole_pdf.run('AcroRd32 ' + 'c:\archivo.pdf')
Gracias ha sido de mucha ayuda para solucionar las dudas que tenia ... gracias por todo tu ayuda me ha sido muy útil y ese manual... gracias ... Saludos
- Compartir respuesta
- Anónimo
ahora mismo