SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: agfed en Martes 2 de Septiembre de 2003, 18:50
-
usando vba ¿Como puedo compararar si son iguales o semejantes dos campos memo? Mi intension es hacer una busqueda en una base de datos acces :question:
-
¿Podrías especificar un poco mejor que es lo que necesitas?
- Comparar dos campos memo de dos tablas distintas.
- Comparar dos campos memo en la misma tabla.
- Seleccionar registros por el valor de uno o varios campos memo.
- Seleccionar registros por el valor de uno o varios campos memo que contengan una serie a buscar.
En todo caso trata el campo memo como si fuera un campo tipo texto.
Puedes asignarlo a una variable de tipo string con la limitación de 2^31 caracteres para cadenas de longitud variable y de 2^16 para cadenas de longitud fija.
Suerte.
-
Hombre, ahora que caigo, ya sé que es lo quieres hacer... Lo sé por tu anterior tema 'compara archivos o usar campos binarios': quieres comparar dos tablas de una base de datos para saber si contienen los mismos datos.
Vale, te diré que bien podías haberlo especificado respondiendo al tema anterior. Te di una solución para comparar 'Archivos', como tu decías, si no era eso lo que necesitabas, podrías haberlo dicho y no dejar el tema abierto. En fin...
Podrías usar una sentencias SQL para comparar las dos tablas, o código que las recorriera buscando diferencias, pero como no tengo ganas de escribir tanto, pues mi recomendación es que exportes las tablas a archivos de texto y que uses el código que te escribí en el tema anterior.
Ale.
Chao.
-
Mi intesion es usar la sentencia
basededatos.Find campo=lobuscado
Pero mi pregunta es si tambien sirve para campos memo.
-
Hola agfed.
Creo que el método find debería funcionar sin problemas con cualquier tipo de datos que tengan los campos, incluso con campos memo, que a todos los efectos son campos de texto de longitud variable. Otra cosa distinta es acertar con el valor por el que quieres realizar la búsqueda, es decir, no es lo mismo buscar por una palabra que por un texto de gran tamaño, donde signos de puntuación, tildes, mayúsculas/minúsculas, pueden hacer que no encuentres un registro coincidente. Para evitar en la medida de lo posible esto, podrías usar un filtro de este estilo:
Recordset1.Find "UCASE(CampoMemo) LIKE(UCASE('%Cadena a buscar en el campo%'))
Suerte.
-
voy a probar, mañana te digo si me funciono.
-
lo que me sugeriste funciono igual que
...find "CampoMemo LIKE " & cadena a buscar & "*"
Ahora mi pregunta es, es valida la siguiente sentencia, porque al menos a mi no me funciona como quisiera:
...find "CampoMemo LIKE " & cadena a buscar1 & "*" & cadena a buscar2 & "*"
Esto lo pregunto porque noto que las dos cadenas siempre son constantes entre lo que busco y el unico registro que pudiera existir, y me podrian ayudar a encontrara ese registro.
-
En la mayoría de los SQL, el carácter comodín es '%'... haciendo la concatenación con '*' buscas una cadena del tipo " Cadena en la que busco* ". La comparación funciona así:
%Cadena% -> 'Cadena' contenida en el texto.
%Cadena -> 'Cadena a la derecha del texto (que el valor del campo termine en 'Cadena').
Cadena% -> Que el texto comience por 'Cadena'.
Podrías probar usando el comodín de esta forma para buscar al comienzo y al final del campo:
...Find "LEFT(CampoMemo, Int(Longitud campo / 2)) LIKE " & cadena_a_buscar1 & "%" AND RIGHT(CampoMemo, Int(Longitud campo / 2)) LIKE %" & cadena_a_buscar2
Suerte.
-
Gracias por tu sugerencia. Me sirvio muy bien. Pero creo que necesito un chapuzon en SQL. Sabes de algun lugar donde haya un buen tutorial? Se muy poco, y lo necesito porque estoy comenzando a hacer proyectos en vba usando bases ADO. Por cierto, tambien busco un buen tutorial sobre bases ADO y sus comandos. Me ayudas? :good:
-
Ahora que voy a comenzar con bases de datos, quiero decirte que he tomado clases de visual fox pro y de visual basic. Pero ahora que he comenzado a escudriñar los dos lenguajes en cuestion bases de datos, me parece que es mas facil y con menos programacion en visual fox pro y por los comentarios que he encontrado en la web, me lo confirman.
Tu que dices?
-
Hola agfed.
Por partes:
Sobre un tutorial o similar de SQL creo que no te puedo recomendar ya que no conozco ninguno. Manual los únicos que he visto son de SQL/400 y son manuales de referencia más que de aprendizaje. Mis limitados cononcimientos en SQL provienen de la experiencia. Creo que una buena forma de iniciarse es mediante access: utilizas el generador de consultas que tiene y usas la vista SQL para ver la sentencia equivalente, y así poco a poco... ya verás que al final las sentencias más utilizadas siempre tienen la misma sintaxis. Eso sí, ten en cuenta que esta sintaxis puede variar de unas bases de datos a otras, aunque normalmente son diferencias poco importantes (del tipo usar UPPER en vez de UCASE y cosas por el estilo) según el motor de la base de datos pueden ser diferencias cualitativas (por ejemplo, con bb.dd. DB/2 puedes incluir bloques 'SELECT CASE' dentro de la sentencia SQL).
Sobre la segunda cuestión.
En un principio si usas ADO con el proveedor de acceso a datos de FOXPRO creo que no notarás diferencias con usar otro proveedor OLEDb, excepto posibles diferencias en la sintáxis de las sentencias SQL, como te comentaba antes, o de rendimiento o intrínsecas a la propia base de datos.
En fin... todo un mundo.
Suerte.
-
Gracias por tu ayuda. Doy por terminado este tema.