Saludos Antonio y demas miembros del foro de FWH,
Estoy solicitando ayuda para solucionar un error en una aplicacion elaborada en FWH que realiza una consulta a SQL Server para extraer informacion. (Tengo imagen del error pero no se como adjuntarla en esta nota)... esta misma consulta en el SQL SERVER 2005 funciona perfecto y genera una consulta de 5 columnas.
En el error sale un dialogo que tiene como titulo FiveODBC error message..., el texto de la consulta y luego [#0] Class: 01S02, [Microsoft][ODBC SQL Server Driver]Cambió el tipo de cursor, On Procedure: MAIN Line: 0
Mis consultas...
1. Como inserto una imagen o archivo de texto en esta nota para que la puedan ver..
2. Asumo que el error es porque dentro de esa consulta abro varias tablas... porque consultando 1 sola funciona bien... tendria que crear varias conexiones oDbf1....3 para cada tabla de la base de datos y luego en FWH hacer las relaciones..?
3. Que objeto debo usar para convertir esa consulta en un archivo de texto separado por comas?
4. Que objeto debo usar para subir ese archivo a un ftp?
5. Que objeto debo usar para enviar un correo de constancia del envio?
El proyecto es automatizar un proceso en el que extraigo unos datos de sql server, los convierto con excel en un .CSV, edito y le pongo unos comandos de MYSQL para actualizar, quitarle comillas, etc.. entro al administrador de MYSQL en nuestro servidor (powweb.com) y ejecuto ese archivo.. esto me actualiza los precios en linea y cantidades..
Agradezco de antemano la atencion y colaboracion.
Este es el codigo.
#include "FiveWin.ch"
#include "sql.ch"
MEMVAR oSysList
PROC Main()
LOCA oOdbc, oDbf, aData:= {}
oOdbc := TOdbc():New( OdbcDsnEntries()[ 5 ], 'sa', 'B1Admin' )
IF oOdbc:lSuccess
oDbf := TDbOdbc():new( "SELECT T0.[ItemCode][PRODUCTS_MODEL], T0.[ItemName][PRODUCTS_NAME], T0.[SuppCatNum][REF], T3.[FirmName][MARCA], " + ;
" SUM(T1.[OnHand])[EN STOCK], " + ;
" ( SELECT CASE WHEN ( T0.[ItemCode] IN ( SELECT CatSN.[ItemCode] FROM OSCN CatSN " + ;
" WHERE CatSN.[CardCode] = ( SELECT ItemInfo.[CardCode] FROM OITM ItemInfo " + ;
" WHERE T0.[ItemCode] = ItemInfo.[ItemCode]) AND CatSN.[U_HO_VENTA_SN] > 0) ) " + ;
" THEN ( SELECT MAX(CatSN.[U_HO_VENTA_SN]) FROM OSCN CatSN " + ;
" WHERE T0.[ItemCode] = CatSN.[ItemCode] AND CatSN.[CardCode] = " + ;
" ( SELECT ItemInfo.[CardCode] FROM OITM ItemInfo WHERE T0.[ItemCode] = ItemInfo.[ItemCode] ) ) " + ;
" WHEN ( ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) > 1 ) " + ;
" THEN ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) * 1.67 " + ;
" WHEN ( ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) <= 1 ) " + ;
" THEN ( SELECT LP2.[U_HO_COSTO] FROM OITM LP2 WHERE T0.[ItemCode] = LP2.[ItemCode] ) * 1.67 " + ;
" END )[VTA] " + ;
"FROM OITM T0 INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode " + ;
" INNER JOIN OITB T2 ON T0.ItmsGrpCod = T2.ItmsGrpCod " + ;
" INNER JOIN OMRC T3 ON T0.FirmCode = T3.FirmCode " + ;
"WHERE T1.[WhsCode] IN ('001', '002', '003', '004', '006', '007', '008', '009', '010') AND T0.[QryGroup58] = 'Y' " + ;
"GROUP BY T0.[ItemCode], T0.[ItemName], T0.[SuppCatNum], T3.[FirmName], T0.[AvgPrice] " + ;
"ORDER BY T0.[ItemCode]", oOdbc )
IF ! oOdbc:IsError()
oDbf:Gotop()
WHIL ! oDbf:Eof()
AADD( aData, oDbf:FieldGet( 1 ) )
oDbf:Skip()
ENDD
MSGINFO( aData[ 1 ] + ' ' + oDbf:FieldName( 1 ) )
oDbf:End()
oOdbc:End()
ELSE
oOdbc:ShowErrorList( 'Error al ejecutar consulta' )
oOdbc:aErrors := {}
oDbf:End()
ENDI
ELSE
oOdbc:ShowErrorList( 'Error al iniciar sesion ODBC' )
oOdbc:End()
ENDI
RETU
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*
* Start()
*
***/
INIT PROC Start( cParameter1 )
PUBL oSysList:= TSysList():New()
SET( _SET_CANCEL , .F. )
SET( _SET_DATEFORMAT, 'dd/mm/yy' )
SET( _SET_DECIMALS , 2 )
SET( _SET_DELETED , .T. )
SET( _SET_EPOCH , 1990 )
SET( _SET_EXACT , .T. )
SET( _SET_FIXED , .T. )
RETU
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*
* Exit()
*
***/
EXIT PROC EXIT()
RETU
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*
* TSysList
*
* Clase TSysList que contiene informacion del sistema.
*
***/
CLASS TSysList
DATA PathApp, Cargo
METHOD New() CONSTRUCTOR
ENDCLASS
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*
* ::New() --> Self
*
***/
METHOD New() CLASS TSysList
::PathApp:= HB_CURDRIVE() + ':\' + CURDIR()
::Cargo := ''
RETU SELF
ERROR EN CONSULTA SQL DESDE APLICACION FWH
ERROR EN CONSULTA SQL DESDE APLICACION FWH
Saludos / Greetings
Jair A. Linares
FWH 13.07/ Harbour 3.2.0 dev (r1306132159)/ Borland C++ 5.82 / UEStudio 9.20/ Help&Manual 5
jair.linares71@gmail.com
Jair A. Linares
FWH 13.07/ Harbour 3.2.0 dev (r1306132159)/ Borland C++ 5.82 / UEStudio 9.20/ Help&Manual 5
jair.linares71@gmail.com
Re: ERROR EN CONSULTA SQL DESDE APLICACION FWH
Podrias probar con ADO, haciendo algo así y ver si funciona:
Para saber cual es la cadena de conexión de tu base, puedes usar un truquito que puso The Full
http://forums.fivetechsupport.com/viewt ... na#p105705
Espero te sirva!
Code: Select all
FUNCTION Main()
LOCAL cConnStr, oCn, oERR, oQry, cSql
cConnStr := 'Provider=MSDAORA.1;Data Source=dblocal;User ID=mulyadi;Password=1234' // Aca pondrias tu cadena de conexion a SQL Server
oCn := CREATEOBJECT( "ADODB.Connection" )
TRY
oCn:Open( cConnStr )
CATCH oERR
SAYING := "Error conectando con la base de datos"
MsgInfo( oErr:description)
RETURN(.F.)
END TRY
cSql := "SELECT T0.[ItemCode][PRODUCTS_MODEL], T0.[ItemName][PRODUCTS_NAME], T0.[SuppCatNum][REF], T3.[FirmName][MARCA], " + ;
" SUM(T1.[OnHand])[EN STOCK], " + ;
" ( SELECT CASE WHEN ( T0.[ItemCode] IN ( SELECT CatSN.[ItemCode] FROM OSCN CatSN " + ;
" WHERE CatSN.[CardCode] = ( SELECT ItemInfo.[CardCode] FROM OITM ItemInfo " + ;
" WHERE T0.[ItemCode] = ItemInfo.[ItemCode]) AND CatSN.[U_HO_VENTA_SN] > 0) ) " + ;
" THEN ( SELECT MAX(CatSN.[U_HO_VENTA_SN]) FROM OSCN CatSN " + ;
" WHERE T0.[ItemCode] = CatSN.[ItemCode] AND CatSN.[CardCode] = " + ;
" ( SELECT ItemInfo.[CardCode] FROM OITM ItemInfo WHERE T0.[ItemCode] = ItemInfo.[ItemCode] ) ) " + ;
" WHEN ( ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) > 1 ) " + ;
" THEN ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) * 1.67 " + ;
" WHEN ( ( SELECT MAX(LP.[AvgPrice]) FROM OITW LP WHERE T0.[ItemCode] = LP.[ItemCode] ) <= 1 ) " + ;
" THEN ( SELECT LP2.[U_HO_COSTO] FROM OITM LP2 WHERE T0.[ItemCode] = LP2.[ItemCode] ) * 1.67 " + ;
" END )[VTA] " + ;
"FROM OITM T0 INNER JOIN OITW T1 ON T0.ItemCode = T1.ItemCode " + ;
" INNER JOIN OITB T2 ON T0.ItmsGrpCod = T2.ItmsGrpCod " + ;
" INNER JOIN OMRC T3 ON T0.FirmCode = T3.FirmCode " + ;
"WHERE T1.[WhsCode] IN ('001', '002', '003', '004', '006', '007', '008', '009', '010') AND T0.[QryGroup58] = 'Y' " + ;
"GROUP BY T0.[ItemCode], T0.[ItemName], T0.[SuppCatNum], T3.[FirmName], T0.[AvgPrice] " + ;
"ORDER BY T0.[ItemCode]"
Try
oQry := oCn:Execute(cSql)
Catch
oCn:Close()
MsgInfo( "Error en consulta" )
RETURN(.F.)
End Try
xBrowse( oQry)
oCn:Close()
RETURN .f.
http://forums.fivetechsupport.com/viewt ... na#p105705
Espero te sirva!
Re: ERROR EN CONSULTA SQL DESDE APLICACION FWH
muchas gracias cmsoft....
disculpas por la demora en los agradecimientos, tu respuesta fue de gran ayuda, vi la situacion desde otro punto de vista y esta funcionando perfecto...
Termine usando la clase TOleAuto().
Nuevamente agradezco tu colaboracion.
disculpas por la demora en los agradecimientos, tu respuesta fue de gran ayuda, vi la situacion desde otro punto de vista y esta funcionando perfecto...
Termine usando la clase TOleAuto().
Nuevamente agradezco tu colaboracion.
Saludos / Greetings
Jair A. Linares
FWH 13.07/ Harbour 3.2.0 dev (r1306132159)/ Borland C++ 5.82 / UEStudio 9.20/ Help&Manual 5
jair.linares71@gmail.com
Jair A. Linares
FWH 13.07/ Harbour 3.2.0 dev (r1306132159)/ Borland C++ 5.82 / UEStudio 9.20/ Help&Manual 5
jair.linares71@gmail.com
Re: ERROR EN CONSULTA SQL DESDE APLICACION FWH
Me alegro Jair, haberte podido ser útil, y que hayas encontrado la solución.