Google Web

Mostrando entradas con la etiqueta access. Mostrar todas las entradas
Mostrando entradas con la etiqueta access. Mostrar todas las entradas

12 sept 2008

Viejas tecnologías...

Día a día me enfrento contra la resistencia a las actualizaciones. No lo puedo soportar, es como un Javiersillo molesto que en todo sistema que toco aparece con sus downgrade. El día de hoy tuve caos por dos detalles que me molestan y quiero compartir.

El primero de estos es con mi aplicación horrible de VB6, al descubrir que con el cliente no funcionan los booleanos. Esto es nonsense al por mayor, pues resulta que el maldito RDO/DAO, no puede ajustar su vida para entender que 0 es FALSE y -1 es TRUE. Asi que en en ciertas maquinas tengo que -1 es TRUE y en las que no hacen las cosas bien dice que es FALSE!. No entiendo porque, pero bueno, así que tendre que dejar a SQL de Access ayudarme con algo como IIF.

Ahora la otra, un cliente de PHP, tenía una horrible librería de JSON para su sitio. Yo dije WTF!, porque hace mamadas como esas, no conoce acaso json_encode y json_decode? En fin programe, y fui feliz todo el update del sistema (reescribirlo en clases) funciono. Pero oh sorpresa! El cliente es old fashion, y tiene una versión antiquisima de PHP (eso explica porque usan la librería). Ya esta el proceso de intentar actualizar el server, espero que sea factible, porque de lo contrario... Bueno no necesito aclarar más.

7 sept 2008

Antes del DDL, teníamos...

En uno de los multiproyectos que estoy trabajando actualmente, tengo una hermosa aplicación VB6 de esas que se conectan a MS Access. Maldigo el día que me di cuenta que Access era tan "avanzado" que tenía relaciones de tablas y que estás son invisibles. He intentado muchas cosas para intentar descubrir como se llama una FK para poder borrarla en la aplicación, y mis intentos han sido fracasados una y otra vez.

El metadata de Access es algo misterioso (MISTICO), y más cuando tienes que usar cosas como DAO. La documentación esta más perdida que la de PHP, encontrar un indicio de DDL fue una proeza que me llevo a pelearme a entender que COUNTER es la keyword más extraña para definir un entero autoincremental (tiene sentido, pero saber que era COUNTER me costo un día).

En mi opinión, creo que si esto continua optare por sugerir cambiar el Access por un SQLite o algo más actual. Al cabo solo sería cambiar un tonto ODBC que no? Bueno, para darle un poco de valor a este post, les listare las trampas mortales que caí y espero que sirvan a alguién más en el manejo de Access:
  • La creación de una tabla por DDL si es CREATE TABLE, pero ojo, los datatypes son algo diferentes a los que se acostumbran, por ejemplo un int autoinc es un COUNTER, un varchar(x) es un TEXT (notese que no es un BLOB, el pseudoBLOB es MEMO). El resto de datatypes es LONG, INTEGER, CURRENCY, DATETIME. No recuerdo algo como un float o double, así que CURRENCY ayudo, je.
  • Para lograr sacar metadata rápido, recomiendo soltar el VB6 y utilizar VBA de Access. Esto porque, simplemente porque conectar por DAO es en ocasiones algo como un ritual. Asi que CurrentDB desde VBA será su amigo, creanlo (ahorraran mucho tiempo).
  • La manera más sencilla de ejecutar código en DAO, es crear un modulo en VBA poner nuestro código en una function y luego con la Inmediate correr la función. Se que suena chafa, pero ahorra tiempo valioso. Un código podría ser algo así por ejemplo:
Public Function runMe()
Dim db As Database
Dim mobjTable As TableDef

Set db = CurrentDb
Set mobjTable = db.TableDefs("TABLE001")

For Each objIndex In mobjTable.Indexes
Debug.Print objIndex.Name
Next objIndex
End Function

Horrible, pero cierto. Esta es mi manera fácil de encontrar los Indices y FK de Access. Recuerden, trabajar en Access en lugar de VB6 les ahorrara mucho tiempo! Y quizás me digan anticuado, pero seamos realistas hay muchos sistemas legados alla afuera en VB6/Access, así que no esten de pussers diciendo que nunca lo harán, un buen coder se echa cualquiér trompo a la uña.