Pues lo primero es usar ' para las cadenas en Delphi y " para las cadenas en SQL. Pero es incluso mejor usar la función QuotedStr, que si bien alarga el código, lo aclara bastante. Por ejemplo, en lugar de poner
Código Delphi
[-]
'where id_especialidad = "' + txt_clave_esp.Text + '"'
poner
Código Delphi
[-]
'where id_especialidad = ' + QuotedStr(txt_clave_esp.Text)
La función QuotedStr se encargará de colocar las " alrededor del texto.
Mejor aún sería usar parámetros:
Código Delphi
[-]
'where id_especialidad = :EspecialidadId'
y sustituirlos al momento de lanzar la consulta:
Código Delphi
[-]
ZQ_Materias.ParamByName('EspecialidadId').AsString := txt_clave_esp.Text;
Si no puedes usar parámetros, por ejemplo porque no sepas de antemano cuantas líneas vasa insertar, podrías, por lo menos usar Format:
Código Delphi
[-]
Format('where id_especialidad = %s', [QuotedStr(txt_clave_esp.Text)]);
En fin, que hay varias opciones, pero lo esencial es no intentar construir la cadena de un sólo golpe porque puede uno volverse loco.
// Saludos