Access Lab

<% Function abcednum(num, lang) If IsNumeric(num) Then Select Case lang Case "es", "esf" abcednum = n2t_tbs_es(num, 0) Case "esm" abcednum = n2t_tbs_es(num, 1) Case "esn" abcednum = n2t_tbs_es(num, 2) Case "ct", "ctf" abcednum = n2t_tbs_ct(num, 0) Case "ctm" abcednum = n2t_tbs_ct(num, 1) Case "ctn" abcednum = n2t_tbs_ct(num, 2) Case "en" abcednum = n2t_tbs_en(num) End Select End If End Function Function abcednumeur(num, lang, donde, prefi) ' Para los p..os euros... ' donde=1,2 o 3: 1=delante, 2=detrás, 3=sin Dim enter, decim, todo, s, lng, ln2, deci, decisep, decipos decisep=mid(formatnumber(0, 1, -1, 0, 0), 2, 1) decipos=instr(num, decisep) enter=0 decim=0 if decipos=0 then enter=num else if decipos>1 then enter=left(num, decipos-1) if decipos 0 then if len(decim) > 2 then decim=left(decim, 2) if len(decim) = 1 then decim = decim & "0" end if lng = Left(lang, 2) Select Case lng Case "es" If donde = 2 Then ln2 = "esn" Else ln2 = "esm" End If Case "ct" ln2 = "ctn" Case "en" ln2 = "en" End Select if donde = 1 then s = prefi & " " s = s & abcednum(enter, lang) if donde = 2 then s = s & " " & prefi If lng = "es" Then ln2 = "esn" If decim > 0 Then Select Case lng Case "es" s = s & " CON " Case "ct" s = s & " AMB " Case Else s = s & " & " End Select s = s & abcednum(decim, ln2) Select Case lng Case "es" s = s & " CÉNTIMO" Case "ct" s = s & " CÈNTIM" Case Else s = s & " CENT" End Select If decim > 1 Then s = s & "S" End If abcednumeur = s End Function Function cd_mod10(codigo) ' Calcula y devuelve un caracter con el dígito de control calculado por módulo 10 ' según sistema ean, upc, itf ' (de derecha a izquierda, un dígito vale 3 y el siquiente 1) Dim dc, n dc = 0 if isnumeric(codigo) and len(codigo)>0 then For n = Len(codigo) To 1 Step -1 dc = dc + (Mid(codigo, n, 1) * 3) n = n - 1: If n > 0 Then dc = dc + Mid(codigo, n, 1) Next cd_mod10 = Right(10 - (dc Mod 10), 1) end if End Function Function cc_mod10(codigo) ' Calcula y devuelve un caracter con el dígito de control calculado por módulo 10 ' según sistema tarjeta de crédito ' (de derecha a izquierda, un dígito vale 2 y el siquiente 1) Dim dc, n, s, n1 dc = 0 if isnumeric(codigo) and len(codigo)>0 then For n = Len(codigo) To 1 Step -1 s = mid(codigo, n, 1) * 2 For n1 = 1 to Len(s) dc = dc + Mid(s, n1, 1) Next n = n - 1: If n > 0 Then dc = dc + Mid(codigo, n, 1) Next cc_mod10 = Right(10 - (dc Mod 10), 1) end if End Function Function cd_mod43(codigo) ' devuelve un caracter correspondiente al valor numérico del 0 al 43 ' (code39) Const C39CHK = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" ' en orden para calcular cd mod43 Dim n, suma if len(codigo)>0 then For n = 1 To Len(codigo) suma = suma + InStr(C39CHK, Mid(codigo, n, 1)) - 1 Next cd_mod43 = Mid(C39CHK, (suma Mod 43) + 1, 1) end if End Function Function dcbank(cuenta) ' devuelve los digitos de control de cuentas bancarias If Len(cuenta) <> 18 Then dcbank = "" Else dcbank = dcbank2(Mid(cuenta, 1, 8)) & dcbank2(Mid(cuenta, 9)) End If End Function Function dcbank2(serie) Const PESOS = "06030709100508040201" Dim l, i, s For i = 1 To Len(serie) l = l + (Mid(serie, Len(serie) - i + 1, 1) * Mid(PESOS, ((i - 1) * 2) + 1, 2)) Next Select Case 11 - (l Mod 11) Case 11 dcbank2 = 0 Case 10 dcbank2 = 1 Case Else dcbank2 = 11 - (l Mod 11) End Select End Function Function letra_dni(dni) ' calcula la letra del dni Const DNILET = "TRWAGMYFPDXBNJZSQVHLCKE" if isnumeric(dni) and len(dni)>0 then letra_dni = Mid(DNILET, 1 + (dni Mod 23), 1) end if End Function Function dc_cif(codi) Dim i, n, s, t t=0 If Len(codi) = 8 Then If Not IsNumeric(Mid(codi, 1, 1)) Then If IsNumeric(Mid(codi, 2)) Then For i = 2 To 8 s = Mid(codi, i, 1) * (2 - (i Mod 2)) For n = 1 To Len(s) t = t + Mid(s, n, 1) Next Next dc_cif = Right(10 - (t Mod 10), 1) End If End If End If End Function Function digiRUT(rut) Dim i, i1, l, suma, s if isnumeric(rut) and len(rut)>0 then i1 = 1 For i = Len(rut) To 1 Step -1 i1 = i1 + 1: If i1 > 7 Then i1 = 2 suma = suma + (Mid(rut, i, 1) * i1) Next s = 11 - (suma Mod 11) If s = "10" Then s = "K" If s = "11" Then s = "0" digiRUT = s end if End Function Function n2t_tbs_ct(num, sexo) Dim abnum, txt, xt abnum = Abs(Fix(num)) xt = Right("000" & Fix(abnum / 1000000), 3) If xt <> 0 Then txt = n2t_tbs_ct_f(1, xt, sexo) xt = Right("000" & Fix(abnum / 1000), 3) If xt <> 0 Then txt = txt & n2t_tbs_ct_f(2, xt, sexo) xt = Right("000" & abnum, 3) If xt <> 0 Then txt = txt & n2t_tbs_ct_f(3, xt, sexo) n2t_tbs_ct = txt End Function Function n2t_tbs_ct_f(n, cf, sexo) ' sexo: 0=femenino, 1=masculino, 2=masculino terminado en UN dim cf1(19), cf2(10), cf3(10) Dim ftxt cf1(1) = "UN" cf1(2) = "DOS" cf1(3) = "TRES" cf1(4) = "QUATRE" cf1(5) = "CINC" cf1(6) = "SIS" cf1(7) = "SET" cf1(8) = "VUIT" cf1(9) = "NOU" cf1(10) = "DEU" cf1(11) = "ONZE" cf1(12) = "DOTZE" cf1(13) = "TRETZE" cf1(14) = "CATORZE" cf1(15) = "QUINZE" cf1(16) = "SETZE" cf1(17) = "DISSET" cf1(18) = "DIVUIT" cf1(19) = "DINOU" cf2(1) = "" cf2(2) = "VINT-I" cf2(3) = "TRENTA" cf2(4) = "QUARANTA" cf2(5) = "CINQUANTA" cf2(6) = "SEIXANTA" cf2(7) = "SETANTA" cf2(8) = "VUITANTA" cf2(9) = "NORANTA" cf3(1) = "CENT" cf3(2) = "DOS" cf3(3) = "TRES" cf3(4) = "QUATRE" cf3(5) = "CINC" cf3(6) = "SIS" cf3(7) = "SET" cf3(8) = "VUIT" cf3(9) = "NOU" sw = 1 If sexo = 0 And n > 1 Then cf1(1) = "UNA" cf1(2) = "DUES" cf3(2) = "DUES" Else cf1(2) = "DOS" cf3(2) = "DOS" If n = 3 And sexo = 1 Then cf1(1) = "U" Else cf1(1) = "UN" End If If cf <> 1 Or n <> 2 Then If Mid(cf, 1, 1) <> "0" Then If cf = 100 Then ftxt = "CENT" Else ftxt = cf3(Mid(cf, 1, 1)) If Mid(cf, 1, 1) = 1 Then ftxt = ftxt & " " Else ftxt = ftxt & "-CENT" If n > 1 And sexo = 0 Then ftxt = ftxt & "ES " Else ftxt = ftxt & "S " End If End If End If End If If cf <> 100 Then Select Case Mid(cf, 2) Case 10 ftxt = ftxt & "DEU " Case 2 If n = 1 Then ftxt = ftxt & "DOS" Else ftxt = ftxt & cf1(Mid(cf, 2)) End If Case 20 ftxt = ftxt & "VINT " Case Else If mid(cf, 2)>2 and mid(cf,2)< 20 Then ftxt = ftxt & cf1(Mid(cf, 2)) Else If Mid(cf, 2, 1) > 0 Then ftxt = ftxt & cf2(Mid(cf, 2, 1)) If Mid(cf, 2, 1) > 1 Then If Mid(cf, 3, 1) <> 0 Then ftxt = ftxt & "-" End If If n = 1 And Mid(cf, 3, 1) = "1" Then ftxt = ftxt & "UN" ElseIf Mid(cf, 3, 1) > 0 Then ftxt = ftxt & cf1(Mid(cf, 3, 1)) End If End If End Select End If End If Select Case n Case 1 If cf = 1 Then ftxt = ftxt & " MILIO " ElseIf cf > 1 Then ftxt = ftxt & " MILIONS " End If Case 2 ftxt = ftxt & " MIL " End Select n2t_tbs_ct_f = ftxt End Function Function n2t_tbs_en(num) Dim abnum, txt, xt abnum = Abs(Fix(num)) xt = Right("000" & Fix(abnum / 1000000), 3) If xt <> 0 Then txt = n2t_tbs_en_f(1, xt) xt = Right("000" & Fix(abnum / 1000), 3) If xt <> 0 Then txt = txt & n2t_tbs_en_f(2, xt) xt = Right("000" & abnum, 3) If xt <> 0 Then txt = txt & n2t_tbs_en_f(3, xt) n2t_tbs_en = txt End Function Function n2t_tbs_en_f(n, cf) dim cf1(20), cf2(10) Dim ftxt cf1(1) = "ONE" cf1(2) = "TWO" cf1(3) = "THREE" cf1(4) = "FOUR" cf1(5) = "FIVE" cf1(6) = "SIX" cf1(7) = "SEVEN" cf1(8) = "EIGHT" cf1(9) = "NINE" cf1(10) = "TEN" cf1(11) = "ELEVEN" cf1(12) = "TWELVE" cf1(13) = "THIRTEEN" cf1(14) = "FOURTEEN" cf1(15) = "FIFTEEN" cf1(16) = "SIXTEEN" cf1(17) = "SEVENTEEN" cf1(18) = "EIGHTEEN" cf1(19) = "NINETEEN" cf2(2) = "TWENTY" cf2(3) = "THIRTY" cf2(4) = "FORTY" cf2(5) = "FIFTY" cf2(6) = "SIXTY" cf2(7) = "SEVENTY" cf2(8) = "EIGHTY" cf2(9) = "NINETY" sw = 1 If Mid(cf, 1, 1) <> "0" Then ftxt = cf1(Mid(cf, 1, 1)) & " HUNDRED " End If If Mid(cf, 2, 1) < "2" Then ftxt = ftxt & cf1(Mid(cf, 2, 2)) & " " Else ftxt = ftxt & cf2(Mid(cf, 2, 1)) & " " if mid(cf, 3, 1) <> 0 then ftxt = ftxt & cf1(Mid(cf, 3, 1)) & " " End If End If Select Case n Case 1 If cf = 1 Then ftxt = ftxt & "MILLION " ElseIf cf > 1 Then ftxt = ftxt & "MILLIONS " End If Case 2 ftxt = ftxt & "THOUSAND " End Select n2t_tbs_en_f = ftxt End Function Function n2t_tbs_es(num, sexo) Dim abnum, txt, xt abnum = Abs(Fix(num)) xt = Right("000" & Fix(abnum / 1000000), 3) If xt <> 0 Then txt = n2t_tbs_es_f(1, xt, sexo) xt = Right("000" & Fix(abnum / 1000), 3) If xt <> 0 Then txt = txt & n2t_tbs_es_f(2, xt, sexo) xt = Right("000" & abnum, 3) If xt <> 0 Then txt = txt & n2t_tbs_es_f(3, xt, sexo) n2t_tbs_es = txt End Function Function n2t_tbs_es_f(n, cf, sexo) ' sexo: 0=femenino, 1=masculino, 2=masculino terminado en UN Dim cf1(16), cf2(10), cf3(10) Dim ftxt cf1(1) = "UNA" cf1(2) = "DOS" cf1(3) = "TRES" cf1(4) = "CUATRO" cf1(5) = "CINCO" cf1(6) = "SEIS" cf1(7) = "SIETE" cf1(8) = "OCHO" cf1(9) = "NUEVE" cf1(10) = "DIEZ" cf1(11) = "ONCE" cf1(12) = "DOCE" cf1(13) = "TRECE" cf1(14) = "CATORCE" cf1(15) = "QUINCE" cf2(1) = "DIECI" cf2(2) = "VEINTI" cf2(3) = "TREINTA" cf2(4) = "CUARENTA" cf2(5) = "CINCUENTA" cf2(6) = "SESENTA" cf2(7) = "SETENTA" cf2(8) = "OCHENTA" cf2(9) = "NOVENTA" cf3(1) = "CIENTO" cf3(2) = "DOS" cf3(3) = "TRES" cf3(4) = "CUATRO" cf3(5) = "QUINIEN" cf3(6) = "SEIS" cf3(7) = "SETE" cf3(8) = "OCHO" cf3(9) = "NOVE" sw = 1 If sexo = 0 Then cf1(1) = "UNA" Else If n = 3 And sexo = 1 Then cf1(1) = "UNO" Else cf1(1) = "UN" If cf <> 1 Or n <> 2 Then If Mid(cf, 1, 1) <> "0" Then If cf = 100 Then ftxt = "CIEN" Else ftxt = cf3(Mid(cf, 1, 1)) Select Case Mid(cf, 1, 1) Case 1 ftxt = ftxt & " " Case 2, 3, 4, 6, 7, 8, 9 ftxt = ftxt & "CIEN" End Select If Mid(cf, 1, 1) <> 1 Then If n > 1 And sexo = 0 Then ftxt = ftxt & "TAS " Else ftxt = ftxt & "TOS " End If End If End If End If If cf <> 100 Then Select Case Mid(cf, 2) Case 10 ftxt = ftxt & "DIEZ " Case 20 ftxt = ftxt & "VEINTE " Case Else If mid(cf, 2)>1 and mid(cf, 2)<16 Then ftxt = ftxt & cf1(Mid(cf, 2)) Else If Mid(cf, 2, 1) > 0 Then ftxt = ftxt & cf2(Mid(cf, 2, 1)) If Mid(cf, 2, 1) > 2 Then If Mid(cf, 3, 1) > 0 Then ftxt = ftxt & " Y " End If If n = 1 And Mid(cf, 3, 1) = "1" Then ftxt = ftxt & "UN" ElseIf Mid(cf, 3, 1) > 0 Then ftxt = ftxt & cf1(Mid(cf, 3, 1)) End If End If End Select End If End If Select Case n Case 1 If cf = 1 Then ftxt = ftxt & " MILLON " ElseIf cf > 1 Then ftxt = ftxt & " MILLONES " End If Case 2 ftxt = ftxt & " MIL " End Select n2t_tbs_es_f = ftxt End Function %>

