Say that we want to make a table person with the following attributes:
id: an integer uniquely identifying the person;
first_name;
name;
street;
postal_code;
town;
country.
How can we make a form in PostSqlForms and have the id automatically assigned when a new person is created?
The answer is different for PostgreSQL and SQLite.
In a PostgreSQL database we would create the table as follows:
CREATE TABLE person ( id serial PRIMARY KEY, first_name text, name text, street text, postal_code text, town text, country text);
PostgreSQL will respond with the following notice:
NOTICE: CREATE TABLE will create implicit sequence "person_id_seq" for serial column "person.id"
This means that PostreSQL has also implicitly defined a function nextval('person_id_seq') that will return the next value in the sequence each time it is called.
In pfm_form we add a record for form person:
Attribute | Value |
---|---|
name | person |
tablename | person |
sqlselect | id, first_name, name, street, postal_code, town, country |
sqlfrom | person |
sqlorderby | name, first_name |
sqllimit | |
pkey | id |
showform | t |
view | f |
help | The attribute "id" will be automatically assigned when a "person" is added to the database. |
In pfm_attribute we define the form's attributes. For attribute id we use the following values:
Attribute | Value |
---|---|
form | person |
attribute | id |
typeofattrib | taNotQuoted |
typeofget | tgReadOnly |
sqlselect | |
nr | 1 |
valuelist | none |
default | =SELECT nextval('person_id_seq') |
Now, each time we add a person using the form person, that person's id will automatically be set to the value returned by nextval('person_id_seq').
In an SQLite database we would create the table as follows:
CREATE TABLE person ( id integer PRIMARY KEY, first_name text, name text, street text, postal_code text, town text, country text);
SQLite considers an integer PRIMARY KEY as an alias for the ROWID which is a unique number that is automatically assigned to every record when it is inserted into the table.
In pfm_form we add a record for form person:
attribute | value |
---|---|
name | person |
tablename | person |
sqlselect | id, first_name, name, street, postal_code, town, country |
sqlfrom | person |
sqlorderby | name, first_name |
sqllimit | |
pkey | id |
showform | 1 |
view | 0 |
help | The attribute "id" will be automatically assigned when a "person" is added to the database. |
In pfm_attribute we define the form's attributes. For attribute id we use the following values:
Attribute | Value |
---|---|
form | person |
attribute | id |
typeofattrib | taNotQuoted |
typeofget | tgReadOnly |
sqlselect | |
nr | 1 |
valuelist | none |
default |
Now, each time we add a person using the form person, the person's id will be automatically set to the record's ROWID.