Solved

ADD FIELD SET A DEFAULT VALUE SQL

Posted on 2008-06-12
10
5,771 Views
Last Modified: 2013-11-23
Hi Geniuses, Gurus, Experts, et al.,
I want to make sure I understand. There was a question answered before about setting default values when creating a table. It was closed and the expert said there was a M$ bug. Are you saying there is no way to create a column that contains a default value when programming in Delphi and working with an Access 2000 database? I tried the following and it didn't work:

with MyQuery do
begin
    Close;
    SQL.Clear;
    SQL.Add('ALTER TABLE ' + TableName + ' ');
    SQL.Add('ADD COLUMN Deleted CHAR(1) DEFAULT ''N''');
    ExecSQL;
  end;

Help please.
0
Comment
Question by:reforest
10 Comments
 
LVL 18

Expert Comment

by:Johnjces
ID: 21776092
One problem as I see it is you should be using an ADOCommand. Works with Access fine.

Here is an example...

 ADOCommand1.CommandText := 'Alter Table CDLib ADD CDKey Text(50)';
 ADOCommand1.Execute;
 ADOCommand1.CommandText := 'Alter Table CDLib ADD Comments Memo';
 ADOCommand1.Execute;

You can then add your default text as you did above.

I also would use quoted string. I feel it makes quoted strings in strings easier and more fool proff.:

SQL.Add('ADD COLUMN Deleted CHAR(1) DEFAULT ' + QuotedStr('N'));

Hope this helped.

John
0
 
LVL 13

Expert Comment

by:rfwoolf
ID: 21777331
"I tried it and it didn't work"
-please provide details as to in what way it did not work, such as any error messages or the results.

Just a minor note about the field "Deleted" - I don't think it's a reserve word but just in case it is you may want to put it in quotes or show it as a descendant of a table
Example
SELECT MyTable.Deleted  FROM MyTable
0
 
LVL 6

Expert Comment

by:bokist
ID: 21777353
Hi,

Try this way :
SQL.Add('ADD COLUMN Deleted CHAR(1) DEFAULT ''N'' with values');
0
 

Author Comment

by:reforest
ID: 21780335
The following code created the column, but did not put any values into rows that already contained data, and the last row (when viewed in Access) had #Error in the Deleted column:

DataMod.CommandQuery.CommandText := 'ALTER TABLE Chemicals ADD COLUMN Deleted CHAR(1) DEFAULT ' + QuotedStr('N');
DataMod.CommandQuery.Execute;

The following code caused an error that said 'Syntax error in ALTER TABLE statement':
with MyQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('ALTER TABLE Chemicals ADD COLUMN Deleted CHAR(1) DEFAULT ''N'' with values');
    ExecSQL;
  end

So, still nothing that adds 'N' to my new column. Thanks for the help, but more ideas needed.
0
 
LVL 54

Accepted Solution

by:
nico5038 earned 250 total points
ID: 21786997
I'm afraid that the CREATE TABLE statement of the Jet-engine (the access database engine) doesn't support default values.
When you're able to open the Access Tables collection from Delphi with code, then a default value can be added. I used VBA code in the past to manipulate table field properties, but that's "within" Access and not in the database engine....

Nic;o)
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 

Author Closing Comment

by:reforest
ID: 31466820
Thanks for the help. It always stinks when the answer is, 'You can't do it the easy way'. Oh well. I've figured out a workaround now.
0
 
LVL 54

Expert Comment

by:nico5038
ID: 21807159
Glad I could help, but now I'm curious how your work around is implemented....
I guess you use an UPDATE query or add the Default value to the form field before the INSERT.

Nic;o)
0
 

Author Comment

by:reforest
ID: 21809846
Actually, it's not anything interesting. I found a way to do what I wanted to do without entering a default value at all. I'm such a beginner that I was having trouble trying to select rows where MyTextField = ''. I thought if I added a default, then I could SELECT * from MyTable WHERE MyTextFIeld = 'Default'. I now know that I need to SELECT * from MyTable WHERE MyTextFIeld Is Null.

BTW, I still have no idea how to rename columns or copy data from one column to another within the same table...want me to submit a new question?
0
 
LVL 54

Expert Comment

by:nico5038
ID: 21817963
No need for a new question, as I'm not "in for the points" :-)

To copy data from column to column use:

        UPDATE tblA SET fieldA = FieldB

Without a WHERE clause all rows will be effected. (Always try first on a backup copy of the table when manipulating data in tables!)

Renaming is done with the "AS" predicate like:

        SELECT fieldA AS Column1 from tblA

This will give one column named "Column1" in the output of the query.

Success with your application !

Nic;o)
0
 

Author Comment

by:reforest
ID: 21819115
Thanks for the help, but I'm still having trouble.

Before you sent this reply I opened a question titled 'UPDATE table SET col1 = col2 not working', because I found something on the internet about copying columns in SQL. The question is still open, though, because it's not working in Delphi. It works if I open my Access database and run the UPDATE query, but not when I try to do it in code from Delphi.

I have successfully run other types of queries (SELECT INTO, ALTER TABLE, ALTER COLUMN, etc.), so I know how it works most of the time. It's just not working for my UPDATE query.

Do you program in Delphi?
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

Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
What’s inside an Access Desktop Database. Will look at the basic interface, Navigation Pane (Database Container), Tables, Queries, Forms, Report, Macro’s, and VBA code.

910 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

22 Experts available now in Live!

Get 1:1 Help Now