Por cierto, dejo también la función que uso para abrir BBDD Access, y las funciones extraídas de FW de apoyo.
Code: Select all
Function AbreConexionAccess (cBase, cTabla, lError, cPassword)
/* =======================================================================
cBase - Base de datos de trabajo
cTabla - Tabla a abrir
lError - Pasado por referencia
cPassword - Password si es necesario
=======================================================================
*/
Local cConnection:="", oCon, oRs
Default cPassword:=""
cConnection = "Provider='Microsoft.Jet.OLEDB.4.0'; Data Source='" + cBase + "';"
If Long(cPassword)<>0
cConnection+="Jet OLEDB:Database Password="+Alltrim(cPassword)+";"
Endif
TRY
oCon = FW_OPenAdoConnection( cConnection )
oCon:CursorLocation = 3 // adUseClient
CATCH oError
lError:=.T.
MsgAlert ("Imposible abrir la base de datos : "+cBase+CRLF+"Descripción del problema : "+ oError:Description)
END
oRs = TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType = 1 // opendkeyset
oRs:CursorLocation = 3 // local cache
oRs:LockType = 3 // lockoptimistic
cTabla = FW_QuotedColSQL( cTabla )
TRY
oRs:Open( "SELECT * FROM " + cTablA, oCon )
CATCH oError
lError:=.T.
MsgAlert ("Imposible abrir la tabla : "+cTabla+CRLF+"Descripción del problema : "+ oError:Description )
END
Return (oRs)
Function TipoCampoAccess (oField)
/* Devuelve el tipo de campo de una tabla access */
Local nType:=0, cType:="", nLen:=0
nType := oField:Type
DO CASE
CASE ASCAN( { 2, 3, 16, 17, 18, 19, 20, 21 }, nType ) > 0
cType := 'N'
nLen := oField:Precision
nDec := 0
CASE ASCAN( { 14, 131, 139 }, nType ) > 0
cType := 'N'
nLen := oField:Precision
nDec := oField:NumericScale
CASE ASCAN( { 4, 5, 6 }, nType ) > 0 // Single, Double, Currency
cType := 'N'
nLen := oField:Precision
nDec := 2
CASE ASCAN( { 7, 133, 135 }, nType ) > 0
cType := 'D'
CASE nType == 11
cType := 'L'
CASE ASCAN( { 8,128,129,130,200,201,202,203,204,205 }, nType ) > 0
cType := 'C'
nLen := oField:DefinedSize
if nLen == 0 .or. nLen > 100
cType := 'M'
nLen := 40
else
nLen := Min( 100, nLen )
endif
ENDCASE
Return (cType)
Function FW_QuotedColSQL( cCol )
/* Devuelve cadena con los símbolos correctos para abrir tabla acces */
cCol := AllTrim( cCol )
do while ', ' $ cCol
cCol := StrTran( cCol, ', ', ',' )
enddo
return '[' + StrTran( cCol, ",", "],[" ) + "]"
return cCol