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
Ir a la versión completa