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