We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Deleting & database triggers

jvh042097
jvh042097 asked
on
Medium Priority
210 Views
Last Modified: 2010-04-04
I have a table, with a trigger on it wich prevents certain deletes.
A Delphi program tries to delete a record, but the trigger prevents it from being deleted. However, my delphi progam doesn't show the record anymore, unless i do a refresh. Is there an OTHER way (so without me doing a refresh) to keep on seeing that record ?
Comment
Watch Question

Try adding some type of code into your trigger that forces a refresh when the trigger is triggered.... This way it will automatically refresh.

Author

Commented:
If this is the type of answer an expert gives, i'm also an expert. How can i get my SQL forcing a refresh of my Delphi Datasource ?

But i'd rather like my Delphi recognize the fact that the record still exists !

Hoping for a real answer !

Commented:
(Anyone who can point a browser to this site can probably
register as an expert too...)

Anyway for my real answer:

I do not know that database server you use but normally
your "Delete from ..." SQL will generate some sort of
error message when you execute it. (Although common sense suggests that you should receive an error message whenever the
delete fails...)

You should execute the SQL by hand and see what happens if
the trigger prevents the delete. If there is no error, you
have a problem at the server side (IMHO)

If there is an error, then you can catch that error in your code
and you bnever have to refresh in the first place.

  Good Luck,

(And please, please please use the TSQL component,)

Author

Commented:
Isn't TSQL part of oracle ? I use M$ $QL$ERVER !

if a trigger does a rollback of the transaction, there is no real error occuring. It's just part of the business rules, that you can't delete a specific record. In MS SQLServer, Stored procedures can return a kind of status level, but triggers cannot. So i keep on looking for a solution ...
Jeez... almost to simple to warrant an answer, but here goes anyway...

If the trigger causes a rollback (failed delete) then INSIDE the trigger issue a RAISERROR statement that you can capture with Delphi to indicate that yes, the delete was *attempted* but it failed due to a business rule conflict. When you issue the RAISEERROR statement try and use an error code that is not normally in use by MS SQL Server but is meaningful in the context of your application/business rules.

When Delphi recieves anything other than a successful completion code (0) back from the server it assumes there was a failure of that operation (be it Update, Delete or Insert) and WILL NOT remove that record from the result set on the client side.

The apps I'm working with do this on a regular basis, it's part of standard SQL knowledge in regard to client/server architecture :P

Good luck with your project
Pegasus

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
Sorry, but i also came to this so simple answer to my "stupid" question. Thanks alot anyway !!!
Jvh,

It was not a "stupid" question at all, just one that I assumed everyone was familiar with how to handle. Bad assumption on my part. Anyways, glad to see everything is working ok.

On to the next bug! :)
Pegasus
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.