Club Delphi  
    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 04-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Codigo que estaba funcionando y ahora NO

Hola,

Este codigo estaba funcionando, ahora no hace nada no actualiza la tabla.

Este codigo no presenta error, pero no me actualiza la tabla

Código Delphi [-]
datam.Query7.SQL.Text:= 'Select * From 20092 Where matricula LIKE:variable';
datam.Query7.Parameters[0].Value:= '%'+ Edit1.Text +'%';
datam.Query7.Open;

datam.Query7.SQL.Text := ' select *, (exp + expgrup + pract1 + pract2 + pract3 + pract4 + pract5)As practica,( parcial1 + parcial2+ practica + final + trab_final) As tfinal from 20092';
datam.Query7.Filter:='matrciula Like '''+ Edit1.Text + '*''';
datam.Query7.Filtered:= True;

datam.Query7.Open;
 
datam.Query7.First;
while not datam.Query7.Eof do   // recorre la tabla en el query7
begin

datam.Qtemp.sql.Text := 'Update 20092 set practica = '+datam.Query7.fieldbyname('practica').AsString+' where matricula = '+QuotedStr(datam.Query7.fieldbyname('matricula').AsString);
datam.Qtemp.ExecSQL;
datam.Query7.Next;
end;

while not datam.Query7.Eof do
begin

datam.Qtemp.SQL.Text := 'Update 20092 set tfinal = '+datam.Query7.fieldbyname ('tfinal').AsString+ ' where matricula = '+QuotedStr(datam.Query7.fieldbyname('matricula').AsString);
datam.Qtemp.ExecSQL; // ejecuta el query2
datam.Query7.Next;

datam.Query7.Close;
datam.Query7.Open;

 end;

 end;
  end;

Que podría haber pasado?

Saludos a todos.

Última edición por delphi.com.ar fecha: 04-03-2010 a las 22:12:23. Razón: Cambio etiqueta SQL por DELPHI
Responder Con Cita
  #2  
Antiguo 04-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Tienes que tener en cuenta que se en un UPDATE no se cumple la condición del WHERE, este no producirá ningún tipo de error. ¿Estas seguro que se están cumpliendo las condiciones?.. ¿Porqué no te copias los SQL y los ejecutas en la consola para probar?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 04-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
// Esto no esta haciendo nada se lo comio el sql siguiente ya que usa el mismo query7
{
datam.Query7.SQL.Text:= 'Select * From 20092 Where matricula LIKE:variable';
datam.Query7.Parameters[0].Value:= '%'+ Edit1.Text +'%';
datam.Query7.Open;
}
datam.Query7.SQL.Text := ' select *, (exp + expgrup + pract1 + pract2 + pract3 + pract4 + pract5)As practica,( parcial1 + parcial2+ practica + final + trab_final) As tfinal from 20092';
datam.Query7.Filter:='matrciula Like '''+ Edit1.Text + '*''';
datam.Query7.Filtered:= True;

datam.Query7.Open;
 
datam.Query7.First;
while not datam.Query7.Eof do   // recorre la tabla en el query7
begin

datam.Qtemp.sql.Text := 'Update 20092 set practica = '+datam.Query7.fieldbyname('practica').AsString+' where matricula = '+QuotedStr(datam.Query7.fieldbyname('matricula').AsString);
datam.Qtemp.ExecSQL;

datam.Qtemp.SQL.Text := 'Update 20092 set tfinal = '+datam.Query7.fieldbyname ('tfinal').AsString+ ' where matricula = '+QuotedStr(datam.Query7.fieldbyname('matricula').AsString);
datam.Qtemp.ExecSQL; // ejecuta el query2
datam.Query7.Next;
end;  // termina el recorrido y luego la cierra y abre.

datam.Query7.Close;
datam.Query7.Open;

  end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 04-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola Caral.

Copie exactamente el código que tu me presenta y no hace nada, y no produce ningún error o advertencia.

Lo raro es que antes funcionaba.

Saludos
Responder Con Cita
  #5  
Antiguo 04-03-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Un pequeño aporte... Podrias mejorar tu codigo de UPDATE... esto es una opción:

Código:
update 20092
set practica = (exp + expgrup + pract1 + pract2 + pract3 + pract4 + pract5),
	tfinal = (parcial1 + parcial2+ practica + final + trab_final)
where matricula = 'NUMERO_MATRICULA'
podrias hasta colocarlo en un Store Procedure y solo llamar al SP desde delphi.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 04-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por aanil Ver Mensaje
Hola Caral.

Copie exactamente el código que tu me presenta y no hace nada, y no produce ningún error o advertencia.

