Solved

ADD FIELD SET A DEFAULT VALUE SQL

Posted on 2008-06-12
10
5,770 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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

When you are entering numbers in a speadsheet, and don't remember what 6×7 is, you just type “=6*7" instead. It works in every cell! This is not so in Access. To enter the elusive 42 in a text box, you have to find a calculator, and then copy the re…
I originally created this report in Crystal Reports 2008 where there is an option to underlay sections. I initially came across the problem in Access Reports where I was unable to run my border lines down through the entire page as I was using the P…
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
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.

705 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

18 Experts available now in Live!

Get 1:1 Help Now