Ir al contenido



Foto

Uso de SQL en bases de Datos Access con Delphi


  • Por favor identifícate para responder
47 respuestas en este tema

#21 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 05:59

Hola
Me alegro que pudieras hacerlo funcionar. (y)
Cambie un poco lo que hiciste para que captes un poco mas esto.
Ahora tienes un filtro, tanto por dni como por nombre, con solo ponerlo este lo busca por similitud.
Aunque no es sql (lo se es trampa ) pero me apetecio  :D
Saludos

Archivos adjuntos


  • 0

#22 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 31 julio 2010 - 06:23

Hola
Me alegro que pudieras hacerlo funcionar. (y)
Cambie un poco lo que hiciste para que captes un poco mas esto.
Ahora tienes un filtro, tanto por dni como por nombre, con solo ponerlo este lo busca por similitud.
Aunque no es sql (lo se es trampa ) pero me apetecio  :D
Saludos

Hola

Se me ocurrió un pequeño detalle para practicar:



delphi
  1. procedure TForm1.Edit40Change(Sender: TObject);
  2. var
  3.   Filtro : String;
  4. begin
  5.   If (Edit40.Text <> '') then
  6.   begin
  7.       DataModule1.QueryCaral1.Filtered := False;
  8.       Filtro := 'Nombre Like '''+ '*'+ Edit40.Text + '*'''; //modificado
  9.       DataModule1.QueryCaral1.Filter := Filtro;
  10.       DataModule1.QueryCaral1.Filtered := True
  11.   end
  12.   else DataModule1.QueryCaral1.Filtered := False;
  13.  
  14. end;


Permite buscar con cualquier elemento del nombre

  • 0

#23 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 06:25

Hola
Que bueno, me alegra mucho que modifiques el codigo, de eso se trata. (y)
Saludos
  • 0

#24 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 31 julio 2010 - 06:29

Una pregunta:
Había leído que se podía usar "%" donde en este código fue usado "*".
Lo probé pero no funciona.
¿Es para otro tipo de situación?

  • 0

#25 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 06:32

Hola

Una pregunta:
Había leído que se podía usar "%" donde en este código fue usado "*".
Lo probé pero no funciona.
¿Es para otro tipo de situación?

Access es un poco particular, de hecho cada BD lo es.
Access acepta * pero no otros para el LIKE.
Firebird acepta % pero no otros.
MySql acepta @ pero no otros.
Es una mescolanza que ni ellos entienden, menos yo  :D
Saludos
  • 0

#26 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 31 julio 2010 - 06:40

Hola


Una pregunta:
Había leído que se podía usar "%" donde en este código fue usado "*".
Lo probé pero no funciona.
¿Es para otro tipo de situación?

Access es un poco particular, de hecho cada BD lo es.
Access acepta * pero no otros para el LIKE.
Firebird acepta % pero no otros.
MySql acepta @ pero no otros.
Es una mescolanza que ni ellos entienden, menos yo  :D
Saludos


En esta línea :


delphi
  1. Filtro := 'DNI Like '''+ Edit39.Text + '*''';


¿No está usado Like?

  • 0

#27 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 06:46

Hola
Si claro, esta usando Like para el filtro y * para definirlo, es access.
Si lo hicieras en firebird u otra bd te daria error o no funcionaria.
Saludos
  • 0

#28 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 31 julio 2010 - 06:56

Hola
Entiendo.
Una cosita tonta pero no lo veo en este momento:



delphi
  1. Filtro := 'Nombre Like '''+ '*'+ Edit40.Text + '*''';


Me sobran comillas en esta línea.
¿Qué no veo?

  • 0

#29 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 07:03

Hola
No entiendo amigo, que es lo que no ves?.
La linea dice:
Filtro = // es el nombre de la variable string
Nombre // es el nombre del campo de la tabla alumnos
Like // en español, como
'''+Edit40.Text + '*'''; // se concatena el edit.
Las comillas son un capricho que exige access, asi como el uso de *
Osea, no te fies mucho del uso de las comillas y ese signo (*) ya que no todas las bd lo aceptan como valido.
Saludos

  • 0

#30 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 31 julio 2010 - 07:20

Hola
No entiendo amigo, que es lo que no ves?.
La linea dice:
Filtro = // es el nombre de la variable string
Nombre // es el nombre del campo de la tabla alumnos
Like // en español, como
'''+Edit40.Text + '*'''; // se concatena el edit.
Las comillas son un capricho que exige access, asi como el uso de *
Osea, no te fies mucho del uso de las comillas y ese signo (*) ya que no todas las bd lo aceptan como valido.
Saludos


