Power Builder - Como puedo importar un excel a mi BD y actualizarla

 
Vista:
sin imagen de perfil
Val: 48
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Como puedo importar un excel a mi BD y actualizarla

Publicado por Hector (27 intervenciones) el 03/08/2018 18:04:25
Hola, tengo una base de datos a la cual quisiera implementar unos datos de un archivo excel por power builder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE DATABASE SIGCONTA
GO
 
CREATE TABLE  SCCTAAOX
(
COD_CIA  chat(2)
PERIODO  numerico(4,0)
T_AUX  CHAR(2)
COD_AUX  CHAR(4)
DESC_AUX  CHAR(50)
AUX_ABV  CHAR(30)
COD_DOC  CHAR(1)
RUC  CHAR(11)
DIR_AUX  CHAR(50)
)
GO

Tengo un archivo excel en mi escritorio lleno con los mismos campos que tengo en BD, como podría importar ese excel a mi BD pero con el tiempo quizás ese excel tengan más datos y quisiera como actualizarlo y poner condiciones que algunos campos ya están registrados y que solo se llenen los que aún no están a mi BD... Si alguien tiene un vídeo o desea darme una mano se lo agradeceré.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 48
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Como puedo importar un excel a mi BD y actualizarla

Publicado por Hector (27 intervenciones) el 06/08/2018 20:13:32
Ya que no respondes, lo que estaba viendo es que debo que crear una grid/external de mi sql server al cual lo relacione con mi DW, le cree un botón para que importe mi archivo excel y lo hace sin problemas, este es el código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
OLEObject excel
 
Integer li_RetValue, li_rtn
Boolean lb_sheet_rtn
Long ll_cnt
String ls_ClipBoard
 
// Varibles for File Name,path
 
string docpath, docname[]
integer i, li_cnt, li_filenum
long ll_xls_cols,ll_xls_rows
 
// Get file path
 
GetFileOpenName("Select File", docpath, docname[], "DOC", "Excel Files (*.xlsx),*.xlsx," + "All Files (*.*), *.*", "C:\Program Files\Sybase", 18)
 
if docpath='' then return
 
//MessageBox("Document Path ", docpath)
 
excel = create OLEObject
 
li_rtn = excel.ConnectToNewObject("excel.application")
IF li_rtn <> 0 THEN
MessageBox('Excel error','can not run Excel Program')
DESTROY excel
RETURN 0
END IF
 
excel.WorkBooks.Open(docpath )
excel.Application.Visible = false
excel.windowstate = 2 // 1 : Normal, 2 : Minimize, 3 : Maximize
 
lb_sheet_rtn = excel.worksheets(1).Activate
 
ls_ClipBoard = Clipboard() //Store current clipboard Data
 
// To Find the No Of Rows and Columns in the excel sheet
 
ll_xls_cols = excel.worksheets(1).Usedrange.columns.count
ll_xls_rows = excel.worksheets(1).Usedrange.rows.count
ll_xls_rows = ll_xls_rows -1 // Considering row 1 has headers
 
MessageBox("Rows and Cols In the Excel",string(ll_xls_rows)+ " Rows and "+string(ll_xls_cols)+" Columns Will be imported to application")
 
 
excel.Worksheets(1).Range("A2:R18").Copy // I have hard coded the Cells here your can change by using no of rows and columns and concatinating them
// copy to clipboard - Take enough Range. .. Or use the UsedRage property. If data ha header row, use correct statring range.. (B1:... )
ll_cnt = dw_1.importclipboard()
 
Clipboard(ls_ClipBoard) //Restore clipboard
 
IF ll_cnt <= 1 THEN
Messagebox("Information", "Unable to Load the data")
END IF
excel.Application.Quit
excel.DisConnectObject()
DESTROY excel


Luego le cree un botón para registrarlo a mi sql server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
LONG filas
STRING COD_CIA[]
DECIMAL PERIODO[]
STRING T_AUX[]
STRING COD_AUX[]
STRING DESC_AUX[]
STRING AUX_ABV[]
STRING COD_DOC[]
STRING RUC[]
STRING DIR_AUX[]
STRING COD_ZON[]
STRING COD_PAI[]
STRING PAI_ISO2[]
STRING EMAIL[]
STRING AGT[]
STRING EXT[]
DECIMAL DET_PCT[]
DATETIME FECACT[]
STRING COD_USER[]
 
filas = dw_1.rowCount()
int item = 0
for item=1 to filas
	COD_CIA[item] = dw_1.getItemString(item,'cod_cia')
	PERIODO[item] = dw_1.getItemNumber(item,'periodo')
	T_AUX[item] = dw_1.getItemString(item,'t_aux')
	COD_AUX[item] = dw_1.getItemString(item,'cod_aux')
	DESC_AUX[item] = dw_1.getItemString(item,'desc_aux')
	AUX_ABV[item] = dw_1.getItemString(item,'aux_abv')
	COD_DOC[item] = dw_1.getItemString(item,'cod_doc')
	RUC[item] = dw_1.getItemString(item,'ruc')
	DIR_AUX[item] = dw_1.getItemString(item,'dir_aux')
	COD_ZON[item] = dw_1.getItemString(item,'cod_zon')
	COD_PAI[item] = dw_1.getItemString(item,'cod_pai')
	PAI_ISO2[item] = dw_1.getItemString(item,'pai_iso2')
	EMAIL[item] = dw_1.getItemString(item,'email')
	AGT[item] = dw_1.getItemString(item,'agt')
	EXT[item] = dw_1.getItemString(item,'ext')
	DET_PCT[item] = dw_1.getItemDecimal(item,'det_pct')
	FECACT[item] = dw_1.getItemDateTime(item,'fecact')
	COD_USER[item] = dw_1.getItemString(item,'cod_user')
	INSERT INTO SCCTAAOX
	(cod_cia, periodo, t_aux, cod_aux, desc_aux, aux_abv, cod_doc,
	ruc, dir_aux, cod_zon, cod_pai, pai_iso2, email, agt, ext, det_pct,
	fecact, cod_user)
	VALUES (:COD_CIA[item], :PERIODO[item], :T_AUX[item], :COD_AUX[item],
	:DESC_AUX[item], :AUX_ABV[item], :COD_DOC[item], :RUC[item],
	:DIR_AUX[item], :COD_ZON[item], :COD_PAI[item], :PAI_ISO2[item],
	:EMAIL[item], :AGT[item], :EXT[item], :DET_PCT[item], :FECACT[item],
	:COD_USER[item]) commit using sqlca;
next
 
if sqlca.sqlcode = 0 then
	MessageBox("Aviso","Datos registrados")
else
	MessageBox("Error","Error")
	rollback;
end if
 
dw_1.reset()

Pero me sale error, me llegan a reconocer todos los parametros pero no logra registrar... ¿Alguien me puede ayudar con esto, por favor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar