Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Obtener un campo a a partir de otro

Bueno, tengo una tabla de alumnos, con dni, nombre y otras cositas.

Como hago para dado un nombre, obtener el dni, porque necesito asignar el pago de una cuota.
En la tabla cuotas, tengo el dni como relacion con el dni de la tabla alumnos, entonce necesito obtener el dni ingresado un nombre, y asignar segun ese dni el estado pago o algo asi del mes seleccionado.

Aunque sea me pueden decir que componentes se usan, yo luego busco. O si quieren mostrarme me da igual.

Tengo un formulario con un TTable para alumnos, y otro para cuotas. Dos DataSource y un Query.

Gracias
Responder Con Cita
  #2  
Antiguo 12-11-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Veo que andas bastante perdido, lo que dices es como si alguien pregunta:
"Quiero correr una maratón olímpica, ¿cómo tengo que ponerme la gorra si hace viento?, cuento con un par de zapatillas, una camiseta y un calzón azul.

Te aconsejo este libro, es de lo mejorcito que puedes encontrar, y además es gratis.
Responder Con Cita
  #3  
Antiguo 12-11-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 21
ElDioni Va por buen camino
Hola,

digo yo que lo normal sería buscar al alumno por el DNI y no por el nombre, imagina que tienes dos alumnos que se llaman igual, si haces una consulta en la que no compruebas si el resultado te devuelve más de un valor para los dos alumnos te dará el mismo resultado ya que mirarás el primer DNI de la consulta. De todas formas sería algo así.

Código Delphi [-]
Query1.Close;
Query1.SQL.Text:='SELECT dni FROM alumnos WHERE nombre LIKE '+quotedstr('%'+txtnombre.text+'%');
Query1.Open;
Query2.Close;
Query2.SQL.Text:='SELECT cuota FROM cuotas WHERE dni='+quotedstr(Query1.FieldByName('dni').AsString);
Query2.Open;
showmessage(Query2.FieldByName('Cuota').AsString);

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #4  
Antiguo 14-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
¿Que significa txtnombre?

Cita:
Empezado por ElDioni Ver Mensaje
Hola,

digo yo que lo normal sería buscar al alumno por el DNI y no por el nombre, imagina que tienes dos alumnos que se llaman igual, si haces una consulta en la que no compruebas si el resultado te devuelve más de un valor para los dos alumnos te dará el mismo resultado ya que mirarás el primer DNI de la consulta. De todas formas sería algo así.

Código Delphi [-]
Query1.Close;
Query1.SQL.Text:='SELECT dni FROM alumnos WHERE nombre LIKE '+quotedstr('%'+txtnombre.text+'%');
Query1.Open;
Query2.Close;
Query2.SQL.Text:='SELECT cuota FROM cuotas WHERE dni='+quotedstr(Query1.FieldByName('dni').AsString);
Query2.Open;
showmessage(Query2.FieldByName('Cuota').AsString);

Saludos.
¿Y que es txtnombre en el primer select? Me da un error al compilar esa parte
Gracias.
Responder Con Cita
  #5  
Antiguo 14-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por giulichajari Ver Mensaje
¿Y que es txtnombre en el primer select? Me da un error al compilar esa parte
Gracias.
Hola.

Creo que el amigo ElDioni está hablando de un TEdit que es lo que usualmente se utiliza. Le dió ese nombre para que fuera más representativo del contenido que almacena.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 14-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Creo que el amigo ElDioni está hablando de un TEdit que es lo que usualmente se utiliza. Le dió ese nombre para que fuera más representativo del contenido que almacena.

Saludos.
Pues tampoco, pruebo con el nombre de mi TEdit y lo mismo...

Saludos
Responder Con Cita
  #7  
Antiguo 14-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por giulichajari Ver Mensaje
Pues tampoco, pruebo con el nombre de mi TEdit y lo mismo...

Saludos
¿ Y cuál es exáctamente el mensaje de error que recibis ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 14-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
¿ Y cuál es exáctamente el mensaje de error que recibis ?

Saludos.
Undefined symbol
pero con el TEdit tampoco lo toma
Responder Con Cita
  #9  
Antiguo 14-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
A ver...

En un mensaje anterior (Relacionar Popupmenu con fila de DBGrid), hiciste la consulta en el foro C++ Builder.

¿ Estas trabajando en C++ ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 14-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
A ver...

En un mensaje anterior (Relacionar Popupmenu con fila de DBGrid), hiciste la consulta en el foro C++ Builder.

¿ Estas trabajando en C++ ?

Saludos.
Si. Claro ahí puede estar el error. Mil disculpas
Responder Con Cita
  #11  
Antiguo 14-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Entonces el código de ElDioni quedaría:
Código:
  Query1->Close();
  Query1->SQL->Text = "SELECT dni FROM alumnos WHERE nombre LIKE " +
       QuotedStr("%" + tuEdit1->Text + "%");
  Query1->Open();

  Query2->Close();
  Query2->SQL->Text = "SELECT cuota FROM cuotas WHERE dni = " +
    QuotedStr(Query1->FieldByName("DNI")->AsString);
  Query2->Open();
  ShowMessage(Query2->FieldByName("Cuota")->AsString);