Sí. Perfecto. Ahora lo veo. Estoy viendo en Google muchas preguntas similares que aclaran los de Microsoft.
Sería entonces desglosando:
1- Filtro := 'Nombre Like '
2- ''+ '*'+ Edit40.Text + '*' '';
Ahora veo las comillas dobles. Que en realidad son dos comillas simples.
Gracias Caral
  • 0

#31 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 31 julio 2010 - 07:22

Hola
Con gusto amigo, vamos aprendiendo poco a poco.
Saludos
  • 0

#32 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 01 agosto 2010 - 09:50

Hola Caral:
Sigo estudiando tus aplicaciones.
Por favor será posible resubir tu Barinas.zip que he descargado de:
http://www.delphiacc...hp?topic=1422.0
Pero el archivo está corrupto.
Desde ya muchas gracias
Saludos
  • 0

#33 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 01 agosto 2010 - 09:54

Hola
Uyy amigo, tendría que ver donde esta, no se ni de que se trata el ejemplo.
Aveces borro cosas que no se ni para que las hice.
Si necesitas algún ejemplo en particular prefiero hacerlo otra vez.
Saludos
  • 0

#34 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 01 agosto 2010 - 10:00

Hola
Uyy amigo, tendría que ver donde esta, no se ni de que se trata el ejemplo.
Aveces borro cosas que no se ni para que las hice.
Si necesitas algún ejemplo en particular prefiero hacerlo otra vez.
Saludos

Hola.
Ningún problema. Simplemete estoy estudianto todos tus ejemplos. La idea es hacer yo mismo una aplicación sencilla y subirla para que la veas y critiques. Como seguro habrá problemas, también para recibir tus sugerencias.
Muchas gracias

Notas: Podemos seguir con los ejemplos SQL?
Saludos
  • 0

#35 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 01 agosto 2010 - 10:02

Hola
Claro, cuando tenga un rato me hago otro ejemplo.
Saludos
PD: Me alegra que te hagas una aplicacion completa, asi veremos muchas mas cosas.

  • 0

#36 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 02 agosto 2010 - 12:51

Hola
Para que no abandonemos esto he ampliado un poco las tablas de la BD.
Ahora tenemos:

Alumnos
Alumnos Cursos
Alumnos Calificaciones
Cursos
Cursos horario
Profesores
Profesores Curso.

Con esto se puede jugar bastante mas ya que las nuevas tablas lo que contienen son los ID asi se podra hacer ligas, mezclas, cosas interesantes en sql.
Aqui dejo la BD con las modificaciones, espero tener un rato y hacer algunos ejemplos.
Saludos

Archivos adjuntos


  • 0

#37 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 04 agosto 2010 - 06:13

Hola Caral:
Sigo estudiando el tema y teniendo dudas elementales.
En este código del programa que usamos para hacer ejemplos el resultado de una búsqueda es mostrada en un Grid,



delphi
  1. procedure TForm1.Edit40Change(Sender: TObject);
  2. var
  3.   Filtro : String;
  4. begin
  5.   If (Edit40.Text <> '') then
  6.   begin
  7.       DataModule1.QueryCaral1.Filtered := False;
  8.       Filtro := 'Nombre Like '''+ '*'+ Edit40.Text + '*''';
  9.       DataModule1.QueryCaral1.Filter := Filtro;
  10.       DataModule1.QueryCaral1.Filtered := True
  11.   end
  12.   else DataModule1.QueryCaral1.Filtered := False;
  13.  
  14. end;


Lo que no consigo hacer en mis prácticas es mostrar el resultado en un Memo.
¿Me podés ayudar por favor?
Muchas gracias
SAludos
  • 0

#38 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 04 agosto 2010 - 06:15

Hola
Aqui te dejo un ejemplo.
Lo que hace es cargar en un Memo los datos del alumno filtrados en un Edit.
Saludos

Archivos adjuntos


  • 0

#39 esocrates

esocrates

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 102 mensajes
  • LocationArgentina

Escrito 04 agosto 2010 - 07:32

Hola Caral:
El error , creo, era que no ponía el signo + antes del Where
Este es el que funcionó:


delphi
  1. ADoQuery1.SQL.Text :='Select Nombre from lista '+
  2.                                     'Where Nombre = :nom';



Este es el que no funcionaba:



delphi
  1. ADoQuery1.SQL.Text :='Select Nombre from lista
  2.                                     Where Nombre = :nom';



¿Puede ser?
Muchas gracias por el ejemplo. Estoy empezando a entender un poquito de esto gracias a tus enseñanzas.
Un saludo
  • 0

#40 Caral

Caral

    Advanced Member

  • Administrador
  • 4.241 mensajes
  • LocationCosta Rica

Escrito 04 agosto 2010 - 07:42

Hola
El signo de mas (+) se usa para muchas cosas, entre ellas para el salto de linea, como en este caso.
Saludos
PD: Me alegra servirte de algo, aun con mi poco conocimiento.
  • 0