Hola
learning_delphi y bienvenido a los foros de Club Delphi.
Como es costumbre con los recién llegados, te invito a que leas la
Guía de estilo (si no lo has echo ya

).
Encerré tu código Delphi entre las etiquetas [delphi] [/delphi], notarás que le dá mucha más legibilidad. El uso de las mismas lo encontrás
aquí.
En cuanto a tu problema, creo que está en las líneas donde asignas el contenido a los parámetros:
Código Delphi
[-]
form1.q1.ParamByName('p1').asString:=form3.DBedit2;
form1.q1.ParamByName('p2').aSSmallInt:=form3.DBedit1;
Ya que parece que tu intención es enviár el contenido de los DBEdit's como valores de los parámetros, deberías especificar la propiedad
Text de los mismos, es decir algo así:
Código Delphi
[-]
with Form1.q1 do
begin
Close;
SQL.Text:= 'UPDATE ZONAS SET NOMZONA = :P1 WHERE ZONA = :P2';
ParamByName('P1').AsString:= Form3.DBEdit2.Text;
ParamByName('P2').AsString:= Form3.DBEdit1.Text;
ExcecSQL;
...
end;
Un saludo.