Recorda que la sintáxis de C++ es sensible a mayúsculas/minúsculas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 15-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Entonces el código de ElDioni quedaría:
Código:
  Query1->Close();
  Query1->SQL->Text = "SELECT dni FROM alumnos WHERE nombre LIKE " +
       QuotedStr("%" + tuEdit1->Text + "%");
  Query1->Open();

  Query2->Close();
  Query2->SQL->Text = "SELECT cuota FROM cuotas WHERE dni = " +
    QuotedStr(Query1->FieldByName("DNI")->AsString);
  Query2->Open();
  ShowMessage(Query2->FieldByName("Cuota")->AsString);
Recorda que la sintáxis de C++ es sensible a mayúsculas/minúsculas.

Saludos.
Me da el siguiente problema. Mil disculpas
Código SQL [-]
Ambiguity between '_fastcall System:perator +(int,const System::Variant &)' and '_fastcall System:perator +(int,const System::Currency &)'
Responder Con Cita
  #13  
Antiguo 15-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Gracias por su tiempo

Bueno ya logre solucionarlo, habian algunas cosas mal, muchas gracias..
Responder Con Cita
  #14  
Antiguo 21-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Post Pregunta

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Entonces el código de ElDioni quedaría:
Código:
  Query1->Close();
  Query1->SQL->Text = "SELECT dni FROM alumnos WHERE nombre LIKE " +
       QuotedStr("%" + tuEdit1->Text + "%");
  Query1->Open();

  Query2->Close();
  Query2->SQL->Text = "SELECT cuota FROM cuotas WHERE dni = " +
    QuotedStr(Query1->FieldByName("DNI")->AsString);
  Query2->Open();
  ShowMessage(Query2->FieldByName("Cuota")->AsString);
Recorda que la sintáxis de C++ es sensible a mayúsculas/minúsculas.

Saludos.
Una pregunta:¿porqué ponen primero Close al SQL y luego de las instrucciones un Open y no al reves?
Responder Con Cita
  #15  
Antiguo 21-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por giulichajari Ver Mensaje
Una pregunta:¿porqué ponen primero Close al SQL y luego de las instrucciones un Open y no al reves?
Hola giulichajari.

Por que si es necesario modificar alguna propiedad en la consulta SQL que afecte la selección del conjunto de datos, previamente es necesario cerrarlo.

En el código anterior, al ser una consulta simple, se asigna directamente a la propiedad SQL->Text, de tipo PChar y que apunta a la actual consulta SQL. Sobreescribiéndo de ese modo la cadena SQL previamente almacenada.

Pero, en consultas mas complejas, donde el uso del método Add de la propiedad SQL hace más entendible el código, también es necesario limpíar cualquier residuo anterior.

Tomando parte del código anterior para ejemplificar el uso de Add:
Código:
  Query1->Close();
  Query1->SQL->Clear();  // <== Limpiar posibles residuos
  Query1->SQL->Add("SELECT dni");
  Query1->SQL->Add("FROM alumnos");
  Query1->SQL->Add("WHERE nombre LIKE "+QuotedStr("%"+tuEdit1->Text+"%"));
  Query1->Open();
  ...
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 21-11-2012 a las 19:04:43.
Responder Con Cita
  #16  
Antiguo 21-11-2012
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 14
giulichajari Va por buen camino
Gracias

Cita:
Empezado por ecfisa Ver Mensaje
Hola giulichajari.

Por que si es necesario modificar alguna propiedad en la consulta SQL que afecte la selección del conjunto de datos, previamente es necesario cerrarlo.

En el código anterior, al ser una consulta simple, se asigna directamente a la propiedad SQL->Text, de tipo PChar y que apunta a la actual consulta SQL. Sobreescribiéndo de ese modo la cadena SQL previamente almacenada.

Pero, en consultas mas complejas, donde el uso del método Add de la propiedad SQL hace más entendible el código, también es necesario limpíar cualquier residuo anterior.

Tomando parte del código anterior para ejemplificar el uso de Add:
Código:
  Query1->Close();
  Query1->SQL->Clear();  // <== Limpiar posibles residuos
  Query1->SQL->Add("SELECT dni");
  Query1->SQL->Add("FROM alumnos");
  Query1->SQL->Add("WHERE nombre LIKE "+QuotedStr("%"+tuEdit1->Text+"%"));
  Query1->Open();
  ...
Saludos.
Muchas gracias por responder
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener RGB a partir de HTML Niko Varios 4 05-01-2009 14:17:58
crear .exe hijo a partir de otro .exe padre petete2008 Varios 1 01-12-2008 15:18:00
Obtener SqlDataAdapter a partir de DataSet kes .NET 0 16-10-2007 11:42:38
Obtener IP a partir de netbios (nombre windows) aledieb API de Windows 2 20-10-2006 18:13:43
Obtener Handle a partir del PID seoane Trucos 0 30-08-2006 16:15:16


La franja horaria es GMT +2. Ahora son las 15:28:03.


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