Muy simple. Estas pasando edti1.text dentro de la cadena, no como valor; mas bien deberías usar algo así:
Código Delphi
[-]
with query1 do
begin
SQL.Add('INSERT INTO portable (Materia)');
SQL.Add('SELECT materia FROM califica');
SQL.Add('WHERE Materia = '''+Edit1.text+'''');
ExecSQL;
end;
SQL.Add('WHERE Materia = '+QuotedStr(Edit1.text));
SQL.Add('WHERE Materia = :Materia');
ParamByname('Materia').AsString:=edit1.text;
/-
Y dos cosas más:
1.- Si vas a usar "With Query1 do", no es necesario que sigas poniendo "Query." en cada línea, de eso se encarga el "With". Así como lo tienes, es como si te subieras a un coche y te lo llevaras empujando.
2.- ¿Para que es el Table1.Edit? ¿Esta enlazado a la misma tabla del query? Si es así, no necesitas hacer las dos cosas.