Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: AxioUK en Octubre 03, 2014, 12:04:58 am
-
Hola estimados:
Tuve un "pequeño" problemas de Virus en mi PC y me ví obligado a formatear. El asunto es que ahora una Instrución de mi App no quiere funcionar como antes. explico:
Tengo la siguiente Sub:
Private Sub CrearMes(strTabla As String)
On Error GoTo Err_H
If Rst.State = adStateOpen Then Rst.Close
' <-- Creo Tablas Si No Existen ...
If sqlTableExist(strTabla) = False Then
Cnn.Execute sqlCreateMes(MesActual, strTabla)
' Log...
WriteLog sqlCreateMes(MesActual, strTabla)
End If
'-------------------------------
' Actualizo Personal Activo
strSQLString = "INSERT INTO " & strTabla & "(RUT) SELECT RUT FROM PERSONAS WHERE ACTIVO='SI';"
Cnn.Execute strSQLString
' Log...
WriteLog strSQLString & vbCrLf & "OK!"
Exit Sub
Err_H:
' Log...
WriteLog Err.Number & ": " & Err.Description
End Sub
que llama a esta Function contenida en un Módulo:
Public Function sqlCreateMes(sMes As String, sTabla As String)
Select Case UCase(sMes)
Case "FEBRERO"
sqlCreateMes = "CREATE TABLE " & sTabla & "(RUT VARCHAR(12) NOT NULL PRIMARY KEY UNIQUE, D1 CHAR, D2 CHAR, D3 CHAR, D4 CHAR, D5 CHAR, D6 CHAR, D7 CHAR, D8 CHAR, " & _
"D9 CHAR, D10 CHAR, D11 CHAR, D12 CHAR, D13 CHAR, D14 CHAR, D15 CHAR, D16 CHAR, D17 CHAR, D18 CHAR, D19 CHAR, D20 CHAR, D21 CHAR, D22 CHAR, " & _
"D23 CHAR, D24 CHAR, D25 CHAR, D26 CHAR, D27 CHAR, D28 CHAR, D29 CHAR, HORAS INTEGER, HORASHASTA VARCHAR(10));"
Case "NOVIEMBRE", "SEPTIEMBRE", "ABRIL", "JUNIO"
sqlCreateMes = "CREATE TABLE " & sTabla & "(RUT VARCHAR(12) NOT NULL PRIMARY KEY UNIQUE, D1 CHAR, D2 CHAR, D3 CHAR, D4 CHAR, D5 CHAR, D6 CHAR, D7 CHAR, D8 CHAR, " & _
"D9 CHAR, D10 CHAR, D11 CHAR, D12 CHAR, D13 CHAR, D14 CHAR, D15 CHAR, D16 CHAR, D17 CHAR, D18 CHAR, D19 CHAR, D20 CHAR, D21 CHAR, D22 CHAR, " & _
"D23 CHAR, D24 CHAR, D25 CHAR, D26 CHAR, D27 CHAR, D28 CHAR, D29 CHAR, D30 CHAR, HORAS INTEGER, HORASHASTA VARCHAR(10));"
Case Else '"ENERO", "MARZO", "MAYO", "JULIO", "AGOSTO", "OCTUBRE", "DICIEMBRE"
sqlCreateMes = "CREATE TABLE " & sTabla & "(RUT VARCHAR(12) NOT NULL PRIMARY KEY UNIQUE, D1 CHAR, D2 CHAR, D3 CHAR, D4 CHAR, D5 CHAR, D6 CHAR, D7 CHAR, D8 CHAR, " & _
"D9 CHAR, D10 CHAR, D11 CHAR, D12 CHAR, D13 CHAR, D14 CHAR, D15 CHAR, D16 CHAR, D17 CHAR, D18 CHAR, D19 CHAR, D20 CHAR, D21 CHAR, D22 CHAR, " & _
"D23 CHAR, D24 CHAR, D25 CHAR, D26 CHAR, D27 CHAR, D28 CHAR, D29 CHAR, D30 CHAR, D31 CHAR, HORAS INTEGER, HORASHASTA VARCHAR(10));"
End Select
End Function
Antes de Formatear funcionaba todo OK, pero ahora me dá el siguiente error al ejecutar la linea:
Cnn.Execute sqlCreateMes(MesActual, strTabla)(http://i1115.photobucket.com/albums/k552/AxioUK/error.png)
La Base de datos es Access y utilizo MSAccess2013, uso "Provider=Microsoft.ACE.OLEDB.12.0" en la cadena de conexión y estoy trabajando de manera Local, no en red. He buscado información al respecto, pero no estoy en ninguna de las situaciones indicadas para la ocurrencia de este error. Solo asumir que me faltó instalar algo, pero he revisado todo y no encuentro lo faltante. Favor si alguien sabe como solucionarlo...
Agradecido
-
Nunca habia visto ese tipo de error y de curiosidad googleando tambien veo que indican que ese error salta cuando se inserta registros (casi obvio) que excende el tamaño del campo, pero tu estas creando tablas....mmm, no sabría ayudarte doc y ojala alguien la chunte para saber sobre esto.
Pregunta de curioso ¿que le mandas en strTabla?
Y solo de puro mañoso factorizaria el sql (no aporta a tu problema pero por si aca):
Public Function sqlCreateMes(sMes As String, sTabla As String)
sqlCreateMes = "CREATE TABLE " & sTabla & "(RUT VARCHAR(12) NOT NULL PRIMARY KEY UNIQUE, D1 CHAR, D2 CHAR, D3 CHAR, D4 CHAR, D5 CHAR, D6 CHAR, D7 CHAR, D8 CHAR, " & _
"D9 CHAR, D10 CHAR, D11 CHAR, D12 CHAR, D13 CHAR, D14 CHAR, D15 CHAR, D16 CHAR, D17 CHAR, D18 CHAR, D19 CHAR, D20 CHAR, D21 CHAR, D22 CHAR, " & _
"D23 CHAR, D24 CHAR, D25 CHAR, D26 CHAR, D27 CHAR, D28 CHAR, D29 CHAR"
Select Case UCase(sMes)
Case "FEBRERO"
sqlCreateMes = sqlCreateMes & ", HORAS INTEGER, HORASHASTA VARCHAR(10));"
Case "NOVIEMBRE", "SEPTIEMBRE", "ABRIL", "JUNIO"
sqlCreateMes = sqlCreateMes & ", D30 CHAR, HORAS INTEGER, HORASHASTA VARCHAR(10));"
Case Else '"ENERO", "MARZO", "MAYO", "JULIO", "AGOSTO", "OCTUBRE", "DICIEMBRE"
sqlCreateMes = sqlCreateMes & ", D30 CHAR, D31 CHAR, HORAS INTEGER, HORASHASTA VARCHAR(10));"
End Select
End Function
Un detalle, a Febrero le estas mandando D29, presumo que D29 es el dia y solo hay 29 cada 4 años... por si aca.
Saludos
-
Si lo ejecutas directo en acces funciona?
Access tiene la consulta de creación de tabla. Puedes crearla en la base de datos access y llamarla desde visual basic como si fuera un stored procedure
-
Raul338: >Sí, en Access funciona perfecto... solo despues de formatear y reinstalar empezó con el error, antes de..., todo OK.
Master Yacosta: Se tomará en cuenta la sugerencia de factorizar.... mañas mías de mi desorden en el aprendizaje... la funcionalidad completa corresponde a un apartado de control de asistencia, este revisa si el mes en curso existe, si no, crea una tabla con el nombre del mes y el año, en strTable envío el nombre que debe tener la tabla a crear, ej: CREATE TABLE Octubre2014 ....
En cuanto al 29 de Febrero, opté (para reducir código) crear el mes bisiesto de una, como la consulta se hace por día, si no hay día 29, no se hará esa consulta.... y por lo mismo no guardará nada en el tampoco.
Gracias de todos modos, seguiré investigando y revisando....
======================================================
SOLUCIONADO:
Por alguna razón la BD se corrompió, Access la abre normalmente, pero no me permite agregar datos ni crear objetos de ninguna clase mediante SQL, solo usando el comando Tabla de la Cinta de Opciones de Access (??), porqué? no lo sé, solo rehize la DB (se escribe más facil de lo que en realidad me costó) y todo vuelve a funcionar nuevamente...
De seguro algun virusillo travieso hizo lo suyo en la DB....
Saludos a Todos y Gracias por su tiempo e Interés....