Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Por favor ayuda con comando Select (https://www.clubdelphi.com/foros/showthread.php?t=75196)

cvlaso77 04-08-2011 02:40:33

Por favor ayuda con comando Select
 
Hola
Tengo una tabla con los campos NOMBRES, APELLIDOS, RUT,ESPECIALIDAD, STD ATENCION y otros

teniendo insertado el query1 uso este codigo para el select que lo activo desde un boton.


Datasource1.Dataset := Query1;
Query1.SQL.Clear;
Query1.Active := False ;

With Query1.Sql Do
Begin
Clear ;
Add('SELECT APELLIDOS,NOMBRES,RUT,ESPECIALIDAD,STD ATENCION');
Add('FROM "BD HRS ATENCION.DB"');
Query1.Active := True ;

No se porque funciona ok sin el último campo, STD ATENCION
revisé el nombre del campo en la tabla y es correcto
cambié el orden de los campos y siempre tengo el problema cuando agrego el quinto campo
habrá alguna limitante del número de campos en alguna parte, no lo encontré

Me da el error 'Invalid filename STD' process.....

Gracias a los que lean esta consulta
cvlaso

Caral 04-08-2011 02:49:28

Hola
A ver si me entiendes esta frase:
Tratadeentederesto ??????.
Verdad que es dificil, bueno, eso es lo que te pasa con el codigo.
Cuando usas ADD estas añadiendo y se hace seguido.
Este es tu codigo:
Código Delphi [-]
Datasource1.Dataset := Query1;
 Query1.SQL.Clear;
 Query1.Active := False ;

 With Query1.Sql Do
 Begin
 Clear ;
 Add('SELECT APELLIDOS,NOMBRES,RUT,ESPECIALIDAD,STD ATENCION');
 Add('FROM "BD HRS ATENCION.DB"');
 Query1.Active := True ;
Ahora mira la diferencia:
Código Delphi [-]
Datasource1.Dataset := Query1;
 Query1.SQL.Clear;
 Query1.Active := False ;

 With Query1.Sql Do
 Begin
 Clear ;
 Add(' SELECT APELLIDOS, NOMBRES, RUT, ESPECIALIDAD, STD ATENCION ');
 Add(' FROM "BD HRS ATENCION.DB"');
 Query1.Active := True ;
La ves?.
Saludos

Loviedo 04-08-2011 10:27:42

No creo que ese sea el problema, utilizo la la primera sintaxis, es decir, sin agregar espacios y siempre me ha funcionado.
Puedes comprobar el texto de la consulta con
Código Delphi [-]
Query1.SQL.Text;
A lo mejor el problema viene dado por el nombre del campo formado por dos palabras, es la primera vez que lo veo. Siempre lo vi así: std_Atencion.
Saludos.

Lepe 04-08-2011 12:07:44

Si el campo tiene espacios, debe encerrarse entre unos delimitadores. Normalmente es entre comillas dobles o corchetes, algo así: "STD ATENCION" o bien [STD ATENCION]

... amos, igual que has hecho con el nombre de la tabla que también lleva espacios.


Si usas el espacio tal cual, el SQL cree que es un alias, es decir, el sql cree que la columna llamada STD ahora pasa a llamarse ATENCION.

en cuanto al código, yo lo veo más simple y claro así, pero es cuestión de gustos:
Código Delphi [-]
Query1.Active := False ;
Query1.Sql.Text:= 
'SELECT APELLIDOS,NOMBRES,RUT,ESPECIALIDAD,STD ATENCION' +
'FROM "BD HRS ATENCION.DB"';
Query1.Active := True ;

Saludos

cvlaso77 04-08-2011 17:53:50

Gracias por la ayuda a todos
 
Amigos Primero muchas gracias por sus rápidas respuestas, yo soy de la década de los 80 donde programábamos en turbopascal con el DEC2020 de la Univ. En esos días habían pocos a quien hacerles consultas. Me parece genial esto de los foros y post. Los felicito por su dedicación y muchas gracias.Perdón por la lata.
Al grano Uno de mis problemas era que tenia 2 tablas en distintas carpetas, una en: C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0Y otra en: C:\Archivos de programa\Archivos comunes\Borland Shared\Data, esto por que en algún momento el compilador me reclamó que no existía la tabla y la copie a esa carpeta.
Pregunta. ¿ Alguien me puede decir como reasigno la ruta para no tener que usar un FROM tan largo? Gracias.
Después de arreglar la ruta de la tabla…Lo que me resultó de las mil y unas pruebas :La rutina que me funciona ok,con todos los campos es :
Código Delphi [-]
  Datasource1.Dataset := Query1;Query1.SQL.Clear;
  Query1.Active := False ;
  With Query1.Sql DoBeginClear ;
  Add('SELECT DISTINCT ESPECIALIDAD,DIA_SEMANA,STD_ATENCION,NOMBRES,APELLIDOS');
  Add ('FROM "C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0\BD HRS ATENCION.DB"')
end ;
Query1.Active := True ;
Los nombres de los campos con espacios en blanco le dan problemas al compilador, y aparece el mensaje de error. Cuando pongo el campo entre “comillas” dobles la tabla de resultado repite este dato en toda la columna y no carga los datos.
Los add no son problema me funcionan ok. Mi trabajo consiste en hacer un programa para filtrar una base de datos de un hospital. Igual por si a alguien le sirve transcribo la rutina completa en la que he parametrizado los datos del Select para ejecutarlo a partir de unos listbox que he creado, con los onclick de los listbox le paso los strings a los Edit.text y luego ejecuto el query.
Esto que transcribo lo probé y funciona super okSolo me falta parametrizar la opción ascendente descendente.
Código Delphi [-]
  With Query1.Sql Do
  Begin
  Clear ;
   Add('SELECT DISTINCT '+Edit1.text+'');
  Add ('FROM "C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0\BD HRS ATENCION.DB"');
  Add('WHERE');Add(' ( '+Edit3.text+' = "'+Edit4.text+'") ');
  Add('ORDER BY '+Edit2.text+' ASC');
end ;
Como soy nuevo en el foro por favor díganme si vale subir después como post esta rutina con la opción (asc, des), completa, igual no se si se hace de la misma manera que cuando un pregunta algo.

Muchas Gracias a todos Saludos

maeyanes 04-08-2011 18:01:06

Hola...

Bienvenido a los foros de Club Delphi, te recomiendo que le des una leida a la Guía de Estilo.

Otra cosa, cuando publiques código fuente en Delphi, usa las etiquetas delphi:

[delphi]
begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;
[/delphi]

lo que se mostrará en los foros así:

Código Delphi [-]
begin
  ProcedimientoAEjecutar;
  Variable := 'hola mundo';
  // ejemplo
end;


Saludos...

cvlaso77 04-08-2011 18:06:29

Nueva respuesta ordenada
 
Disculpen al hacer un copi desde el word se juntaron todos los caracteres
aca va de nuevo ordenado
Amigos
Primer muchas gracias por sus rápidas respuestas
Yo soy de la década de los 80 donde programábamos en turbopascal con el DEC2020 de la Univ. En esos días habían pocos a quien hacerles consultas. Me parece genial esto de los foros y post. Los felicito por su dedicación y muchas gracias.
Perdón por la lata.
Al grano
Uno de mis problemas era que tenia 2 tablas en distintas carpetas
Una en, C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0
Y otra en, C:\Archivos de programa\Archivos comunes\Borland Shared\Data, esto por que en algún momento el compilador me reclamó que no existía la tabla y la copie a esa carpeta.
Pregunta. Alguien me puede como reasigno la ruta para no tener que usar un FROM tan largo, gracias
Después de arreglar la ruta de la tabla…
Lo que me resultó de las mil y unas pruebas :
La rutina que me funciona ok,con todos los campos es :

Datasource1.Dataset := Query1;
Query1.SQL.Clear;
Query1.Active := False ;
With Query1.Sql Do
Begin
Clear ;
Add('SELECT DISTINCT ESPECIALIDAD,DIA_SEMANA,STD_ATENCION,NOMBRES,APELLIDOS');
Add ('FROM "C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0\BD HRS ATENCION.DB"')
End ;
Query1.Active := True ;

Los nombres de los campos con espacios en blanco le dan problemas al compilador, y aparece el mensaje de error.
Cuando pongo el campo entre “comillas” dobles la tabla de resultado repite este dato en toda la columna y no carga los datos.
Los add no son problema me funcionan ok.

Mi trabajo consiste en hacer un programa para filtrar una base de datos de un hospital.
Igual por si a alguien le sirve transcribo la rutina completa en la que he parametrizado los datos del Select para ejecutarlo a partir de unos listbox que he creado, con los onclick de los listbox le paso los strings a los Edit.text y luego ejecuto el query.
Esto que transcribo lo probé y funciona super ok
Solo me falta parametrizar la opción ascendente descendente.

With Query1.Sql Do
Begin
Clear ;
Add('SELECT DISTINCT '+Edit1.text+'');
Add ('FROM "C:\Documents and Settings\cvl\Escritorio\PRY_CDT_0\BD HRS ATENCION.DB"');
Add('WHERE');
Add(' ( '+Edit3.text+' = "'+Edit4.text+'") ');
Add('ORDER BY '+Edit2.text+' ASC');
End ;
Como soy nuevo en el foro por favor díganme si vale subir después como post esta rutina con la opción (asc, des), completa, igual no se si se hace de la misma manera que cuando un pregunta algo..
Muchas Gracias a todos
Saludos


ecfisa 04-08-2011 18:28:41

Hola cvlaso77.

Me tomé la licencia de corregir el texto original de tu mensaje ya que era muy difícil de interpretar.

Por favor lee el uso de las etiquetas para encerrar tu código.

Saludos y gracias por tu colaboración. :)

Nota: lamento el retraso en los mensajes pero tengo problemas de conexión.


La franja horaria es GMT +2. Ahora son las 11:08:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi