Greška je bila u tome što ti je znak % bio izvan navodnika gde se nalazi tekst za pretragu iz EDIT polja.
Ispravljeni deo tvog koda glasi:
SQL.Add(QuotedStr(ANsiUpperCase(EDIT.Text) + '%'));
Dakle, kada hoćeš da preko SQL upita prikažeš podatke gde sadržaj određenog polja
počinje sa zadatim tekstom, onda u nastavku tog teksta dodaš znak %. U tvom primeru, pošto se tekst koji se traži nalazi u Edit polju, i pošto koristiš funkciju QuotedStr koja taj tekst stavlja pod apostrofe, onda moraš da % dodaš u okviru tih apostrofa, ne posle njih. Tu je bila tvoja greška, znak % se nalazio u sledećem redu, posle apostrofa.
Kada god imaš problem sa "dinamičkim" SQL upitima, odmah iza upita stavi jedan MessageBox kojim ćeš da prikažeš kompletan tekst upita na ekranu. Tako možeš da vidiš šta će se tačno izvršiti i da otkriješ eventualne greške. Ja takođe koristim neki eksterni program u kome napišem kompletan upit koji radi, pa ga onda u Delphi samo postavim na pravo mesto i "zaokružim" adekvatnim kodom. Za Interbase/Firebird je dobar i jednostavan za korišćenje IBExprert.
Inače, umesto ovakve konstrukcije (u kojoj direktno "dopisuješ" sadržaj SQL upita iz Edit polja) bolje je i pravilnije da koristiš parametre. Za pomoć oko toga, potraži malo ovde na forumu, već je bilo takvih tema, pogledaj malo po Delphi Helpu ili, u krajnjem slučaju, pitaj.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams