Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/04/2011, 23:24
wwwmaster
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: Exportar tablas DBF a Excel con Excel

Desde excel, puedes hacerlo si creas un DNS de sistema (inicio-panel de control- herramientas administrativas - ODBC.

En mi caso, me comunico hacia FOX PRO con el siguiente driver desde excel, donde database tiene la ruta a la carpeta donde estan los .dbf de Foxpro para windows:

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & database & ";Extended Properties=dBASE III;User ID=Admin;Password= "
'conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & database & ";Extended Properties=DBASE III;Persist Security Info=False"
'database = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\sistemas\motos;Extended Properties=dBASE III;User ID=Admin;Password= "

' Procederemos a CLAREAR TODAS LAS ETAPAS (por ahora, con captura online debera ser row by row
Sql = ""
cadenaCampos = ""
' recuperamos una cadena con todos los nombres de campo q se clarearan, deben ser nombres de campos
' tomados directos de la database para saber si existen y que el UPDATE corra
' Especifoco sobre esos
' para evaluar si los campos existe
Sql = "SELECT * FROM CARRERAS "
rsCarreras.Open Sql, conn
If sheetParametros.radVELOCIDAD Then
campoDestino = "VELO"
ElseIf sheetParametros.radESPECIAL Then
campoDestino = "ESPE"
Else
MsgBox "Especifique si van para VELOCIDAD o ESPECIAL!"
Exit Sub
End If

indiceMaximoDeCampos = 0
' -------------------------
' b) CICLO PARA DETECTAR CUANTOS CAMPOS CLAREAREMOS
' -------------------------
For vueltas = 1 To 8
campoAEvaluar = campoDestino & vueltas & "_INI"
campoAEvaluar2 = campoDestino & vueltas & "_FIN"
campoAEvaluar3 = campoDestino & vueltas & "_DIF"

' Si el campo a vealuar existe definido dentro de la tabla foxpro se procede a
' armarlo en la cadena
On Error GoTo NOEXISTECAMPO:
paso = rsCarreras.Fields(campoAEvaluar)
' Separamos x comas la SQL de update
If cadenaCampos <> "" Then cadenaCampos = cadenaCampos & ","
cadenaCampos = cadenaCampos & campoAEvaluar & "=''"
' Campos de fin y diferencia
cadenaCampos = cadenaCampos & ","
cadenaCampos = cadenaCampos & campoAEvaluar2 & "=''"
cadenaCampos = cadenaCampos & ","
cadenaCampos = cadenaCampos & campoAEvaluar3 & " = ''"
' Ojo.. cadenaCampos solo puede tener un maximo de longitud o tronara al ejecutarse vs Foxpro
On Error GoTo 0
GoTo CAMPOAGREGADO:
NOEXISTECAMPO:
' Se sale del ciclo
On Error GoTo 0
Exit For
' EJECUTA CLASE DE CAMPOS INICIAL PARA LLEvar a cabo la nueva carga
CAMPOAGREGADO:
indiceMaximoDeCampos = vueltas
' Se ejecuta aqui x que luego es muy larga la cadena de UPDATE y truena
If cadenaCampos <> "" Then
' -------------------------
' Procede con el clareado de TODOS LOS REGISTROS (debe haber where x categoria)
' -------------------------
Sql = "UPDATE CARRERAS SET " & cadenaCampos
'& " WHERE num_moto=" & moto
' Valida si es para JUVENILES o ADULTOS
If CATEGORIAS = "JUV" Then
'Sql = Sql & [ WHERE at("JUVENIL", categoria)>0 OR at("FEMENIL", categoria)>0 ]
Sql = Sql & " WHERE ( instr(ucase(categoria), 'FEMENIL')>0 OR instr(ucase(categoria), 'JUVENIL')>0 )"
Else
' ADULTOS
'Sql = Sql & " WHERE instr('JUVENIL', categoria)=0 AND at('FEMENIL', categoria)=0 "
'Sql = Sql & " WHERE instr(categoria,'JUVENIL')=0 AND instr(categoria, 'FEMENIL')=0 "

Sql = Sql & " WHERE ( instr(ucase(categoria), 'FEMENIL')=0 AND instr(ucase(categoria), 'JUVENIL')=0 )"
'Sql = Sql & " AND num_moto=0 "
End If
' MsgBox Sql
conn.Execute Sql
cadenaCampos = ""
End If

Next
rsCarreras.Close