Lo raro es que antes funcionaba.
Caral lo único que ha hecho es quitar una parte del código que a simple vista no haría la diferencia en el funcionamiento. ¿Leíste mi respuesta?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 04-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola Delphi, estaba viendo tu respuesta.

Creo que si que en el Where la condición es la matricula que es única para cada estudiante, te digo que anteriormente este cogido funciono, puede que yo al rehacer el proyecto haya dejado algo.

Anteriormente ese código en vez de Query7, era Query1, lo que he hecho es poner mas bonito mi proyecto lo he separado y lo he ampliado, pero en el proyecto viejo el código si me funciona.

Saludos..

Otra cosa no soy muy bueno en esto, pero no entendí lo de probar en la consola.
Responder Con Cita
  #8  
Antiguo 05-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Probaste dener el código en el ExecSQL, copiarte el SQL generado y ejecutarlo en la consola?.... Eso te demostrará si estas armando o no bien la instrucción.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 05-03-2010
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:
Empezado por aanil Ver Mensaje
Otra cosa no soy muy bueno en esto, pero no entendí lo de probar en la consola.
Muchos motores de bases de datos proporcionan una aplicación rudimentaria (de consola o MS-DOS) para realizar consultas SQL directamente. A lo que se refiere Federico es que muchas veces nos hacemos un lío entre la sentencia SQL en sí, y el armado de ésta mediante las instrucciones propias de Delphi. Para poder discernir correctamente dónde está el problema, conviene aislar el texto de la consulta final que se manda al servidor y probarlo directamente en la utilería que proporcione tu servidor de datos.

Para aislar el texto de la consulta puedes poner un punto de corte (breakpoint) en la línea del ExecSQL y examinar la propiedad SQL.Text del Query (Ctrl+F6). Copias el valor y lo pegas en la herramienta mencionada (habría que saber qué motor usas para conocer en detalle cuál es esta herramienta).

// Saludos
Responder Con Cita
  #10  
Antiguo 05-03-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Muchos motores...
Se me pasó ese comentario de aanil! ..
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #11  
Antiguo 07-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola

Todavía no encuentro el por que ya no puede actualizar, si este código estaba funcionando..

De todos modos lo seguiré intentando..

Saludos
Responder Con Cita
  #12  
Antiguo 08-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola les paso el codigo que funcionaba y que ahora NO HACE NADA, para ver donde es que esta el problema.

La base de datos tiene dos nombres reales, esta comprimida en WinZip.

Les agradecería sus ayudas.
Archivos Adjuntos
Tipo de Archivo: zip borrame.zip (63,9 KB, 4 visitas)
Responder Con Cita
  #13  
Antiguo 09-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Estoy un poco perdido en esto.
Que es lo que pretendes hacer, cual es el problema concreto, NO LO QUE FALLA.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #14  
Antiguo 09-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola Caral

Hace varios días y creo que tu me ayudaste con esto, recuerdo que el código me lo ayudaste a armar y estaba corriendo bien, pero no se lo que paso, que ese código ya no me suma esos campos y no me actualiza el campo TFinal.

Ese código estaba trabajando bien hasta que modifique mi proyecto, o sea que le hice varios arreglos y dejo de funcionar.

En el archivo ajunto creo que debería funcionar; es sumar en una fila, las notas de un estudiante, luego guardar ese resultado en la tabla como un total.

Y lo mejor seria que se actualizara la tabla entera sin tener que consultar estudiante por estudiante, que fuera un grupo completo por asignatura o clave.

Por favor revisa el archivo adjunto anterior a ver si se puede sumar y guardar el resultado.


Gracias.
Responder Con Cita
  #15  
Antiguo 09-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El asunto es que llamas a una consulta total y tambien a una suma, esto confunde a la bd y no genera el dato.
Hay que buscar el dato que se necesita, no mas, en este caso solamente al campo Matricula y la suma de los campos que necesitas.
Otra cosa es darle a estas sumas un nombre que no sea igual al de un campo, no solo por la bd, tambien por no confundirse uno mismo.
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  try
  if Edit1.Text ='' then
  showmessage ('Falta MATRICULA');
  except
  showmessage ('Falta MATRICULA');

Query1.SQL.Text := ' select Matricula, (exp + expgrup + pract1 + pract2 + pract3 + pract4 + pract5 + trab_final) As pract,'+
                   '( parcial1 + parcial2 + practica + final ) As tfin from 20092';
Query1.Open;

