Thanks for the replies.. But my problem still continues even after setting the isolation level.

Set oRs = oConn.Execute("SELECT N_GEN FROM MY_TABLE ORDER BY N_GEN::INT DESC")

If err <> 0 then 'If table not found
GetFieldValue = "1"
WriteToFile logfilepath, date & " " & time & " -- no table Numero progressivo: 1" & vbcrlf , True
else
BEGIN
SET TRANSACTION = "ISOLATION LEVEL SERIALIZABLE"
if tipo_scheda = "SINGOLA" then
 GetFieldValue = oRs("N_GEN") + 1
else
 GetFieldValue = oRs("N_GEN")
end if
end if
COMMIT

Debugging my code(with logs) i see that still when 2 users login at the same time the N_GEN value is the same. (they enter the first if) In "My_Table" the last record has the value "5" so the next user that logs in shoul get the value "6". Sadly both the current users get the value "6".

Have i set the isolation level correctly??

Thanks

Shavonne

----- Original Message ----- From: "Jean-David Beyer" <[EMAIL PROTECTED]>
To: <pgsql-sql@postgresql.org>
Sent: Monday, February 11, 2008 5:55 PM
Subject: Re: [SQL] Check before INSERT INTO


Shavonne Marietta Wijesinghe wrote:
Thanks for the reply Grogory. I am trying to do a INSERT INTO.

Here is my table. n_gen, n_sheet, tot_n_sheet are defined as Primary Key
(Serial not null)

That is sure confusing. What could a DDL saying

  INTEGER n_gen SERIAL NOT NULL;
  INTEGER n_sheet SERIAL NOT NULL;
  INTEGER tot_n_sheet SERIAL NOT NULL;
  PRIMARY KEY (n_gen, n_sheet, tot_n_sheet)

mean? Is this what your DDL says? Do you enter rows of this table specifying the id and expecting the three serial generators to pick non-null sequential numbers for the other three fields? I think you are very unclear about what
is going on here. Are you perhaps saying the table has three (distinct)
primary keys? Because if you assign them values, why would they be SERIAL?

  id     | n_gen     | n_sheet   | tot_n_sheet
----------+-----------+-----------+-------------
    a    |      1    |     1     |      1
    b    |      2    |     1     |      2
    x    |      2    |     2     |      2
    u    |      3    |     1     |      1
    r    |      4    |     1     |      3
    a    |      4    |     2     |      3
    s    |      4    |     3     |      3


So there are 2 users inserting in to the db. In my ASP page i have a
field that shows the value of n_gen +1. So when the 2 users both login
at the same time, with different sessions, they both see "7" in the
n_gen field. But when they click on the sumbit button only one record is
inserted and the other is lost.

Whatever you are doing that I do not understand with your keys, if you have
two users doing inserts on the same table, would you not have to run this
with Serializable Isolation Level (12.2.2. in the manual)? Would this not
fix your problem especially if you have a SERIAL as primary key?

I though it was possible to change the SQL string before it does the
update.. But i can't seem to find a solution for it.. Any idea ??




--
 .~.  Jean-David Beyer          Registered Linux User 85642.
 /V\  PGP-Key: 9A2FC99A         Registered Machine   241939.
/( )\ Shrewsbury, New Jersey    http://counter.li.org
^^-^^ 11:35:01 up 18 days, 1:21, 1 user, load average: 4.22, 4.28, 4.27

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org


---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

              http://www.postgresql.org/docs/faq

Reply via email to