473,473 Members | 2,232 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

Cannot Determine New Record ID

Hi,

Looking for some help here!

I'm adding records to a SQL 2000 DB using the objRS.AddNew and objRS.Update
methods.

What I'd like to do is determine the new primary key value of the added
record.

I've tried the suggestions here :
http://authors.aspalliance.com/remas...dentityColumn/ and here:
http://support.microsoft.com/default.aspx/kb/221931 but none of them work
reliably. The Microsoft method worked a couple of times then kept reporting
the same Primary Key ID back to me then reported an old Primary Key.

I've spent a couple of hours on this which is ridiculous as this must be a
common thing to do.

Any suggestions / proven code very, very welcome!

Thanks in advance,

Robin.
Jan 15 '06 #1
6 2194
Robin Lawrie wrote:
Hi,

Looking for some help here!

I'm adding records to a SQL 2000 DB using the objRS.AddNew and
objRS.Update methods.


Don't. Cursors( recordsets) are very inefficient when it comes to modifying
data. They should only be used to retrieve read-only data in ASP
applications.

Use sql DML (Data Modification Language - INSERT, UPDATE and DELETE
statements) in a stored procedure that uses an output parameter to return
the identity value using the SCOPE_IDENTITY function.

For example, consider this table:

CREATE TABLE dbo.bookings
(
BookingID int IDENTITY,
FromTime datetime NOT NULL,
ToTime datetime NOT NULL,
RoomID int NULL,
CONSTRAINT PK_bookings
PRIMARY KEY CLUSTERED (BookingID)
ON
[PRIMARY]
)

I would create a stored procedure as follows:
CREATE PROCEDURE bookings_INS
(
@BookingID int output,
@FromTime datetime,
@ToTime datetime,
@RoomID int
)
AS
BEGIN
INSERT INTO dbo.bookings ( FromTime, ToTime, RoomID)
VALUES (@FromTime, @ToTime,@RoomID)
SET @BookingID = SCOPE_IDENTITY()
END

To test this in Query Analyzer, you would do this:

declare @id int
exec bookings_INS @id output, '13:00', '14:00', 5
select @id as [new id]

To run this from ASP, you would get my free stored procedure code generator
from
http://www.thrasherwebdesign.com/ind...asp&c=&a=clear
and use it to create the following code:

dim newid
Dim cnSQL
cnSQL.Open "<your connection string>"
Dim cmd, param

Set cmd=server.CreateObject("ADODB.Command")
With cmd
.CommandType=adcmdstoredproc
.CommandText = "bookings_INS"
set .ActiveConnection=cnSQL
set param = .createparameter("@RETURN_VALUE", adInteger, _
adParamReturnValue, 0)
.parameters.append param
set param = .createparameter("@BookingID", adInteger, _
adParamOutput)
.parameters.append param
set param = .createparameter("@FromTime", adDBTimeStamp, _
adParamInput, 0, cdate(13:00))
.parameters.append param
set param = .createparameter("@ToTime", adDBTimeStamp, _
adParamInput, 0, cdate(14:00))
.parameters.append param
set param = .createparameter("@RoomID", adInteger, _
adParamInput, 0, 5)
.parameters.append param
.execute ,,adexecutenorecords

newid= .Parameters("@BookingID").value

end with
HTH,
Bob Barrows
PS. if you wish to persist with the inefficient recordset method, then you
are going to need to show us your code. We can't help you in a vacuum.

--
Microsoft MVP - ASP/ASP.NET
Please reply to the newsgroup. This email account is my spam trap so I
don't check it very often. If you must reply off-line, then remove the
"NO SPAM"
Jan 15 '06 #2
Try the suggestions here. http://www.aspfaq.com/show.asp?id=2174

Ray at home
Jan 16 '06 #3
Hi Bob,

Thanks for your excellent posting....I'm currently looking into Stored
Procedures and utilising them in my web application.

I've got a further couple of questions if you don't mind!

Firstly, the web application I'm building is for an estate agents. Using
your example, I am trying to update a table with information about a
property. The table has lot's of fields and I've come up with this
stored procedure to update it:

CREATE PROCEDURE bookings_INS
(
@property_id int output,
@user_id int,
@property_address1 varchar(100),
@property_address2 varchar(100),
@property_address3 varchar(100),
@property_town varchar(100),
@property_county varchar(100),
@county_index int,
@property_postcode varchar(8),
@price int,
@property_type varchar(50),
@property_type_index int,
@tenure varchar(50),
@tenure_index int,
@property_description varchar(700),
@number_receptionrooms int,
@number_bedrooms int,
@number_bathrooms int,
@main_image varchar(100),
@entered_date datetime
)
AS
BEGIN
INSERT INTO hk_property (user_id, property_address1, property_address2,
property_address3, property_town, property_county, county_index,
property_postcode, price, property_type, property_type_index, tenure,
tenure_index, property_description, number_receptionrooms,
number_bedrooms, number_bathrooms, main_image, entered_date)
VALUES (@user_id, @property_address1, @property_address2,
@property_address3, @property_town, @property_county, @county_index,
@property_postcode, @price, @property_type, @property_type_index,
@tenure, @tenure_index, @property_description, @number_receptionrooms,
@number_bedrooms, @number_bathrooms, @main_image, @entered_date)
SET @property_id = SCOPE_IDENTITY()
END

Firstly, is this SP updating too many tables or can it cope with all of
these fields?

Secondly, @entered_date is a datetime data type.

Using the objrs.addnew method before, I could set this value using
objrs("entered_date") = Now() but I don't know how to use Now() to get
the current date and time in the @entered_date field in the new sp?

