• Viernes 8 de Noviembre de 2024, 17:44

Autor Tema:  Optimizando Código  (Leído 1751 veces)

VeRaCrUzAnItO-10-

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Optimizando Código
« en: Martes 16 de Enero de 2007, 01:52 »
0
bueno despues de mi bien librado tema del dblookupcombobox gracias a juan laplata, el sistemita de autoevaluación de examenes ya esta, manejo las respuestas y preguntas a través de arreglos y funciona perfecto, pero tengo el siguiente código:

Código: Text
  1.  
  2. procedure pro_resp( var val,val2:string);
  3. var
  4.     resp:string;
  5. begin
  6.       contador:=0;
  7.       ModuloEasyExa.q_resp.SQL.Text:='SELECT correcta from respuestas WHERE idPregunta='+val2+' and respuesta='+val;
  8.       ModuloEasyExa.q_resp.Open;
  9.       ModuloEasyExa.q_resp.First;
  10.       if (ModuloEasyExa.q_resp.RecordCount > 0) then
  11.       begin
  12.             resp:=ModuloEasyExa.q_resp.FieldByName('correcta').AsString;
  13.             if (resp = 's')then
  14.             begin
  15.                   showmessage('correcta');
  16.                   contador:=contador+1;
  17.  
  18.             end
  19.             else
  20.                   showmessage('incorrecta');
  21.             begin
  22.             end;
  23.       end;
  24.       ModuloEasyExa.q_resp.Close;
  25.  
  26. end;
  27.  
  28. procedure Texamen.RadioButton1Click(Sender: TObject);// esto se repite en 20 radiobuttons
  29. begin
  30.  
  31.       val:=resp[0,0];
  32.       val2:=id[0];
  33.       pro_resp(val,val2);
  34.  
  35. end;
  36.  
  37.  

En mi radio button le paso los valores del arreglo que tiene esa posición, mando a llamar al procedimiento donde evalua la respuesta seleccionada y el id de la pregunta, con esos campos hace una consulta y dependiendo de lo que mande es que se imprime un mensaje.

Bueno, la cosa es q me dijeron que eso es muy costoso para la máquina, ya que mandar el parametro y hacer la consulta por cada vez q selecciones un radio no tendria que ser,optimizalo  :blink: , me dijeron :"haz una consulta donde los campos se queden en memoria y por medio de 'locate' puede jalar los datos que necesites" , no entendi nada y por mas q dije: "expliquenme con mazanas", nadamas nada, alguien tiene idea de lo qu quisieron dar a entender o como se hace?.

Saludos.

juanlaplata

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Optimizando Código
« Respuesta #1 en: Martes 16 de Enero de 2007, 18:26 »
0
Creo que lo que te han dicho es que hagas una unica consulta que te devuelva todas las respuestas con el respectivo Id de la preg.
Ejemplo:
Soluciones = (Select idPregunta, respuesta From Repuestas)
Soluciones va a ser la unica consulta que va a estar en memoria.
El tema del locate seria el siguiente.

if ( Soluciones.Locate('idPregunta',val2,[]) )
   then showmessage( Soluciones.FieldByName('respuesta').asString )
   else showmessage('No se encuentra la Pregunta Cuyo Id es '+IntTOstr(Val2));


Soluciones.FieldByName('respuesta').asString con esto accedes a la respuesta de la pregunta cuyo ID = val2

Espero que lo entiendas y te funcione.Suerte

VeRaCrUzAnItO-10-

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Optimizando Código
« Respuesta #2 en: Domingo 21 de Enero de 2007, 00:49 »
0
muchas gracias, una vez mas tu ayuda fenomeno!