FoxPro/Visual FoxPro - guardar datos en tablas

 
Vista:
sin imagen de perfil

guardar datos en tablas

Publicado por erik (8 intervenciones) el 21/10/2016 15:54:40
saludos, necesito aclarar una duda tengo un programa con 5 tablas enlazadas (no trabajo con sql) bien al botón de guardar le tengo que decir que me seleccione la tabla cliente si los datos existen como hago para que me guarde el resto de la información en las otras tablas esto es lo que tengo en el botón guardar el error me lo da cuando llega a la selección de la tabla contrato justo en el append blank

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
61
62
63
64
65
SELECT cliente
	LOCATE FOR alltrim(UPPER(rif))=alltrim(UPPER(erif))
IF !FOUND()
		APPEND BLANK
		replace rif WITH erif
		replace nombre WITH enombre
		replace direccion WITH edireccion
		replace telefono WITH etelefono
	ENDIF
		SELECT vehiculo
			LOCATE FOR alltrim(UPPER(placa))=alltrim(UPPER(eplaca))
			IF !FOUND()
				APPEND BLANK
				replace placa WITH eplaca
				replace marca WITH emarca
				replace clase WITH eclase
				replace colores WITH ecolores
				replace carroseria WITH ecarroseria
				replace puestos WITH epuestos
				replace modelo WITH emodelo
				replace tipo WITH etipo
				replace uso WITH euso
				replace motor WITH emotor
				replace año WITH eaño
				replace peso WITH epeso
			ENDIF
		SELECT contrato
			APPEND BLANK
			replace poliza WITH epoliza
			replace imp_fecha WITH eimp_fecha
			replace ven_fecha WITH even_fecha
			replace n_impre WITH en_impre
			replace cobertura WITH ecobertura
			replace pago WITH epago
			replace ser_grua WITH esg
			replace ext_territorial WITH esext
			replace abono WITH eabono
			replace resta WITH eresta
			replace cancelado WITH ecancelado
			replace entregado WITH eentregado
			replace asesor WITH easesor
		SELECT coberturas
			APPEND BLANK
			replace cob_lim_mon WITH ecob_lim_mon
			replace cob_lim_pag WITH ecob_lim_pag
			replace grua_lim_mon WITH egrua_lim_mon
			replace grua_lim_pag WITH egrua_lim_pag
			replace opc_mecanica WITH eopc_mecanica
			replace opc_choque WITH eopc_choque
			replace opc_inde WITH eopc_inde
			replace ocu_mon WITH eocu_mon
			replace ocu_pag WITH eocu_pag
			replace ocu_mue WITH eocu_mue
			replace ocu_inv WITH eocu_inv
			replace ocu_med WITH eocu_med
			replace asi_lim_mon WITH easi_lim_mon
			replace asi_lim_pag WITH easi_lim_pag
			replace dan_per_mon WITH edan_per_mon
			replace dan_per_pag WITH edan_per_pag
			replace ter_per_mue WITH eter_per_mue
			replace ter_per_inv WITH eter_per_inv
			replace ter_per_med WITH eter_per_med
			replace dan_cos_mon WITH edan_cos_mon
			replace dan_cos_pag WITH edan_cos_pag
MESSAGEBOX("Registro guardado exitosamente ",64,"Registro")
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: 1.370
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

guardar datos en tablas

Publicado por Fidel José (642 intervenciones) el 21/10/2016 17:22:00
No pones cuales el error queda.
Lo primero que debes asegurar es que las tablas se llaman como dices que se llaman y que estén abiertas.
Dices que son cinco tablas pero pones cuatro.
Dices que están enlazadas y no se vé por qué campo. Tal vez este rif (u otro identificador de cliente) debería estar en las otras cuatro tablas.

Para controlar que las tablas que necesitas estan abiertas, puedes hacer algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
lcList_Tables = "cliente,vehiculo,contrato,coberturas,quinta"
lclist_Falta = ""
FOR i = 1 TO GETWORDCOUNT(m.lcList_Tables,",")
	lcTable = GETWORDNUM(m.lcList_Tables,i,",")
	IF !USED(m.lcTable)
		lcList_Falta = m.lcList_falta ;
			+ m.lcTable + CHR(13)
	ENDIF
NEXT
IF !EMPTY(m.lcList_falta)
	MESSAGEBOX("Tablas que no están en uso:"+CHR(13);
		+ m.lcList_Falta,0,"Problema")
	RETURN
ENDIF

Si todas las tablas están abiertas, lo más probable es que tengas un nombre de campo equivocado o una variable que no está definida.


