FoxPro/Visual FoxPro - Enviar detalle de factura como parametro al sql server

   
Vista:

Enviar detalle de factura como parametro al sql server

Publicado por Fredy Ayala freayala@gmail.com (145 intervenciones) el 03/06/2012 21:54:40
Buenas tardes,

A continuación te envio mi consulta por si puedan ayudarme.

Estoy armando un pequeño sistema cliente-servidor con base de datos sql server y aplicacion visual foxpro 9.0. La manejo de esta manera: tengo una conexion odbc por medio del cual hago las operaciones en la base de datos del sql. De esta forma:

sqlexec(Conexion, "execute sp_insertar_cliente ?vCodigo, ?vNombre, ?vDireccion, ?vTelefono")

Esto me funciona sin problema, lo que no sé es como enviar un cursor en forma de parametro, para poder insertar las transacciones.

Espero no haber sido molestia mi consulta y ante que nada les agradezco.


Saludos cordiales
Fredy
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

Enviar detalle de factura como parametro al sql server

Publicado por richard antonio marriaga lascarro (174 intervenciones) el 04/06/2012 17:36:04
De esta forma yo paso los datos de la cabezera de la factura a una tabla de Postgres

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
************************************
 lnfac = thisform.Sqltextes1.Value
 fact = thisform.Sqltextes1.Value
 lnFec = thisform.Sqltextes2.Value
 Lnvalu = thisform.Sqltextes15.Value
 LNnip = thisform.Sqltextes4.Value
 LNtip = 1
 lCest ="A"
 Ldia = 0
 *****
 thisform.sqllabel20.Caption ="Activa"
 **Agreagando datos a la cabezera de la factura ****
 lcsql = ("INSERT INTO karticulo001(factura,fecha,fecha2,idcliente,idvendedor,tipo,estado,dias)VALUES(?m.lnfac,?m.lnFec,?m.lnFec,?m.LNnip,?m.LnValu,?m.LNtip,?m.lCest,?m.ldia)")
     lcrdo = SQLEXEC (gn1,lcsql)
if lcrdo < 0
    Aerror(verror)
   * wait window 'Error '+
   mMens2 = verror(2)
    =SQLRollback(gn1)
	 mMens1="No se Puede completar la Operación "
	 mOpc = messagebox(mMens1 + mMens2,0+32,"Atencion")
     return
endif
  = SQLCOMMIT(gn1)
***************************

espero te sirva

Richard marriaga
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

Enviar detalle de factura como parametro al sql server

Publicado por Fredy Ayala (145 intervenciones) el 05/06/2012 05:18:45
Muchas gracias por la ayuda amigo, me sirve el ejemplo.

Pero lo que necesito es para insertar el detalle en forma masiva, o sea, para pasar como parámetro el cursor completo con N registros al sql server.

Muchas gracias!
Saludos cordiales,
Fredy Ayala
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

Enviar detalle de factura como parametro al sql server

Publicado por richard marriaga (174 intervenciones) el 09/06/2012 00:57:05
puedes hacer es un ciclo while (miestras que) y el te va adicicionar todos los registros del cursor
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

Enviar detalle de factura como parametro al sql server

Publicado por richard marriaga (174 intervenciones) el 09/06/2012 01:03:04
ESTE EJEMPLO USA EL CICLO WHILE TE PUEDE SERVIR Y HAY MUCHAS MANERAS DE HACERLO
*********
LOCAL lsu,apll,nom
lsu = 0
SELECT tdato001 && tabla de VFP
nom = "Registros: "
SET EXCLUSIVE on
DO WHILE .T. && Begins loop
IF EOF( )
EXIT
ENDIF
**** asignacion de campos de la tabla de vfp a variables *****
STORE fecha TO lfep
STORE cliente TO lnced
STORE codabop TO lnabg
STORE codclpro TO lcps
STORE codclti TO lntt
STORE fechaveti TO lftt
STORE nobliga TO lott
STORE radjudi TO lraj
STORE codjuz TO lnju
STORE codciu TO lciu
STORE id_demandado TO lcdem
STORE valor TO lnval
STORE clasenotifica TO lnclnot
STORE sugerencia TO suge
STORE ideman2 TO ldem2
STORE ideman3 TO ldem3
STORE idnegocio TO nup
STORE fechaetap TO fecheta
STORE idetapa TO lidp
STORE ufecha TO ufec
lciu = 5
*** Actulizacion de incrementos de procesos **
********
lcsql ="INSERT INTO tdato001 (idnegocio,fecha,cliente,codabop,codclpro,codclti,fechaveti,nobliga,radjudi,codjuz,codciu,id_demandado,valor,clasenotifica,sugerencias,ideman2,ideman3,idetapa)"+;
"values(?m.nup,?m.lfep,?m.lnced,?m.lnabg,?m.lcps,?m.lntt,?m.lftt,?m.lott,?m.lraj,?m.lnju,?m.lciu,?m.lcdem,?m.lnval,?m.lnclnot,?m.suge,?m.ldem2,?m.ldem3,?m.lidp)"
***********
lcrdo = SQLEXEC (gn1,lcsql)
if lcrdo < 0
Aerror(verror)
* wait window 'Error '+
mMens2 = verror(2)
=SQLRollback(gn1)
mMens1="No se Puede completar la Operación de guardar proceso"
mOpc = messagebox(mMens1 + mMens2,0+32,"Atencion")
return
endif
********************
= SQLCOMMIT(gn1)

* ****
&&replace radjudi WITH lcrj,valor WITH lcva
lsu = lsu + 1
apll = STR(lsu)
WAIT nom + apll WINDOW AT 70,20 TIMEOUT 0.01

****** llamo a la tabla y le doy skip para que pase al siguiente registro

SELECT tdato001
SKIP
ENDDO
*WAIT WINDOW "guardando datos ...." TIMEOUT 0.2
use
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

Enviar detalle de factura como parametro al sql server

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 09/07/2012 12:28:56
Si insistes en hacerlo por ODBC, al menos deja los SQL Pass Through para lo mínimo posible, y trabaja con los CursorAdapter, que es una forma transparente de interactuar con las tablas del servidor.

Que sí, que es algo engorroso al inicio, pero una vez los tengas controlados (en VFP9 donde ya encontraron la estabilidad necesaria) se hace todo más fácil.

Pero si insistes con el método Pass Through, crea una cadena variable con todos los INSERT que sean necesarios, tantos como líneas de detalle. Así, haces una sola ejecución y puedes controlarlo como una transacción, para saber qué hacer en caso de error.
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

Enviar detalle de factura como parametro al sql server

Publicado por Ulises (1 intervención) el 30/08/2012 17:55:11
Saludos
Utiliza un procedimiento almacenado en sql server con un parametro XML (donde puedes almacenar la lista de detalles con una estructura donde los campos son los mismos de los detalles). Sql server tiene los comandos necesarios que maneja la lectura de los datos en XML. En este mismo procedimiento puedes usar transacciones para manejar la insercion o actualizacion de datos completamente para controlar los errores.
Yo uso sql server con visual basic .net, si lo deseas que te explique mas puedes enviarme un mensaje en mi correo.

Atte;
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