Compatibilidad Access 2000 con 97

Conversión

No he detectado ningún problema especial en la conversión de bases de datos de Access 97 a 2000. Solamente lo "normal" en cada cambio de versión: algún que otro error de compilación, normalmente solucionable recompilando el código de la nueva base de datos, y localizando la fuente del error, que suele estar en las Referencias.

Coexistencia

Tengo las dos versiones instaladas y funcionando en varios equipos. Incluso dicen que puedes tener también Access 2.0, pero eso ya no lo he probado.

Lo que sí es verdad es que hay que instalar las versiones de menor a mayor para que funcione. Si por casualidad intentas instalar 97 después de 2000, posiblemente aparezca un error indicando que no hay licencia, o algo así. Entonces no queda más remedio que desinstalar las dos versiones y repetir la instalación en el orden adecuado.

De todas formas, a menudo aparece un error de Memoria insuficiente al tratar de abrir una base de datos en Access 97, si previamente has abierto Access 2000, o alguna otra parte del Office 2000. No he encontrado otra solución que la de reiniciar el equipo, y abrir directamente Access 97. Si alguien conoce una solución más elegante, por favor me lo cuente.

Marcha atrás

Es la primera vez que Access ofrece la posibilidad de convertir una base de datos a una versión anterior, lo cual en teoría es bastante atractivo. Digo "en teoría" por dos motivos: primero, si has usado alguna funcionalidad nueva en Access 2000, evidentemente al convertir la base de datos a 97 esa función se perderá, y el resultado es impredecible. En segundo lugar, solamente he probado con bases de datos sencillitas, y ha funcionado bien. Pero dado que el motivo de pasar aplicaciones de 97 a 2000 es para aprovechar las nuevas funcionalidades, no tiene sentido intentar volverlas hacia atrás.


Volver a AccessLab