Solved

DB Edit boxes - triggering option to save to DB via code

Posted on 2006-10-19
5
593 Views
Last Modified: 2010-04-05
Hello,

This is going to be a little difficult to explain, so I'll use an example setup that might make it easier to see on your screen.  Basically, what I want to be able to do is change the value of a DBEdit so that it triggers the DBNavigator to allow a save (just changing to DBEdit.text or DBEdit.Edittext is not sufficient, as you'll see).  Note that I'm using the DBNavPlus plugin.

Let's assume the following setup.  You have a small simple database with a single table called 'Details'.  This table has 3 fields -> DetailsID, Name, Email.

In Delphi, you have a form with 2 DB Edit boxes, 1 normal combo box (not a DB Combo Box) and a DB Navigator (or DBNavPlus in my case, which is the same).  The two DB Edit boxes relate to the two fields in the table (excluding the ID field), so one is Name and the other is Email.  The combo box has two options -> Subscribed and Not Subscribed.  

- If the Combo box is set to Subscribed, then email DBEdit box is enabled.  Otherwise, the email DBEdit box is not enabled.  This is easily done via the onchange event.  
- If there is an email address in the email DB Edit box, then the combo box is set to Subscribed.

Now comes the problem.  Assume that you enter in an email address in the email DB Edit box, and you've saved the record via the DB Navigator.  If you were to now change the combo box to "Not Subscribed", the onchange event will disable the email DB Edit box (and also remove the email address in it, if you also have DBEditEmail.Text := '', or DBEditEmail.EditText := ''), but the DBNavigator won't trigger and the email address still exists for that entry.

If, on the other hand, someone was to first delete the email address manually, and then change the combo box to "Not Subscribed", everything would go without a hitch.

What I need to be able to do is simulate someone changing the data in the email DB Edit.  Obviously setting the DBEdit's text or editext property isn't sufficient.  Basically, if someone manually deletes the text in the DBEdit then it triggers in a change in data for the Database, yet if I do it via code with the .Text or .EditText property, it doesn't trigger a change...
0
Comment
Question by:Sebastion
  • 3
  • 2
5 Comments
 
LVL 3

Expert Comment

by:cobi100
ID: 17770048
try changing it at the field or query/table level, like:

  myQuery.FieldByName('MyField').AsString := '';

or

  myQueryMyField.AsString := '';
0
 
LVL 3

Expert Comment

by:cobi100
ID: 17770098
I just tried it, I forgot what will trigger the edit state in the dataset for the DBNavigator to change, so this before any of the lines of code above:

  myQuery.Edit;
0
 

Author Comment

by:Sebastion
ID: 17770413
So you're saying that the only way to do it is to manually change the field in the database directly?  I was hoping to avoid doing that.  There is no way to do it through the email DBEdit box?
0
 
LVL 3

Accepted Solution

by:
cobi100 earned 250 total points
ID: 17773960
you won't be modifying the DB directly at that point, what you're modifying is the dataset holding the data, well at least not until until you hit save or post in the DBNavigator, and even then, if you're using a Client Dataset you have to ApplyUpdates.

the main difference is the Edit method, I'm not sure if you do myQuery.Edit; and then change the text property in the DBEdit this might do what you want. give it a try and see if that's enough.
0
 

Author Comment

by:Sebastion
ID: 17793412
Ahh, I see.

What I ended with was, in the onchange event for the combo box I have:

    if (DBEditEmail.Text <> '') then
      begin
      DBEditEmail.DataSource.DataSet.Edit;
      DBEditEmail.Text := '';
      end;

And this sets the DB updater to allow the user to save, or undo, or whatever.

Thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
automatically logging in via bde delphi 3 68
error 1.1 400 Bad request idhttp delphi 18 54
select query - oracle 16 92
Dynamically Created Query 3 50
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now