Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
Problemas con Forms y querys

Estoy preguntona hoy

Mmm....Tengo un form donde se muestran los datos de los alumnos. Ahi tb los puedo modificar, borrar etc. También tengo un dialogo donde introduzco el dni del alumno. Lo que quiero es que (logicamente) al introducir el dni de un alumno, me muestre el form con sus datos.

Yo tengo lo siguiente: he puesto un tquery y un datasource en la form "Form_Altaalumnos" (que es la que quiero que me enseñe cuando introduzco el dni). En el sql del query tengo:
SELECT *
FROM alumno
WHERE dni_Alumno=:dni

y luego en el código del dialogo....
Código:
  if showModal=mrOk then
  begin
    Form_AltaAlumnos.qry_dniAlumno.close;
    try
      Form_AltaAlumnos.qry_DniAlumno.ParamByName('dni').AsString:=Edit_Dni.text;
    finally
      Form_AltaAlumnos.qry_DniAlumno.Open;
      Form_AltaAlumnos.show;
    end;
  end;
pero no se porque razon siempre me muestra el form con los datos del alumno cuyo form ha sido abierto el último (o sino hemos abierto ninguno con los datos del primer alumno de la base)

que hago mal?
Gracias
Responder Con Cita
  #2  
Antiguo 18-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
A parte de que pueda tener otros fallos, debes de borrar la sentencia SQL, anterior.:
Código:
  if showModal=mrOk then
  begin
    Form_AltaAlumnos.qry_dniAlumno.close;
    Form_AltaAlumnos.qry_dniAlumno.sql.Clear;

    try
      Form_AltaAlumnos.qry_DniAlumno.ParamByName('dni').AsString:=Edit_Dni.text;
    finally
      Form_AltaAlumnos.qry_DniAlumno.Open;
      Form_AltaAlumnos.show;
    end;
  end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
marcoszorrilla comentó:
A parte de que pueda tener otros fallos, debes de borrar la sentencia SQL, anterior.:
marcos, difiero un poco en esto. Realmente la sentencia no cambia sino únicamente el valor del parámetro. Si hubiera que reescribir la sentencia cada vez entonces no tendría mucho sentido el uso de parámetros ¿no?.

Creo que el problema está en algún punto que no puede verse en el código que nos manda ya que hice la prueba y los registros se actualizan correctamente al cambiar el parámetro.

// Saludos
Responder Con Cita
  #4  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
Haciendo eso me da un error : parametro dni no encontrado.

Además no se, no creo que sea eso porque hay veces que abro el form sin usar un query con lo cual no tendría por que borrar el sql.

Alguna sugerencia más??
Responder Con Cita
  #5  
Antiguo 18-11-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Sí ya me he dado cuenta, como usas parámetros, lo que te he dicho no tiene sentido, como muy bien apunta Román.

Pregunto:
El control Edit_Dni.text en donde está en el formulario que llama al que muestra el alumno que se pretende seleccionar, no será que como el control está en un formulario distinto no recibe ningún parámetro.

Por qué no muestras la sentencia SQL para comprobar si reciba o no el parametro.

ShowMessage(Query1.Sql.Text);

De esta manera podrías comprobar que quizas, no está recibiendo el parámetro.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
Cita:
Por qué no muestras la sentencia SQL para comprobar si reciba o no el parametro.
Al hacerlo, me muestra lo siguiente

SELECT *
FROM alumno
WHERE dni_Alumno=:dni

que quiere decir? lo recibe bien o no? sale lo mismo que tengo metido en el sql. Acaso deberia salir en vez de "dni" el número que meti?
Responder Con Cita
  #7  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
vetustas comentó:
pero no se porque razon siempre me muestra el form con los datos del alumno cuyo form ha sido abierto el último (o sino hemos abierto ninguno con los datos del primer alumno de la base)
Además de lo que te pregunta marcos yo insisto en que hay algo que no no estás mostrando. Esta frase que pones, analizándola con una fría lógica, significa que nunca ves ningún dato como no sea el del primer alumno de la base: ¿cómo vas a ver datos del último alumno abierto si de inicio del programa este último alumno abierto sólo puede ser precisamente el primero en la base de datos.

