Programación General > Delphi

 Optimizando Código

(1/1)

VeRaCrUzAnItO-10-:
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 --- procedure pro_resp( var val,val2:string);var    resp:string;begin      contador:=0;      ModuloEasyExa.q_resp.SQL.Text:='SELECT correcta from respuestas WHERE idPregunta='+val2+' and respuesta='+val;      ModuloEasyExa.q_resp.Open;      ModuloEasyExa.q_resp.First;      if (ModuloEasyExa.q_resp.RecordCount > 0) then      begin            resp:=ModuloEasyExa.q_resp.FieldByName('correcta').AsString;            if (resp = 's')then            begin                  showmessage('correcta');                  contador:=contador+1;             end            else                  showmessage('incorrecta');            begin            end;      end;      ModuloEasyExa.q_resp.Close; end; procedure Texamen.RadioButton1Click(Sender: TObject);// esto se repite en 20 radiobuttonsbegin       val:=resp[0,0];      val2:=id[0];      pro_resp(val,val2); end;  
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:
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-:
muchas gracias, una vez mas tu ayuda fenomeno!

Navegación

[0] Índice de Mensajes

Ir a la versión completa