while not Query1.Eof do
begin
Qtemp.sql.Text := 'Update 20092 set practica = '+Query1.fieldbyname('pract').AsString+' where Matricula = '+QuotedStr(Edit1.Text);
Qtemp.ExecSQL;

Qtemp.SQL.Text := 'Update 20092 set tfinal = '+Query1.fieldbyname ('tfin').AsString+ ' where Matricula = '+QuotedStr(Edit1.Text);
Qtemp.ExecSQL;
Query1.Next;
end;

Query1.Close;
Query1.Open;
end;

end;
Si hicieras un showmesage al final de la consulta verias que en tu caso no devuelve nada y por supuesto nada da.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #16  
Antiguo 09-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Viendo el código me doy cuenta de que aun asi no funciona, el asunto es el siguiente:
Cuando se busca se hace con el mismo query1, tanto el dbgrid como la consulta.
A la hora de hacer la consulta no se encuentra cargado el dato, esto hace que no encuentre nada (se puede ver con un showmess).
En el ejemplo el Qtemp tampoco estaba conectado.
Bueno, el asunto lo resolvi con una variable ya que por alguna razon no me muestra el dato del query sin guardarlo antes (osea trampa de novato jejeje).
No veo el caso de hacer un recorrido si se va a buscar en una sola linea ya que se actualiza según la matricula.
Tampoco veo por que hacer dos update cuando en uno solo actualiza los dos campos.
Bueno el asunto para mi seria asi y por lo menos a mi me funciona y actualiza los datos:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var a,b :integer;
begin
  a:= 0;
  b:= 0;
  if Edit1.Text = '' then
  begin
  showmessage ('Falta MATRICULA');
  end;

Query1.Close;
Query1.SQL.Text := ' select (exp + expgrup + pract1 + pract2 + pract3 + pract4 + pract5 + trab_final) As pract,'+
                   '( parcial1 + parcial2 + practica + final ) As tfin from 20092 where matricula = '+QuotedStr(Edit1.Text);
Query1.Open;
a:= Query1.Fields[0].value;
b:= Query1.Fields[1].value;

Qtemp.sql.Text := 'Update 20092 set Practica = '+IntToStr(a)+', Tfinal = '+IntToStr(b)+' where Matricula = '+QuotedStr(Edit1.Text);
Qtemp.ExecSQL;

Query1.Close;
Query1.SQL.Text := ' select * from 20092 where matricula = '+QuotedStr(Edit1.Text);
Query1.Open;

end;
Bueno, por lo menos esto te sirve de practica.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #17  
Antiguo 09-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Gracias Caral,

Esto si me funciona, lo voy a usar.

Muchas, gracias..

Una cosa tengo que desconectar o dejar de usar una unidad, que esta conectada a un datamodule, no quiero usar el datamodule, para usar este código en el mismo form.

No se como me desconecto de datamodule.

Saludos.
Responder Con Cita
  #18  
Antiguo 09-03-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Aunque ya te dieron la solución...

Siempre nos habias pasado el código de actualización... y aunque este tenia algunas fallas de forma no significaba que no debiera funcionar... solo descargando el ejemplo que colocaste fué que encontré la razón pq no te funcionaba...

La cuestión era que tenias un bloque try..except donde TODO el código de actualización estaba dentro del área de excepción y hasta que no ocurriera un error nunca se ejecutaría.

así lo tenias en el ejemplo que subiste:

Código Delphi [-]
  try
    if Edit1.Text ='' then
      showmessage ('Falta MATRICULA');
  except
    ... //código de actualización
  end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #19  
Antiguo 09-03-2010
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Hola Movorack

Eso fue lo que paso, después que me funcionaba el código, yo le adapte ese try except para que no me diera el error de no escribir la matricula, de ahí en adelante parece que fue que se puso que no hacia nada..

Gracias..
Responder Con Cita
  #20  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Parece que estas esperando una respuesta?.
Por lo menos yo no entiendo lo que quieres hacer.
Desconectar una UNIT del Datamodule???????
No entiendo nada.
Saludos
__________________
Siempre Novato
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
¡Delphi 7 funcionando en Ubuntu! kovaski Linux 22 29-09-2008 17:26:04
TurboPHP, ahora de código abierto, ¿competidor para Delphi for PHP? dec PHP 16 20-01-2008 09:15:38
Sobrescribir un evento y ejecutar también el que estaba previamente Piratta OOP 6 26-07-2007 11:00:44
Aplicaciones funcionando sin BDE correcaminos2k2 Conexión con bases de datos 1 12-06-2004 14:51:41


La franja horaria es GMT +2. Ahora son las 05:35:16.


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