A menos claro, que uses otro formulario para abrir los datos y estés confundiéndote con distintas componentes datasource o dataset.

// Saludos
Responder Con Cita
  #8  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
x cierto si pongo:

Código:
Form_AltaAlumnos.qry_DniAlumno.ParamByName('dni').AsString:='1234567M';
tampoco funciona.

Es por si asi os da una idea de donde puedo estar haciendolo mal

Gasias
Responder Con Cita
  #9  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
Roman, no entiendo bien lo que quieres decir y la verdad es que yo me explico siempre fatal

Tengo un form "form_altaalumno" con dbedits asociados a una base de datos y con un dbnavigator voy recorriendo. Asi que si que veo más alumnos y no solo el primero ni el ultimo. El problema es que si por ejemplo los ultimos datos mostrados en dicho form corresponden a "David" y yo luego en el dialogo meto en el edit el dni de "Maria" pues yo quiero que me muestre el form con los datos de Maria, sin embargo me muestra los datos de David ya que es el último form mostrado.
No se si me he explicado un poquito mejor....
Responder Con Cita
  #10  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
vetustas comentó:
Tengo un form "form_altaalumno" con dbedits asociados a una base de datos y con un dbnavigator voy recorriendo. Asi que si que veo más alumnos y no solo el primero ni el ultimo. El problema es que si por ejemplo los ultimos datos mostrados en dicho form corresponden a "David" y yo luego en el dialogo meto en el edit el dni de "Maria" pues yo quiero que me muestre el form con los datos de Maria, sin embargo me muestra los datos de David ya que es el último form mostrado.
No se si me he explicado un poquito mejor....
Pero entonces hay algo muy raro en tu aplicación!

En form_altaalumno supongo que tienes unos controles como dbedits y recorres la tabala con dbnavigator. ¿A qué datasource están ligados estos controles y el dbnavigator? No puede ser al query ya que éste te devuelve a lo sumo un registro. Y sin embargo quieres que estos controles también estén alimentados por el query!!

Creo que estás enfocando erróneamente lo que quieres. En lugar del query creo que te conviene usar un dataset y un datasource para recorrer con el dbnavigator toda la tabla (como parece ser que tienes) y para colocarte en un registro específico (indicado por el dni) utilizas el método Locate del dataset que alimenta al dbnavigator.

// Saludos
Responder Con Cita
  #11  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
Por fin entiendo algo!!! y ahora me doy cuenta de que lo que estaba haciendo era una burrada. Te explicas mu bien Voy a tratar de hacer eso que me dices, lo del dataset y el datasource. Puedes ser más especifico y explicarme con un poco más de detalle lo que tengo que hacer?

Muchisimas gracias
Responder Con Cita
  #12  
Antiguo 18-11-2003
vetustas vetustas is offline
Miembro
 
Registrado: oct 2003
Posts: 77
Poder: 21
vetustas Va por buen camino
No hace falta. Ya lo he solucionado
Gracias por vuestra ayuda
Responder Con Cita
  #13  
Antiguo 18-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
vetustas comentó:
Puedes ser más especifico y explicarme con un poco más de detalle lo que tengo que hacer?
Pues ya no hay mucho qué hacer. Ya tienes funcionando un formulario que muestra los datos de un alumno y que recorres con un dbnavigator.

Lo único que falta es colocarte en el registro adecuado dependiendo del dni que se especifique en un cuadro de diálogo.

Para ello puedes usar el método Locate del dataset que tengas asociado al dbnavigator, por ejemplo:

Table.Locate('dni', Edit.Text, [])

donde Edit sería el control que obtienes del cuadro de diálogo.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:20: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
Copyright 1996-2007 Club Delphi