Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2011, 12:38
defendertime4
 
Fecha de Ingreso: octubre-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Borrar una tabla mediante una variante

Buenas, Tengo un problema: tengo Access 2000 (9.0.6926 sp-3) con Visual Basic 6.0 y en una aplicaciòn access debo cargar distintos archivos de texto a una tabla, y en caso que existan errores en el archivo cargado, se pasen esos datos a una tabla de errores para luego con un reporte pueda saber que registro del archivo de texto està mal, quièn y cuando se generò dicho archivo; para eso los archivos de texto tienen una estructura "NombredelUsuario fecha" (Ej.: "A0043793 10-10-2011.txt", en un mòdulo de access tengo el siguiente programa:

Option Compare Database
Option Explicit
'************************************************* **************
'& &*
'& &*
'& &*
'& &*
'& Jefferson Jimenez (JJJT) &*
'& Cabimas - Venezuela &*
'& Julio - 2009 &*
'& &*
'& &*
'& &*
'& &*
'& &*
'************************************************* **************
Public borra As String


'End Sub


Public Var As String
' Función Api GetOpenFileName _
para abrir el cuadro de diálogo seleccionar archivo
Public Declare Function JJJT_Dialog Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" ( _
pOpenfilename As OPENFILENAME) As Long


' Estructure de datos _
OPENFILENAME para usar con GetOpenFileName
Public Type OPENFILENAME
Tamaño_JJJT As Long
Hwnd_JJJT As Long
Ins_JJJT As Long
Filtro_JJJT As String
CFiltro_JJJT As String
MFiltro_JJJT As Long
IFila_JJJT As Long
Fila_JJJT As String
MFila_JJJT As Long
LTitulo_JJJT As String
MTitulo_JJJT As Long
Disco_JJJT As String
Titulo_JJJT As String
JJJT_flags As Long
O_JJJT As Integer
Ext_JJJT As Integer
DE_JJJT As String
C_JJJT As Long
HO_JJJT As Long
N_JJJT As String
End Type

__________________________________________________ _______________

Function JJJT_CuadroDialog(tltFiltro, Directorio As String, Ctr As Control)
Dim El_Archivo As OPENFILENAME
With El_Archivo
.Tamaño_JJJT = Len(El_Archivo)
.Ins_JJJT = 1
.Filtro_JJJT = tltFiltro
.Fila_JJJT = Space$(254)
.MFila_JJJT = 255
.LTitulo_JJJT = Space$(254)
.MTitulo_JJJT = 255
.Disco_JJJT = Directorio
.Titulo_JJJT = "Busque el archivo a cargar"
.JJJT_flags = 0
End With

'Abrimos el cuadro de diálogo pasándole _
a GetOpenFileName la estructura anterior
If JJJT_Dialog(El_Archivo) Then
MsgBox "Ud. Seleccionó: " + Trim$(El_Archivo.Fila_JJJT), , "Cuadro Dialogo"
Ctr = Trim$(El_Archivo.Fila_JJJT)
Else
MsgBox "Cancelado", , "Dialog"
End If
DoCmd.RunMacro "Borra Carga Inicial"
DoCmd.TransferText acImportDelim, "ingresos Especificación de importación", _
"Carga_inicial", Trim$(El_Archivo.Fila_JJJT)

MsgBox "Ud. Cargó: " + Trim$(El_Archivo.Fila_JJJT)



borra = Left(Right(Trim$(El_Archivo.Fila_JJJT), 24), 19) + "_ErroresDeImportación"




Call borra_tabla(borra)
End Function

Desde este mòdulo (que se ejecuta desde un botòn en un formulario), se le dà la posibilidad a quièn carga la base de seleccionar un archivo y cargarlo. Si este tiene algùn dato erròneo generarà un archivo de error (Access lo hace por defecto) el nombre del archivo de error serà Por Ej.: "A0043792 09-09-2011_ErroresDeImportación", entonces luego de cargar el archivo de texto, pasarà a otro mòdulo separado del anterior:

Public Function borra_tabla(borra)

Set db = CurrentDb

db.TableDefs.Refresh

MsgBox "¿Existe " + borra + " ?"

For i = 0 To db.TableDefs.Count - 1
MsgBox i

MsgBox borra

If db.Name = borra Then
' If db.TableDefs(i).Name = "A0043792 09-09-2011_ErroresDeImportación3" Then

MsgBox "La Tabla Existe: " + borra

' DoCmd.DeleteObject acTable, "A0043792 09-09-2011_ErroresDeImportación2"
DoCmd.DeleteObject acTable, borra
MsgBox "Se Borró " + borra
Else
MsgBox "Nada para borrar"
Exit For
End If
Next i
End Function

En principio supuse que comparando la variable con TableDefs.Name deberìa funcionar, he probado de todo (mostrando en cada paso que me muestre un mensaje para ver que la variable aùn contiene el nombre de la tabla, pero al llegar y comparar ( If db.Name = borra Then) no ve nada y sigue de largo en cambio si le dirgo directamente el nombre de la tabla (If db.TableDefs(i).Name = "A0043792 09-09-2011_ErroresDeImportación") lo hace.

¿Que hago mal?
Saludos