Many thanks again for your help Bob!
*** Sent via Developersdex http://www.developersdex.com ***
Jan 16 '06 #4
Robine wrote:
Hi Bob,

Thanks for your excellent posting....I'm currently looking into Stored
Procedures and utilising them in my web application.

I've got a further couple of questions if you don't mind!

Firstly, the web application I'm building is for an estate agents.
Using your example, I am trying to update a table with information
about a property. The table has lot's of fields and I've come up with
this stored procedure to update it:

CREATE PROCEDURE bookings_INS Nothing says it has to be called "bookings_INS" :-)
Firstly, is this SP updating too many tables or can it cope with all
of these fields?
no problem. Actually, this will be more efficient than sending the entire
SQL statement across the wire (which is what will happen when you use a
recordset to update the table.)
Secondly, @entered_date is a datetime data type.

Using the objrs.addnew method before, I could set this value using
objrs("entered_date") = Now() but I don't know how to use Now() to get
the current date and time in the @entered_date field in the new sp?


You don't need to even pass the date to the procedure.
In Transact-SQL (which is the "brand" of sql used by SQL Server), You can
use either the GETDATE() function or the CURRENT_TIMESTAMP function. In the
VALUES clause, just replace @entered_date with a call to either function:

@number_bedrooms, @number_bathrooms, @main_image, CURRENT_TIMESTAMP)

or

@number_bedrooms, @number_bathrooms, @main_image, GETDATE())

You can also set the default for the column to either function so you don't
even have to mention the column in your INSERT statements.

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.
Jan 16 '06 #5
Hi Bob,

I've written my first stored procedure now, tested it using Query
Analyser as you suggested and have now implemented the ASP code into my
application after downloading your Stored Procedure Generator code
(which is very handy by the way!) and it's working which is excellent -
my first stored procedure :-)

I'm becoming a convert to them now after being a little scared of them
first of all as I didn't understand them. The next one I'll be writing
will be an update one and then a delete one....I think I know what to
do......

Thanks very much again for your help and your excellent explanations and
advice......

*** Sent via Developersdex http://www.developersdex.com ***
Jan 18 '06 #6
Robine wrote:
Hi Bob,

I've written my first stored procedure now, tested it using Query
Analyser as you suggested and have now implemented the ASP code into
my application after downloading your Stored Procedure Generator code
(which is very handy by the way!) and it's working which is excellent
- my first stored procedure :-)

I'm becoming a convert to them now after being a little scared of them
first of all as I didn't understand them. The next one I'll be writing
will be an update one and then a delete one....I think I know what to
do......

Thanks very much again for your help and your excellent explanations
and advice......


Excellent.
We'll be here if you need any more help.

Bob Barrows
PS. You can modify that procedure to handle both inserts and updates:

CREATE PROCEDURE bookings_INSUPD
(
@BookingID int=0 output, --assign default to parm
@FromTime datetime,
@ToTime datetime,
@RoomID int
)
AS
BEGIN
IF @BookingID = 0
BEGIN
INSERT INTO dbo.bookings ( FromTime, ToTime, RoomID)
VALUES (@FromTime, @ToTime,@RoomID)
SET @BookingID = SCOPE_IDENTITY()
END
ELSE
BEGIN
UPDATE dbo.bookings
SET FromTime= @FromTime,
ToTime= @ToTime,
RoomID= @RoomID
WHERE BookingID = @BookingID
END
END

This will allow you to use a single function in your vbscript code to handle
both inserts and updates (you want to use adParmInputOutput for the
@BookingID parameter)

function InsUpdBookings (BookingID, FromTime, ToTime, RoomID)
'run the procedure, then
InsUpdBookings = newid
end function

The code that calls this function will know whether or not 0 was supplied
for BookingID and will handle the result accordingly.

--
Microsoft MVP - ASP/ASP.NET
Please reply to the newsgroup. This email account is my spam trap so I
don't check it very often. If you must reply off-line, then remove the
"NO SPAM"
Jan 18 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Hennie de Nooijer | last post by:
Hi, This is a diffcult issue to explain. I hope to make my problem clear to you. SITUATION I'm building A SLA Query for a customer. This customer has an awkward way to determine the SLA results...
5
by: David C. Barber | last post by:
I'm trying to determine which user has locked a given record from VB6. I know I can use sp_lock and sp_who, and match up the data to determine which users have locked records in my database,...
4
by: Phillip J. Allen | last post by:
Hi all, I have a table with an “autonumber” primary key field that also acts as a foreign key in 2 other tables. I would like to programmatically add a new record to the first table and the...
5
by: MLH | last post by:
Anyone remember how to determine a particular record's record number (Access 2.0 table question)?
6
by: Opie | last post by:
What would be a more efficient way for me to determine if a record in an SQL DB table exists? Right now, I have a try/catch like this: try {...
1
by: chaticathe | last post by:
I am trying to determine the record number of a record in Oracle Forms so I can navigate to that record. I am using the code below but it only gives me the record number of the record I am currently...
10
by: MLH | last post by:
Suppose, in a multi-user environment, you have append query SQL in a VBA procedure that looks like INSERT INTO MyTable... and the next line reads MyVar=DMax("","MyTable... You can never be...
1
by: mark_aok | last post by:
Hi all, I have a situation where I need to determine a specific table's primary key, and then output it. I have tried the Database Object, and the Record Object, but I've had no luck. ...
3
by: mmckinnon | last post by:
Hi All, This is really basic but I'm having trouble finding a straight forward way to do this. I have an Access application where the for is in spreadsheet mode. When a user leaves a control...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
muto222
php
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.