2011-05-17 75 views
6

Tengo una consulta simple pero estoy teniendo problemas al usar LIKE en VBA. Mi cadena SQL en VBA es:Uso de Like * Funciona en MS-Access pero no en VBA

stsql1 = "Select Top 25 data.* from data where data.Description Like ('*') " 

Cuando ejecuto esta cadena SQL en mi código VBA consigo devuelve ningún registro, pero si copiar/pegar la misma cadena en una consulta en vista SQL en MS Access, la consulta devuelve los valores que espero. ¿Hay algún truco para usar la sintaxis "Me gusta" en VBA?

Puedo proporcionar un código adicional y una pequeña versión de la base de datos si eso ayuda.

+0

No debería haber ninguna diferencia. Por favor, publique su código VBA circundante. – mwolfe02

+0

En VBA, '" foo "como" f * "' devuelve True.Pero '" foo "como 'f *' 'desencadena un error de compilación. – HansUp

+1

Muéstranos el contexto del código para que podamos entender cómo intentas usar la declaración SQL en VBA, y si estás tratando con DAO o ADO aquí. – HansUp

Respuesta

5

En ADO/VBA, tiene que usar% en lugar de * como comodín. Me encontré con esto un par de veces en el pasado ...

+0

Gracias! El carácter "%" resolvió el problema. –

+3

No es VBA, sino ADO lo que hace que tenga que usar un conjunto diferente de comodines del que usaría en el generador de consultas de Access. Todos los que publiquen aquí deberían leer el artículo de @daydaywhen aquí: http://stackoverflow.com/questions/719115/microsoft-jet-wildcards-asterisk-or-percentage-sign/720896#720896 –

8

Para SQL, el motor de base de datos aceptará comillas simples o dobles como delimitadores de texto. De modo que cualquiera de estas 2 cláusulas WHERE funcionará.

WHERE some_field Like '*' 
WHERE some_field Like "*" 

VBA sin embargo, sólo acepta comillas como delimitadores de texto, por lo que tendría que utilizar la segunda forma. otros

dos puntos sobre su estado de SELECT:

Select Top 25 data.* from data where data.Description Like ('*') 
  1. TOP [number] es arbitraria sin una cláusula ORDER BY
  2. que no es necesario paréntesis que rodea a su patrón Like ... puede utilizar Like "*"

Si su código VBA está utilizando ADO con ese SELECT declaración, debe cambiar el carácter comodín *-% ...

WHERE data.Description Like '%' 
1

cuenta de que hay al menos 2 (sí dos!) Al igual que los operadores aquí.

Uno es el operador LIKE de VBA.

El otro es el operador LIKE del SQL de la base de datos a la que está conectado.

Los comodines habituales en SQL son% (para cualquier n. ° de caracteres) y _ (para cualquier carácter).

También sepa que MS Access puede abrir bases de datos que no son de acceso; podría ser Microsoft SQL Server, o Oracle o IBM DB2. (Por cierto, la base de datos que es normal para Access se llama Microsoft JET). Puede estar protegido de esa verdad cuando crea un objeto Query en Access; en ese caso, está usando JET SQL incluso cuando se trata de una tabla vinculada que está consultando .

Sin embargo, en VBA, cuando usa DAO o ADO, está hablando directamente con lo que sea que el sistema de base de datos sea, en cuyo caso DEBE usar el SQL de ese sistema específico.

OK, respuesta corta: Use% like cularis dicho.

+0

Los comodines predeterminados de Access son * y?, No % y _ - tiene que estar usando el modo ANSI 92 dentro de Access para usar los comodines%/_, o acceder a los datos de Jet/ACE con una interfaz que usa el modo ANSI 92 de forma predeterminada (por ejemplo, OLEDB). Entonces, básicamente, ESTA RESPUESTA ES INCORRECTA. –

+0

Hay otra cosa incorrecta acerca de esta respuesta: cuando utiliza DAO o ADO, puede que no esté hablando directamente con lo que sea el sistema de base de datos, porque puede abrir una base de datos Jet en DAO y luego consultar una tabla vinculada (vinculada a, para ejemplo, SQL Server). En este caso, deberá usar la sintaxis de Jet a menos que cree una consulta de paso a través. – phoog

+0

@phoog: tienes razón sobre la tabla vinculada, por supuesto. Pero ahora es un caso de división de pelos; el sistema de base de datos subyacente es JET que utiliza su característica de tabla vinculada (incluso si su SQL Server es el verdadero sistema que almacena los datos). – rskar

Cuestiones relacionadas