Aqui hay algo con ADO, esta un poco desorganizado pero creo que puede servir para empezar
****************************************************
*REGISTRA EN LA BASE DE DATOS LOS PEDIDOS
****************************************************
PROC Graba
LOCAL oCon
LOCAL oError
LOCAL cCommandSql
LOCAL oVar
LOCAL oContactos
LOCAL oPrecio
LOCAL oGrid
LOCAL Csc2:=0
SELE tCons
ZAP
Dbgotop()
TRY
oCon:=toleauto():new("adodb.connection")
CATCH oError
MsgStop( "No se ha podido crear la conexi贸n !", "Error de datos")
RETURN(.F.)
END
oCon:ConnectionString:= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog="+alltrim(oR5vg2)+";Data Source=SERVER\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=GERENCIA;Use Encryption for Data=False;Tag with column collation when possible=False"
TRY
oCon:Open()
CATCH oError
MsgStop( "No pude abrir la conexi贸n para crear las tablas !", "Error de datos")
RETURN(.F.)
END
*------------------------------------------------------------------
* Creamos el objeto recordset de ADO
* un recorset esta formado por Registros(filas) y campos (columnas)
*------------------------------------------------------------------
oVar := "SELECT * FROM MAEPEDCXC"
if oContactos = nil
TRY
oContactos := CreateObject("ADODB.Recordset")
CATCH oError
MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
RETURN(.F.)
END
oContactos:CursorLocation := adUseClient //adUseServer
oContactos:LockType := adLockOptimistic
oContactos:CursorType := adOpenKeyset
oContactos:Source := oVar
oContactos:ActiveConnection( oCon )
TRY
oContactos:Open()
CATCH oError
MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
RETURN(.F.)
END
// msginfo( oContactos )
else
msginfo("no esta nil")
endif
nRegistros := oContactos:RecordCount()
//Msginfo(nRegistros)
if nRegistros > 0
oContactos:MoveFirst()
DO WHILE !oContactos:Eof()
Cod:= oContactos:Fields("PED_NUMPED"):Value
SELE tCons
APPEND BLANK
tCons->CON_CODIGO:=Cod
oContactos:MoveNext()
ENDDO
endif
SELE tCons
GO BOTT
Csc:=tCons->CON_CODIGO
Csc2:=val(Csc)
Csc2++
numped:=strzero(Csc2++,9)
*------------------------------------------------------------------
* HACE EL REGISTRO EN LA CABECERA DEL PEDIDO
*------------------------------------------------------------------
cFecha := StrZero( Year( vDate ),4 )+"/"+StrZero( Day( vDate ),2 )+"/"+StrZero( Month( vDate ),2 )
//Msginfo(cFecha)
IF oRSvg2="Pedidos Ventas"
cCommandSql := "INSERT INTO MAEPEDCXC (PED_TIPPED,PED_NUMPED,PED_ESTADO,PED_CIUDAD,PED_CEDULA,PED_TIPNOT,PED_USUARIO,PED_VENDED,PED_TIPCLI,PED_TIPCTA,PED_LISPRE,PED_PLAZO,PED_BODEGA,PED_CODSEC,PED_DIRENV,PED_ACTIVO,PED_MONEDA,PED_TASARM,PED_CODOPE,PED_NOMEMP,PED_PROREG,PED_FECPED,PED_FECINI,PED_FECVEN,PED_CEDCON,PED_SECTOR) VALUES (1,'"+numped+"',0,'"+alltrim(Subzona)+"','"+alltrim(oC1vg1)+"',' ',' ','"+alltrim(Vendedor)+"',1,'"+alltrim(oC1vg2)+"',"+transform(lista,"9")+","+transform(plazo,"999")+",'"+alltrim(oC1vg3)+"','00030005','"+alltrim(oC1vg5)+"',1,"+Subs(oRSvgM,1,1)+","+alltrim(Str(oC1vg7))+",'"+alltrim(oC1vusu)+"','"+alltrim(oRSvg1)+"','frmFAC101','"+cFecha+"','"+cFecha+"','"+cFecha+"','"+alltrim(oC1vg6)+"','"+vSector+"')"
ELSEIF oRSvg2="Pedidos Compras"
cCommandSql := "INSERT INTO MAEPEDCXP (PED_TIPPED,PED_NUMPED,PED_ESTADO,PED_CIUDAD,PED_CEDULA,PED_TIPNOT,PED_USUARIO,PED_VENDED,PED_TIPCLI,PED_TIPCTA,PED_LISPRE,PED_PLAZO,PED_BODEGA,PED_CODSEC,PED_DIRENV,PED_ACTIVO,PED_MONEDA,PED_TASARM,PED_CODOPE,PED_NOMEMP,PED_PROREG,PED_FECPED,PED_FECINI,PED_FECVEN,PED_CEDCON,PED_SECTOR) VALUES (1,'"+numped+"',0,'"+alltrim(Subzona)+"','"+alltrim(oC1vg1)+"',' ',' ','"+alltrim(Vendedor)+"',1,'"+alltrim(oC1vg2)+"',"+transform(lista,"9")+","+transform(plazo,"999")+",'"+alltrim(oC1vg3)+"','00030005','"+alltrim(oC1vg5)+"',1,"+Subs(oRSvgM,1,1)+","+alltrim(Str(oC1vg7))+",'"+alltrim(oC1vusu)+"','"+alltrim(oRSvg1)+"','frmFAC101','"+cFecha+"','"+cFecha+"','"+cFecha+"','"+alltrim(oC1vg6)+"','"+vSector+"')"
ENDIF
//msginfo(cCommandSql)
TRY
oCon:Execute(cCommandSql)
CATCH oError
MsgInfo("El registro no pudo ser insertado MAEPEDCXC")
END
*------------------------------------------------------------------
* HACE EL REGISTRO DEL NUEVO CONSECUTIVO
*------------------------------------------------------------------
IF oRSvg2="Pedidos Ventas"
cCommandSql := "UPDATE DATPEDCXC SET PED_ULTPED="+alltrim(numped)+" WHERE PED_CODIGO=1"
ELSEIF oRSvg2="Pedidos Compras"
cCommandSql := "UPDATE DATPEDCXP SET PED_ULTPED="+alltrim(numped)+" WHERE PED_CODIGO=1"
ENDIF
TRY
oCon:Execute(cCommandSql)
CATCH oError
MsgInfo("El registro no pudo ser insertado")
END
oCon:Close()
//Msginfo("inicia proceso busqueda de precios en ka base de chantall")
*------------------------------------------------------------------
* BUSCAMOS LOS PRECIOS EN LA BASE DE DATOS DE CHANTALL
*------------------------------------------------------------------
TRY
oConP:=toleauto():new("adodb.connection")
CATCH oError
MsgStop( "No se ha podido crear la conexi贸n !", "Error de datos")
RETURN(.F.)
END
oConP:ConnectionString:= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=CHANTALL;Data Source=SERVER\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=GERENCIA;Use Encryption for Data=False;Tag with column collation when possible=False"
TRY
oConP:Open()
CATCH oError
MsgStop( "No pude abrir la conexi贸n para crear las tablas !", "Error de datos")
RETURN(.F.)
END
*------------------------------------------------------------------
* HACE EL REGISTRO EN LA TABLA DE MOVIMIENTO
*------------------------------------------------------------------
SELE tPe05
DbGotop()
Do while !Eof()
SELE tPe05
Refer:=alltrim(tPe05->REFER)
Nombr:=alltrim(tPe05->NOMBRE)
Colos:=alltrim(tPe05->COLOR)
Talla:=alltrim(subs(tPe05->TALLA,3,5))
Canti:=tPe05->CANT
//OJO CON ESTA PARTE.... TRAE EL PRECIO DE VENTA O DE COMPRA DEL ARTICULO
//IF oRSvg2="Pedidos Ventas"
//ELSEIF oRSvg2="Pedidos Compras"
//oVar := "SELECT * FROM MAEINV WHERE INV_REFER='"+Refer+"'"
//ENDIF
oVar := "SELECT * FROM LISPRE WHERE PRE_CODIGO="+transform(lista,"9")+" AND PRE_REFER='"+alltrim(Refer)+"'"
TRY
oPrecio := CreateObject("ADODB.Recordset")
CATCH oError
MsgStop( "No se ha podido crear el RECORDSET !","Error de Datos" )
RETURN(.F.)
END
oPrecio:CursorLocation := adUseClient //adUseServer
oPrecio:LockType := adLockOptimistic
oPrecio:CursorType := adOpenKeyset
oPrecio:Source := oVar
oPrecio:ActiveConnection( oConP )
TRY
oPrecio:Open()
CATCH oError
MsgStop( "No se ha podido ejecutar el comando !", "Error de Datos" )
RETURN(.F.)
END
nRegistros := oPrecio:RecordCount()
if nRegistros > 0
oPrecio:MoveFirst()
//OJO CON ESTA PARTE.... TRAE EL PRECIO DE VENTA O DE COMPRA DEL ARTICULO
//IF oRSvg2="Pedidos Ventas"
Precio:= oPrecio:Fields("PRE_VALOR"):Value
Porcen:= oPrecio:Fields("PRE_PORCEN"):Value
Refer:= oPrecio:Fields("PRE_REFER"):Value
Valor:= oPrecio:Fields("PRE_VALOR"):Value
//ELSEIF oRSvg2="Pedidos Compras"
// Precio:= oPrecio:Fields("INV_VALCOM"):Value
//Porcen:= 0
//ENDIF
else
Precio:=Porcen:=Valor:=0
endif
oPrecio:close()
SELE tPe05
tPe05->Precio:=Valor
Skip
Enddo
oConP:Close()
//Msginfo("Inicia proceso registro en la cabecera del pedido")
TRY
oCon:=toleauto():new("adodb.connection")
CATCH oError
MsgStop( "No se ha podido crear la conexi贸n !", "Error de datos")
RETURN(.F.)
END
oCon:ConnectionString:= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog="+alltrim(oR5vg2)+";Data Source=SERVER\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=GERENCIA;Use Encryption for Data=False;Tag with column collation when possible=False"
TRY
oCon:Open()
CATCH oError
MsgStop( "No pude abrir la conexi贸n para crear las tablas !", "Error de datos")
RETURN(.F.)
END
*------------------------------------------------------------------
* HACE EL REGISTRO EN LA TABLA DE MOVIMIENTO
*------------------------------------------------------------------
SELE tPe05
DbGotop()
Do while !Eof()
SELE tPe05
Refer:=alltrim(tPe05->REFER)
Nombr:=alltrim(tPe05->NOMBRE)
Colos:=alltrim(tPe05->COLOR)
Talla:=alltrim(subs(tPe05->TALLA,3,5))
Canti:=tPe05->CANT
Precio:=tPe05->Precio
Porcen:=0
IF oRSvg2="Pedidos Ventas"
IF Val(Subs(oRSvgM,1,1))#0
cCommandSql := "INSERT INTO MOVPEDCXC (PED_TIPPED,PED_NUMPED,PED_BODEGA,PED_CLASE,PED_MARCA,PED_MODELO,PED_UBICA,PED_REFER,PED_CODIGO,PED_NOMREF,PED_CANPED,PED_VALUND,PED_VALTOT,PED_CONTEN,PED_PORIVA,PED_TIPINV,PED_CODSEC,PED_CANORI,PED_GRUPO,PED_UNDMED,PED_IVAINC,PED_LISPRE,PED_NOMEMP,PED_UNIDAD1,PED_PROREG,PED_FECHA,PED_FECVEN,PED_LOTE) VALUES (1,'"+numped+"','"+alltrim(oC1vg3)+"','00','"+alltrim(Marca)+"','"+Subs(Talla,3,Len(alltrim(Talla)))+"','"+Colos+"','"+Refer+"','"+Refer+"','"+Nombr+"',"+Str(Canti)+","+Str((Precio/(1+(PorcentajeIVA/100)))*oC1vg7)+","+Str(((Precio/(1+(PorcentajeIVA/100)))*oC1vg7)*Canti)+","+Str(Canti)+","+Str(PorcentajeIVA)+",'51','00030005',"+Str(Canti)+",'"+alltrim(Grupo)+"','"+alltrim(Unidad)+"',1,"+transform(lista,"9")+",'"+alltrim(oRSvg1)+"','"+alltrim(Unidad)+"','frmFAC101','"+cFecha+"','"+cFecha+"','"+vLote+"')"
ELSE
cCommandSql := "INSERT INTO MOVPEDCXC (PED_TIPPED,PED_NUMPED,PED_BODEGA,PED_CLASE,PED_MARCA,PED_MODELO,PED_UBICA,PED_REFER,PED_CODIGO,PED_NOMREF,PED_CANPED,PED_VALUND,PED_VALTOT,PED_CONTEN,PED_PORIVA,PED_TIPINV,PED_CODSEC,PED_CANORI,PED_GRUPO,PED_UNDMED,PED_IVAINC,PED_LISPRE,PED_NOMEMP,PED_UNIDAD1,PED_PROREG,PED_FECHA,PED_FECVEN,PED_LOTE) VALUES (1,'"+numped+"','"+alltrim(oC1vg3)+"','00','"+alltrim(Marca)+"','"+Subs(Talla,3,Len(alltrim(Talla)))+"','"+Colos+"','"+Refer+"','"+Refer+"','"+Nombr+"',"+Str(Canti)+","+Str((Precio/(1+(PorcentajeIVA/100))))+","+Str((Precio/(1+(PorcentajeIVA/100)))*Canti)+","+Str(Canti)+","+Str(PorcentajeIVA)+",'51','00030005',"+Str(Canti)+",'"+alltrim(Grupo)+"','"+alltrim(Unidad)+"',1,"+transform(lista,"9")+",'"+alltrim(oRSvg1)+"','"+alltrim(Unidad)+"','frmFAC101','"+cFecha+"','"+cFecha+"','"+vLote+"')"
ENDIF
ELSEIF oRSvg2="Pedidos Compras"
IF Val(Subs(oRSvgM,1,1))#0
cCommandSql := "INSERT INTO MOVPEDCXP (PED_TIPPED,PED_NUMPED,PED_BODEGA,PED_CLASE,PED_MARCA,PED_MODELO,PED_UBICA,PED_REFER,PED_CODIGO,PED_NOMREF,PED_CANPED,PED_VALUND,PED_VALTOT,PED_CONTEN,PED_PORIVA,PED_TIPINV,PED_CODSEC,PED_CANORI,PED_GRUPO,PED_UNDMED,PED_IVAINC,PED_LISPRE,PED_NOMEMP,PED_UNIDAD1,PED_PROREG,PED_FECHA,PED_FECVEN) VALUES (1,'"+numped+"','"+alltrim(oC1vg3)+"','00','"+alltrim(Marca)+"','"+Subs(Talla,3,Len(alltrim(Talla)))+"','"+Colos+"','"+Refer+"','"+Refer+"','"+Nombr+"',"+Str(Canti)+","+Str((Precio/(1+(PorcentajeIVA/100)))*oC1vg7)+","+Str(((Precio/(1+(PorcentajeIVA/100)))*oC1vg7)*Canti)+","+Str(Canti)+","+Str(PorcentajeIVA)+",'51','00030005',"+Str(Canti)+",'"+alltrim(Grupo)+"','"+alltrim(Unidad)+"',1,"+transform(lista,"9")+",'"+alltrim(oRSvg1)+"','"+alltrim(Unidad)+"','frmFAC101','"+cFecha+"','"+cFecha+"')"
ELSE
cCommandSql := "INSERT INTO MOVPEDCXP (PED_TIPPED,PED_NUMPED,PED_BODEGA,PED_CLASE,PED_MARCA,PED_MODELO,PED_UBICA,PED_REFER,PED_CODIGO,PED_NOMREF,PED_CANPED,PED_VALUND,PED_VALTOT,PED_CONTEN,PED_PORIVA,PED_TIPINV,PED_CODSEC,PED_CANORI,PED_GRUPO,PED_UNDMED,PED_IVAINC,PED_LISPRE,PED_NOMEMP,PED_UNIDAD1,PED_PROREG,PED_FECHA,PED_FECVEN) VALUES (1,'"+numped+"','"+alltrim(oC1vg3)+"','00','"+alltrim(Marca)+"','"+Subs(Talla,3,Len(alltrim(Talla)))+"','"+Colos+"','"+Refer+"','"+Refer+"','"+Nombr+"',"+Str(Canti)+","+Str((Precio/(1+(PorcentajeIVA/100))))+","+Str((Precio/(1+(PorcentajeIVA/100)))*Canti)+","+Str(Canti)+","+Str(PorcentajeIVA)+",'51','00030005',"+Str(Canti)+",'"+alltrim(Grupo)+"','"+alltrim(Unidad)+"',1,"+transform(lista,"9")+",'"+alltrim(oRSvg1)+"','"+alltrim(Unidad)+"','frmFAC101','"+cFecha+"','"+cFecha+"')"
ENDIF
ENDIF
TRY
oCon:Execute(cCommandSql)
CATCH oError
MsgInfo("El registro no pudo ser insertado MOVPEDCXC")
END
SELE tPe05
Skip
Enddo
IF MSGYESNO(IF(oRSvg2="Pedidos Ventas","Pedido No ","Ord.Compra No ")+alltrim(numped)+" Fue"+CRLF+;
"Creado Exitosamente."+CRLF+;
" "+CRLF+;
"Desea Generar Otro Pedido","Informaci贸n")
LIMPIA()
ELSE
oCuadro:End()
ENDIF