Importar de Excel y Agregar a Power Builder
Buen día experto, tengo el siguiente problema:
Actualmente en la empresa donde estoy haciendo pasantías está llevando la base de datos de los equipos en un archivo de excel, cabe destacar que los registros en el archivo son muchísimos debido a la cantidad de personal en la empresa, por lo cual se requiere un sistema que importe los datos del archivo de excel y lo lleve a la Base de Datos de Power Builder, asimismo se necita para futuros ingresos ingresar los datos por pantalla, ya que la importación de Excel solo se hará una sola vez al momento de arrancar el sistema, de allí en adelante todos los datos serán ingresados directamente por la pantalla del Sistema de Power Builder.
Para la importación estoy usando un Datawindow el cual importa los datos perfectamente desde excel de igual forma te coloco el código:
//Importar de Excel a Una Dw
OLEObject excel
Integer li_RetValue, li_rtn
Boolean lb_sheet_rtn
Boolean lb_exist , lb_exist_base
Long ll_cnt
Long li_rc , ll_rc
String ls_path_excel
String ls_new_excel
// Genero en Base al ExCel de Air uno Nuevo
ls_new_excel = "C:\Documents and Settings\ainformatica\Escritorio\Programas Power Builder\inventario de Equipos SIDETUR\Inventario fin.xls"
ls_path_excel = "C:\Documents and Settings\ainformatica\Escritorio\Programas Power Builder\inventario de Equipos SIDETUR\Inventario final.xls"
lb_exist_base = FileExists(ls_path_excel)
lb_exist = FileExists(ls_new_excel)
If lb_exist_base = False Then MessageBox("Importación", "No se encuentra la Base : " + ls_path_excel)
// Chek de Existencia para Borrarlo
IF lb_exist= true Then FileDelete(ls_new_excel)
st_1.Text ="Creando Conección a Excel"
//Crear Objeto
Excel = create OLEObject
//Conectar a Excel
li_rtn = excel.ConnectToNewObject("excel.application")
IF li_rtn <> 0 THEN
MessageBox('Excel error','No puede conectarse a Excel')
DESTROY excel
RETURN 0
END IF
//Abrir excel
excel.WorkBooks.Open( ls_path_excel )
excel.Application.Visible = False
excel.windowstate = 2 // Estados 1 : Normal, 2 : Minimize, 3 : Maximize
//Seleccionar un rango y eliminarlo
st_1.Text ="Creando Nuevo Excel"
lb_sheet_rtn = excel.worksheets(1).Activate
excel.application.workbooks(1).saveas(ls_new_excel,-4143)
//Seleccionar todo lo activo y copiarlo al CLip
excel.ActiveCell.CurrentRegion.Select()
excel.Selection.Copy()
st_1.Text ="Importando Excel"
//Importar desde el Clipboard
ll_rc =dw_1.ImportClipBoard (2)
ClipBoard('')
excel.Application.Quit
excel.disconnectobject()
DESTROY excel
El problema esta que para el ingreso de datos por pantalla, estoy usando un segundo datawindow asociado de igual forma que el anterior a la base de datos Power Builder, donde coloco el siguiente código:
string val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12,val13,val14
val1=string(sle_2.text)
val2=string(sle_3.text)
val3=string(sle_4.text)
val4=string(sle_5.text)
val5=string(sle_6.text)
val6=string(sle_7.text)
val7=string(sle_8.text)
val8=string(sle_9.text)
val9=string(sle_10.text)
val10=string(sle_11.text)
val11=string(sle_12.text)
val12=string(sle_13.text)
val13=string(sle_14.text)
val14=string(sle_15.text)
INSERT INTO general (planta,usuario,marca,modelo_pc,modelo_serie,serial,disco,ram,cpu,modelo_cpu,nombre_pc,antivirus,version,virus_def_file)
VALUES (:val1,:val2,:val3,:val4,:val5,:val6,:val7,:val8,:val9,:val10,:val11,:val12,:val13,:val14);
dw_2.Update()
commit;
//Si se inserto la fila el campo text vacio
sle_2.text=""
sle_3.text=""
sle_4.text=""
sle_5.text=""
sle_6.text=""
sle_7.text=""
sle_8.text=""
sle_9.text=""
sle_10.text=""
sle_11.text=""
sle_12.text=""
sle_13.text=""
sle_14.text=""
sle_15.text=""
Cabe destacar que ambos datawindow estan configurados en el menu Rows>Update Properties.
En la aplicacion coloco el siguiente codigo:
// Profile Equipos
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=equipos'"
connect;
if sqlca.sqlcode<>0 then
else
open(w_equipos)
end if
y en el evento open de la ventana:
dw_1.settransobject(sqlca)
long rows
dw_2.SetTrans(SQLCA)
rows = dw_2.Retrieve()
IF rows < 1 THEN MessageBox( &
"Error de Base de Datos", &
"No se retornaron Filas.")
El problema esta en que no guarda los datos que ingreso por pantalla sin embargo los de la importación los guarda perfectamente, agradecería enormemente tu ayuda...
Actualmente en la empresa donde estoy haciendo pasantías está llevando la base de datos de los equipos en un archivo de excel, cabe destacar que los registros en el archivo son muchísimos debido a la cantidad de personal en la empresa, por lo cual se requiere un sistema que importe los datos del archivo de excel y lo lleve a la Base de Datos de Power Builder, asimismo se necita para futuros ingresos ingresar los datos por pantalla, ya que la importación de Excel solo se hará una sola vez al momento de arrancar el sistema, de allí en adelante todos los datos serán ingresados directamente por la pantalla del Sistema de Power Builder.
Para la importación estoy usando un Datawindow el cual importa los datos perfectamente desde excel de igual forma te coloco el código:
//Importar de Excel a Una Dw
OLEObject excel
Integer li_RetValue, li_rtn
Boolean lb_sheet_rtn
Boolean lb_exist , lb_exist_base
Long ll_cnt
Long li_rc , ll_rc
String ls_path_excel
String ls_new_excel
// Genero en Base al ExCel de Air uno Nuevo
ls_new_excel = "C:\Documents and Settings\ainformatica\Escritorio\Programas Power Builder\inventario de Equipos SIDETUR\Inventario fin.xls"
ls_path_excel = "C:\Documents and Settings\ainformatica\Escritorio\Programas Power Builder\inventario de Equipos SIDETUR\Inventario final.xls"
lb_exist_base = FileExists(ls_path_excel)
lb_exist = FileExists(ls_new_excel)
If lb_exist_base = False Then MessageBox("Importación", "No se encuentra la Base : " + ls_path_excel)
// Chek de Existencia para Borrarlo
IF lb_exist= true Then FileDelete(ls_new_excel)
st_1.Text ="Creando Conección a Excel"
//Crear Objeto
Excel = create OLEObject
//Conectar a Excel
li_rtn = excel.ConnectToNewObject("excel.application")
IF li_rtn <> 0 THEN
MessageBox('Excel error','No puede conectarse a Excel')
DESTROY excel
RETURN 0
END IF
//Abrir excel
excel.WorkBooks.Open( ls_path_excel )
excel.Application.Visible = False
excel.windowstate = 2 // Estados 1 : Normal, 2 : Minimize, 3 : Maximize
//Seleccionar un rango y eliminarlo
st_1.Text ="Creando Nuevo Excel"
lb_sheet_rtn = excel.worksheets(1).Activate
excel.application.workbooks(1).saveas(ls_new_excel,-4143)
//Seleccionar todo lo activo y copiarlo al CLip
excel.ActiveCell.CurrentRegion.Select()
excel.Selection.Copy()
st_1.Text ="Importando Excel"
//Importar desde el Clipboard
ll_rc =dw_1.ImportClipBoard (2)
ClipBoard('')
excel.Application.Quit
excel.disconnectobject()
DESTROY excel
El problema esta que para el ingreso de datos por pantalla, estoy usando un segundo datawindow asociado de igual forma que el anterior a la base de datos Power Builder, donde coloco el siguiente código:
string val1,val2,val3,val4,val5,val6,val7,val8,val9,val10,val11,val12,val13,val14
val1=string(sle_2.text)
val2=string(sle_3.text)
val3=string(sle_4.text)
val4=string(sle_5.text)
val5=string(sle_6.text)
val6=string(sle_7.text)
val7=string(sle_8.text)
val8=string(sle_9.text)
val9=string(sle_10.text)
val10=string(sle_11.text)
val11=string(sle_12.text)
val12=string(sle_13.text)
val13=string(sle_14.text)
val14=string(sle_15.text)
INSERT INTO general (planta,usuario,marca,modelo_pc,modelo_serie,serial,disco,ram,cpu,modelo_cpu,nombre_pc,antivirus,version,virus_def_file)
VALUES (:val1,:val2,:val3,:val4,:val5,:val6,:val7,:val8,:val9,:val10,:val11,:val12,:val13,:val14);
dw_2.Update()
commit;
//Si se inserto la fila el campo text vacio
sle_2.text=""
sle_3.text=""
sle_4.text=""
sle_5.text=""
sle_6.text=""
sle_7.text=""
sle_8.text=""
sle_9.text=""
sle_10.text=""
sle_11.text=""
sle_12.text=""
sle_13.text=""
sle_14.text=""
sle_15.text=""
Cabe destacar que ambos datawindow estan configurados en el menu Rows>Update Properties.
En la aplicacion coloco el siguiente codigo:
// Profile Equipos
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=equipos'"
connect;
if sqlca.sqlcode<>0 then
else
open(w_equipos)
end if
y en el evento open de la ventana:
dw_1.settransobject(sqlca)
long rows
dw_2.SetTrans(SQLCA)
rows = dw_2.Retrieve()
IF rows < 1 THEN MessageBox( &
"Error de Base de Datos", &
"No se retornaron Filas.")
El problema esta en que no guarda los datos que ingreso por pantalla sin embargo los de la importación los guarda perfectamente, agradecería enormemente tu ayuda...
1 respuesta
Respuesta de william4425 Mendez
1