De cualquier modo, será mucho más eficiente si lo escribes como pongo a continuación:

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
erif = UPPER(ALLTRIM(m.erif))
ePlaca = UPPER(ALLTRIM(m.eplaca)
SELECT cliente
LOCATE FOR UPPER(ALLTRIM(rif)) == m.erif
IF !FOUND()
	INSERT INTO cliente ;
		(Rif,;
		Nombre,;
		Direccion,;
		Telefono);
	VALUES ;
		(m.erif,;
		m.enombre,;
		m.edireccion,;
		m.etelefono)
 
ENDIF
SELECT vehiculo
 
LOCATE FOR UPPER(ALLTRIM(placa)) == m.eplaca
IF !FOUND()
	INSERT INTO vehiculo ;
		(Placa,;
		Marca,;
		Clase,;
		Colores,;
		Carroseria,;
		Puestos,;
		Modelo,;
		Tipo,;
		Uso,;
		Motor,;
		Año,;
		Peso);
	VALUES ;
		(m.eplaca,;
		m.emarca,;
		m.eclase,;
		m.ecolores,;
		m.ecarroseria,;
		m.epuestos,;
		m.emodelo,;
		m.etipo,;
		m.euso,;
		m.emotor,;
		m.eaño,;
		m.epeso)
 
ENDIF
 
INSERT INTO contrato ;
	(Poliza,;
	Imp_fecha,;
	Ven_fecha,;
	N_impre,;
	Cobertura,;
	Pago,;
	Ser_grua,;
	Ext_territorial,;
	Abono,;
	Resta,;
	Cancelado,;
	Entregado,;
	Asesor);
VALUES ;
	(m.epoliza,;
	m.eimp_fecha,;
	m.even_fecha,;
	m.en_impre,;
	m.ecobertura,;
	m.epago,;
	m.esg,;
	m.esext,;
	m.eabono,;
	m.eresta,;
	m.ecancelado,;
	m.eentregado,;
	m.easesor)
 
INSERT INTO coberturas ;
	(Cob_lim_mon,;
	Cob_lim_pag,;
	Grua_lim_mon,;
	Grua_lim_pag,;
	Opc_mecanica,;
	Opc_choque,;
	Opc_inde,;
	Ocu_mon,;
	Ocu_pag,;
	Ocu_mue,;
	Ocu_inv,;
	Ocu_med,;
	Asi_lim_mon,;
	Asi_lim_pag,;
	Dan_per_mon,;
	Dan_per_pag,;
	Ter_per_mue,;
	Ter_per_inv,;
	Ter_per_med,;
	Dan_cos_mon,;
	Dan_cos_pag);
VALUES ;
	(m.ecob_lim_mon,;
	m.ecob_lim_pag,;
	m.egrua_lim_mon,;
	m.egrua_lim_pag,;
	m.eopc_mecanica,;
	m.eopc_choque,;
	m.eopc_inde,;
	m.eocu_mon,;
	m.eocu_pag,;
	m.eocu_mue,;
	m.eocu_inv,;
	m.eocu_med,;
	m.easi_lim_mon,;
	m.easi_lim_pag,;
	m.edan_per_mon,;
	m.edan_per_pag,;
	m.eter_per_mue,;
	m.eter_per_inv,;
	m.eter_per_med,;
	m.edan_cos_mon,;
	m.edan_cos_pag)
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
sin imagen de perfil

guardar datos en tablas

Publicado por erik (8 intervenciones) el 21/10/2016 17:40:20
si es cierto no coloque todas las tablas son: cliente,vehículo,contrato,coberturas,empleado

el error dice uniqueness of index POLIZA is violated

lo indica en el append blank despues del select CONTRATO

gracias por tu ayuda probare lo que me dijiste
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

guardar datos en tablas

Publicado por Marco Mendinueta (8 intervenciones) el 21/10/2016 18:07:47
Tienes mucho codigo en el botom grabar.

Debes rediseñar el formulario que tienes para realizar venta, lo mas logico que al momento de grabar solo grabes en la tabla de movimiento y no en las maestras
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
sin imagen de perfil

guardar datos en tablas

Publicado por erik (8 intervenciones) el 21/10/2016 19:24:52
si lo se la cuestion es que solo necesito cliente,polizay vehiculo todo lo demas es automatizado y no se puede obviar... :(
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
sin imagen de perfil
Val: 1.370
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

guardar datos en tablas

Publicado por Fidel José (642 intervenciones) el 21/10/2016 22:25:39
Si se trata de una clave primaria, el problema lo genera el APPEND BLANK (porque ya hay un registro con ese campo vacío).
Por eso es sumamente aconsejable no utilizar APPEND BLANK + REPLACE, sino INSERT INTO.

Si tienes un índice UNIQUE sobre ese campo, quitalo y coloca un indice normal. Te evitarás muchos problemas.
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