Ok, you answered one of my questions beforehand, the user needs to be informed. Well, the recommendation of a mail then is not the first thing I'd do, instead go with the other recommendation, this is part of your application business logic, not of the database. So put it in your VFP application to inform about overpaying or paying up.
I don't know how you store a customers balance, but for accounting sake you should save each payment or withdrawal into a booking table, so the account balance always results from summing all bookings. made. Maybe at some time you delete all bookings older than 1,2,5, or 10 years and store that as a balance of that date to not let this bookings table grow too large. It's also a matter of laws. So in the simplest case I'd design a bookings table with fields customerid, payment, datetime and maybe a checksum you compute with a 'secret' algorithm, so noone can fake booking records from elsewhere.
Anyway, after any booking is made you can (re)query the balance by SELECT Sum(payment) as balance FROM bookings WHERE customerid = ?m.lnCustomerID and if that's 0 it's paid up and if it's positive it's overpaid. There is no need for a trigger just because that is of interest in the very moment a payment is stored. There typically are deadlines for an invoice, so it'll be sufficient to check at deadlines for the payment, for cashback or for reminders or whatever, but that's not the responsibility of the database, that's business logic of the application.
As I said in my second post: "Maybe you're putting too much business logic there, maybe not." From the current knowledge I'd say you indeed put too much business logic into the database.
Think about point and time of failures. If a trigger fails in the worst case, not because of a programming error but say a hdd head crash, power outage or anything beyond your planning. Then you're left with a wrong account status and since you only check in the moments of an update or insert, you'll never process this customers balance again. Instead of the database trigger action, checking an account /invoice status should be a function of your application, which can be done at any moment by the user and may be done at first startup of the day, during the night form a scheduled task or hourly while the app runs or whatever you like. And it should run over all customers and give a report of what needs to be applied, eg cashbacks (if you do) or reminders or whatever you need.
Also think about user errors. Once a trigger is set off and sends a mail, informs the army or congratulates about the millionth invoice paid and send out a price, not all of that can be reversed easily. If a user enters a payment for the wrong customer, there should be the possibility to stornate that. Triggers are really for the things you need to be in sync with whatever data was changed or inserted, not for this kind of business logic.
Bye, Olaf.