Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No jala todos los campos en query (https://www.clubdelphi.com/foros/showthread.php?t=48255)

Nomad 19-09-2007 19:22:26

No jala todos los campos en query
 
Hola


Hago esto...

SQL := 'Select Nombre,Departamento from Empleados where Codigo = :codigo and Activo = 1';
Query1.SQL.Text := SQL;
Query1.ParamByName('codigo').AsString := EdNCodigo.Text;
Query1.Active := True;
EdSNombre.text := Query1.Fields[0].AsString;

Pero curiosamente el campo nombre nunca lo jala, en el campo ...Fields[0] deberia venir el nombre del empleado, pero lo que me devuelve numero de departamento que deberia ser ...Fields[1].

La base de datos esta en SQL Server y la estoy accesando por medio de ODBC. El campo nombre es un nvarchar(50)...

Gracias

Caral 19-09-2007 20:15:58

Hola
Me parece curioso, no debería de pasar.
Primero te aconsejo que utilices la etiquetas delhi, se entendera mejor.
Código Delphi [-]
Query1.SQL.Text := 'Select Nombre, Departamento from Empleados where Codigo = :codigo and Activo = 1';
Query1.Active := True;
Query1.ParamByName('codigo').AsString := EdNCodigo.Text;
EdSNombre.text := Query1.Fields[0].AsString;
No entiendo la razón.
Coloca en la pantalla del query los campos, tal vez ayude.
Saludos

Nomad 19-09-2007 20:36:49

Cita:

Empezado por Caral (Mensaje 232307)
Coloca en la pantalla del query los campos, tal vez ayude.
Saludos

Gracias por tu aporte!

A que te refieres con que coloque en la pantalla del query los campos. Cual pantalla?

Caral 19-09-2007 21:03:23

Hola
El query tiene una propiedad que se llama SQL, si le das click, te saldra una ventana, en esta coloca la sentencia sql, pero sin los parametros.
Código SQL [-]
Select Nombre, Departamento from Empleados
La guardas.
Te posicionas en el componente query y le das doble click, te saldra la pantallita que te menciono, con el boton derecho del raton te saldran unas opciones, pon add y luego aceptar, con esto los campos los tendras en la pantallita.
Prueba otra vez el programa, a ver que pasa.
Saludos

luisgutierrezb 19-09-2007 21:13:42

a lo mejor diste de alta los campos persistentes y necesitas agregar el de nombre

Nomad 19-09-2007 21:18:55

Cita:

Empezado por Caral (Mensaje 232317)
Hola
El query tiene una propiedad que se llama SQL, si le das click, te saldra una ventana, en esta coloca la sentencia sql, pero sin los parametros.
Código SQL [-]Select Nombre, Departamento from Empleados

La guardas.
Te posicionas en el componente query y le das doble click, te saldra la pantallita que te menciono, con el boton derecho del raton te saldran unas opciones, pon add y luego aceptar, con esto los campos los tendras en la pantallita.
Prueba otra vez el programa, a ver que pasa.
Saludos

Solo aperece departamento en la ventanita, nombre NO...

Esta raro, verdad?

Caral 19-09-2007 21:30:42

Hola
Pues si no existe el registro, me parece que daria un error, no se que decirte.
Solo usare tus palabras.
Esta Raro.
Tal vez la opcion de luisgutierrezb, te sirva.
Saludos

Nomad 19-09-2007 21:33:50

Cita:

Empezado por luisgutierrezb (Mensaje 232324)
a lo mejor diste de alta los campos persistentes y necesitas agregar el de nombre

Y eso que significa? Dar de alta!

marcoszorrilla 19-09-2007 21:35:19

Por si acaso:
Código Delphi [-]
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := 'Select Nombre, Departamento from Empleados where Codigo = :codigo and Activo = 1';
Query1.Active := True;
Query1.ParamByName('codigo').AsString := EdNCodigo.Text;
EdSNombre.text := Query1.Fields[0].AsString;

Un Saludo.

Caral 19-09-2007 21:44:00

Hola marcoszorrilla
No creas que no lo pense, pero esta usando Text, no add
Y cuando se usa Text, se borra el texto anterior sin necesidad de clear, como es el caso de Add.
No, si yo mismo me sorprendo de lo que aprendo.:D
Saludos

egostar 19-09-2007 21:49:22

Y no existe la posibilidad de que en tu programa, estes grabando mal los campos?, quiero decir, que estes grabando departamento en nombre y nombre en departamento....:confused::confused::confused:

Digo, en este caso todo puede suceder...:D:D:D

Salud OS

Nomad 19-09-2007 21:52:29

Cita:

Empezado por egostar (Mensaje 232339)
Y no existe la posibilidad de que en tu programa, estes grabando mal los campos?, quiero decir, que estes grabando departamento en nombre y nombre en departamento....:confused::confused::confused:

Digo, en este caso todo puede suceder...:D:D:D

Salud OS

No, ya revise la base de datos y esta bien...

Caral 19-09-2007 21:54:32

Hola
No se, por que no conozco sql server, pero, no cabe la posibilidad de que diferencie mayúsculas y minúsculas?
Nombre o nombre
No se, ya no se me ocurre nada.
Saludos

Nomad 19-09-2007 21:58:31

Cita:

Empezado por Caral (Mensaje 232342)
Hola
No se, por que no conozco sql server, pero, no cabe la posibilidad de que diferencie mayúsculas y minúsculas?
Nombre o nombre
No se, ya no se me ocurre nada.
Saludos

Ya probe y tambien probe poniendo empleados.Nombre y nada... como si estuviera oculto y una cosa asi...

La verdad me tiene desconcertado...

egostar 19-09-2007 22:02:22

Porque no haces una pequeña prueba, no selecciones solo los campos que deseas, coloca * y mete un dbgrid, ahi verás la información tal y como te la regresa el query.

De esa forma podrás detectar el problema mas fácil

Salud OS.

Nomad 19-09-2007 22:03:39

Cita:

Empezado por egostar (Mensaje 232349)
Porque no haces una pequeña prueba, no selecciones solo los campos que deseas, coloca * y mete un dbgrid, ahi verás la información tal y como te la regresa el query.

De esa forma podrás detectar el problema mas fácil

Salud OS.

Ya lo hice y presenta todo menos el de nombre...

marcoszorrilla 19-09-2007 22:05:34

Caral:La verdad es que nunca utilizo Text para cargar el SQL, siempre lo hago con ADD, pero gracias por el apunte pues no me había fijado en el detalle.

Un Saludo.

egostar 19-09-2007 22:07:13

Cita:

Empezado por Nomad (Mensaje 232350)
Ya lo hice y presenta todo menos el de nombre...

:eek::eek::eek:, seguro el nombre es parte de la tabla :confused::confused::confused:

Porque no colocas aqui la imagen de tu base de datos y la imagen de lo que te muestra el grid....

Salud OS

marcoszorrilla 19-09-2007 22:07:36

Prueba a poner el nombre entre corchetes [nombre] o cambia el cambia el nombre del campo, ahora que recuerdo me parece que en las consultas de Acces pasaba lo mismo si se uitilizaba el campo de nombre nombre, valga la redundancia.

Un Saludo.

Nomad 19-09-2007 22:21:14

Cita:

Empezado por marcoszorrilla (Mensaje 232353)
Prueba a poner el nombre entre corchetes [nombre] o cambia el cambia el nombre del campo, ahora que recuerdo me parece que en las consultas de Acces pasaba lo mismo si se uitilizaba el campo de nombre nombre, valga la redundancia.

Un Saludo.

El nombre de ese campo no lo puedo cambiar, porque hay un monton de aplicaciones donde se utiliza, y no quiero empezar a cambiar eso...

Ya probe poniendolo entre corchetes y nada...

Le paso los link que me pidieron para que vean la tabla y el dbgrid.

http://www.yourfilehost.com/media.ph...ile=dbgrid.JPG
http://www.yourfilehost.com/media.ph...=Tabla_SQL.JPG

Caral 19-09-2007 22:48:01

Hola
Es curioso, pero que tiene que ver el dbgrid, con la tabla?
El dbgrid, esta trallendo la informacion con que query?
Donde se muestra la informacion del query que nos enseñaste?
No se, algo es pasando y no lo entiendo.
Saludos

Nomad 19-09-2007 23:01:28

Cita:

Empezado por Caral (Mensaje 232366)
Hola
Es curioso, pero que tiene que ver el dbgrid, con la tabla?
El dbgrid, esta trallendo la informacion con que query?
Donde se muestra la informacion del query que nos enseñaste?
No se, algo es pasando y no lo entiendo.
Saludos

Yai me pidieron que hicieron un query1 con select * from empleados y que le pegara un dbgrid para ver que devolvia, y devuelve todo menos el campo de nombre y tambien les mande un screenshot de la base de datos en SQL Server para que vieran donde esta el campo y con el nombre...

egostar 19-09-2007 23:10:23

Cita:

Empezado por Nomad (Mensaje 232369)
Yai me pidieron que hicieron un query1 con select * from empleados y que le pegara un dbgrid para ver que devolvia, y devuelve todo menos el campo de nombre y tambien les mande un screenshot de la base de datos en SQL Server para que vieran donde esta el campo y con el nombre...

Vaya, pues ahi no te pone dos campos, Nombre y Cedula...:eek:

Esto si está fuera de mi alcance, estos dos campos tienen el mismo tipo de datos?

Salud OS

Caral 19-09-2007 23:14:34

Hola
Esto es de las cosas que solo pasan una vez cada mil años y te toco.:D
Has probado con un table ?
Estas seguro que es la misma base de datos?
esto te lo digo porque yo trabajo con dos y a veces me a pasado, actualizo una y creo que estoy trabajando con esa y no es asi.
Sinceramente se me acaban las neuronas, voy a tener que comprar mas.:D
Saludos

Nomad 19-09-2007 23:16:09

Cita:

Empezado por egostar (Mensaje 232375)
Vaya, pues ahi no te pone dos campos, Nombre y Cedula...:eek:

Esto si está fuera de mi alcance, estos dos campos tienen el mismo tipo de datos?

Salud OS

Tenes razon tambien falta cedula no lo habia notado, y uno es de tipo Nvarchar(50) y el es varchar(20).

Caral 19-09-2007 23:27:37

Hola
Y cambiando el tipo de varchar a solo char, no se si lo hay en sql server.
Si mi amigo Egostar lo dice debe ser por algo, recuerda que la edad manda.
Saludos

egostar 19-09-2007 23:34:19

Cita:

Empezado por Caral (Mensaje 232382)
Hola
Y cambiando el tipo de varchar a solo char, no se si lo hay en sql server.
Si mi amigo Egostar lo dice debe ser por algo, recuerda que la edad manda.
Saludos

:D:D:D:D A que mi amigo Carlos :cool:

Veo que tienes un campo que se llama IdEmp, de casualidad el Nombre y la Cedula no la muestras de otra tabla:confused:

No veo como es que no te los muestra en el grid....

Salud OS

waly2k1 20-09-2007 04:39:05

Posible Solucion
 
Código SQL [-]
SQL := 'SELECT Nombre, Departamento FROM dbo.Empleados WHERE Codigo=' +  EdNCodigo.Text + ' and Activo = 1';

Código:

Query1.SQL.Text := SQL;
Query1.Active := True;
EdSNombre.text := Query1.FieldByName( 'Nombre' ).Value;

Hacé referencia directamente por el nombre del campo y no te preocupes si te trae en el primer, segundo o enésimo lugar.

Seguramente es algo que tenés mal en los campos del query, borralo y creá uno nuevo. La sentencia SQL está bien, pero los campos del Query seguramente no.

Hacé doble click sobre el query y te abre una ventana de propiedades con los campos, click derecho y le das a la opcion Select All, Delete y Add all fields despues. Seguramente acá te quedará bien.

Yo te aconsejo que cambies la propiedad SQL del Query en diseño, fijate que estará mal.

Saludos y espero serte util.

rolandoj 24-09-2007 00:47:20

Se encontró la solución ?
 
Hola a todos,

Se encontró alguna solución a este caso ?. Yo he tenido un problema que si bien no es exactamente el mismo, en el fondo es muy similar. Pueden verlo en :

http://www.clubdelphi.com/foros/showthread.php?t=48362

waly2k1 24-09-2007 03:46:27

Rta. a Rolando
 
Cita:

Empezado por rolandoj (Mensaje 233277)
Hola a todos,

Se encontró alguna solución a este caso ?. Yo he tenido un problema que si bien no es exactamente el mismo, en el fondo es muy similar. Pueden verlo en :

http://www.clubdelphi.com/foros/showthread.php?t=48362

Rolando, en tu ejemplo usas DBExpress que desconozco, ya que creo que si debo trabajar con una BD de Microsoft, ya sea Access o SQL Server lo mejor es usar ADO. En este caso nuestro amigo tiene un lio con los campos del Query ya que el cambia en tiempo de ejecución la consulta, pero en tiempo de diseño debe tener todos los campos al revés, puede apuntar a otra tabla/base o vaya Dios a saber que pueda estar seleccionando. Con ADO este tipo de cosas no puede pasar, no es error del motor ni de Delphi ni de los componentes sino de usuario. Siempre hay algo que se descuida y zas ahí está el dichoso problema.

Saludos

rolandoj 24-09-2007 06:40:19

Es probable; pero ...
 
Cita:

Empezado por waly2k1 (Mensaje 233294)
Rolando, en tu ejemplo usas DBExpress que desconozco, ya que creo que si debo trabajar con una BD de Microsoft, ya sea Access o SQL Server lo mejor es usar ADO. En este caso nuestro amigo tiene un lio con los campos del Query ya que el cambia en tiempo de ejecución la consulta, pero en tiempo de diseño debe tener todos los campos al revés, puede apuntar a otra tabla/base o vaya Dios a saber que pueda estar seleccionando. Con ADO este tipo de cosas no puede pasar, no es error del motor ni de Delphi ni de los componentes sino de usuario. Siempre hay algo que se descuida y zas ahí está el dichoso problema.

Saludos

Hola,

Pués sí, es probable que el problema sea de usuario; pero no estoy tan seguro como tú ya que lo más lógico es que el error sea porque los campos persistentes los tenga mal definidos; sin embargo, eso ya se le sugirió y curiosamente, según lo que cuenta, ni siquiera el editor de campos detecta bien el campo faltante, incluso con el query re-escrito. Además, el problema que yo encontré, que a su vez tiene reportes en Borland de situaciones similares, parexe indicar la presencia de errores en la determinación de los campos que deben devolver algunos queries.

Por otra parte, aunque SQL Server es una de las bases de datos que uso a diario desde hace años, no estoy muy familiarizado con sus peculiaridades ya que yo uso una metodología de portabilidad que limita el trabajo a un subconjunto standard de la funcionalidad del motor. Lo que si te puedo comentar es que siempre he usado el BDE para accesarla y nunca he tenido problemas.

Saludos

waly2k1 28-09-2007 05:51:52

Otra cosa
 
Rolando otra cosa, si tenes problemas con los campos persistentes lo mejor es poner active en true y despues en false o viceversa, de esta manera se refresca la info de campos y te aparecen los campos que agregaste a la tabla o en la consulta despues de crearla.

Saludos

rolandoj 28-09-2007 06:29:43

Gracias. Comentarios en mi propio hilo
 
Cita:

Empezado por waly2k1 (Mensaje 234618)
Rolando otra cosa, si tenes problemas con los campos persistentes lo mejor es poner active en true y despues en false o viceversa, de esta manera se refresca la info de campos y te aparecen los campos que agregaste a la tabla o en la consulta despues de crearla.

Saludos

Hola,

Gracias por la observación. Como eso es más bien mirar el problema mío, te contesto en mi propio hilo. Puedes consultarlo aquí:

http://www.clubdelphi.com/foros/showthread.php?t=48362

Saludos

JOSEA 04-10-2007 13:15:25

Prueba esto
 
Raro, raro, raro ... quizas con esto te funcioneQuery1.SQL.Text := 'Select "Nombre" as minombre, Departamento from Empleados where Codigo = :codigo and Activo = 1';Query1.Active := True;Query1.ParamByName('codigo').AsString := EdNCodigo.Text;EdSNombre.text := Query1.fieldbyname['minombre'].AsString;

JOSEA 04-10-2007 13:34:30

Perdon, perrdon por la edicion anterior


Código Delphi [-]
Query1.SQL.Text := 'Select "Nombre" as minombre, Departamento from Empleados where Codigo  :codigo and Activo = 1';
Query1.Active := True;
Query1.ParamByName('codigo').AsString := EdNCodigo.Text;
EdSNombre.text := Query1.FieldbyName['minombre'].AsString;


La franja horaria es GMT +2. Ahora son las 17:58:35.

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