En VB, 1 ó 0 no es lo mismo que True o False, puesto que el primer caso es numérico (byte como mínimo) y el segundo es Boolean, que es un tipo de por sí. En muchos lenguajes, se "comprimen" las variables booleanas de tal forma que en un byte se almacenen hasta 8 de ellas, o bien se utiliza un único bit de los 8 de byte.
Por esta razón, 2 también puede ser True, igual que 32.
En c y c++, por ejemplo, no existe el boolean como tal, y se considera que toda variable numérica es False si vale cero y True en caso contrario, pero en VB, y en todas las bases de datos que conozco, son tipos diferentes, por lo que "campo=1" no es lo mismo que "campo=True", y puede fallar.
Analoyra tenía dos soluciones: bien la que le he propuesto, que es "la óptima" (como decía un profesor mío), o bien cambiar el tipo de los campos en la base de datos por numéricos (byte, para no desperdiciar espacio)