Jeanine Scott
jscott at mchsi.com
Mon Jun 9 12:14:46 CDT 2003
Here's the code I am using - I open an empty recordset to perform the add.
Is there another better way to do it?
stradd = "Select * From tblInstallPeople where 1=0"
Set AddRS = db.OpenRecordset(stradd)
AddRS.AddNew
AddRS("PeopleID") = Me![cbpeople].Value
AddRS("InstallID") = Me![txtInstallID].Value
AddRS("EffDt") = Date
AddRS("EnteredBy") = varUser
AddRS.Update
AddRS.Close
SET ADDRS = nothing
Also, your locking code looks great. We have something similar whenever we
do inserts - would you be able to look at the code below and tell me where
yours' is better? I think it is - I just don't know enough about it to tell
why or how and I don't want to change what we are doing if I'm not sure it
will provide additional functionality.
This function is called whenever we run an action query. Thank you so much!
Public Function GetRSWrite(ByVal sql As String)
'***************************************************************************
**************************************
'CREATED BY:
'CREATED DATE: 09/10/01
'PURPOSE: gets and keeps db name, used for updateable recordsets such as
deletes, updates, etc. Rollsback on error
'---------------------------------------------------------------------------
--------------------------------------
'MODIFIED BY:
'MODIFIED DATE: 10/28/02
'MODIFICATION DESC: Added error numbers 3260 and 3186
'---------------------------------------------------------------------------
--------------------------------------
'MODIFIED BY:
'MODIFIED DATE: 5-28-03
'MODIFICATION DESC:
'***************************************************************************
**************************************
On Error Resume Next
Dim rs As Recordset
Dim i As Integer
i = 0
If gdb Is Nothing Then
Set gdb = DBEngine(0)(0)
End If
gdb.Execute sql, dbFailOnError
GetRSWrite = gdb.RecordsAffected
Do Until Err = 0 Or i = 10
'MsgBox Err
'MsgBox Err.Description
i = i + 1
Select Case Err
Case 3051, 3075, 3186, 3187, 3197, 3218, 3260, 3264 'Error
multi-user issues
Err = 0 'Reset Error and try again
gdb.Execute sql, dbFailOnError
Case Else
GoTo errorhandler
Exit Do
End Select
Loop
If i = 10 Then
GoTo errorhandler
End If
Exit Function
errorhandler:
Dim strErrorDescription As String
strErrorDescription = Err.Description & " SQL=" & sql
gstrSource = "basCommon"
gstrActiveControl = "GetRSWrite"
Call ErrorTrapping(strErrorDescription, Err.Number, gstrSource,
gstrActiveControl)
End Function
Jeanine Scott
Sr. Systems Analyst
Spindustry Systems
515-669-2074
jscott at spindustry.com
CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is
for the sole use of the intended recipient(s) and may contain confidential
information. Any unauthorized review, use, disclosure, or distribution is
prohibited. If you are not the intended recipient, please contact the sender
by reply e-mail and destroy all copies of the original message including any
attachments.
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Jim Dettman
Sent: Monday, June 09, 2003 11:51 AM
To: accessd at databaseadvisors.com
Subject: RE: [AccessD] Access97 and recordlocking
Jeanine,
You certainly don't need to even bother with generating an empty recordset
if all you want to do is add. I would suggest placing the add in a
transaction and adding appropriate error trapping. Below is an example of
some error trapping that makes 5 attempts to do an operation, then quits if
it still won't go.
HTH,
Jim Dettman
President,
Online Computer Services of WNY, Inc.
(315) 699-3443
jimdettman at earthlink.net
GetRecordKeyError:
'Table locked by another user?
If Err = CNT_ERR_RESERVED Or Err = CNT_ERR_COULDNT_UPDATE Or Err =
CNT_ERR_OTHER Then
intLockCount = intLockCount + 1
If intLockCount > 5 Then
GetRecordKey = Null
Resume GetRecordKeyExit
Else
DoEvents
DBEngine.Idle DB_FREELOCKS
lngWait = intLockCount ^ 2 * Int(Rnd * 20 + 5)
For lngX = 1 To lngWait
DoEvents
Next lngX
Resume
End If
Else
UnexpectedError ModuleName, Routine, Version, Err, Error$
GetRecordKey = Null
Resume GetRecordKeyExit
End If
'Error constants
Const CNT_ERR_RESERVED = 3000
Const CNT_ERR_COULDNT_UPDATE = 3260
Const CNT_ERR_OTHER = 3262
Const CNT_ERR_NO_CURRENT_ROW = 3021
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Jeanine Scott
Sent: Monday, June 09, 2003 12:40 PM
To: accessd at databaseadvisors.com
Subject: RE: [AccessD] Access97 and recordlocking
Yes, that's exactly what I need since I want to add a record to the table.
However, I seem to be getting a lot of recordlocking errors when attempting
to add the record to the table.
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Charlotte Foust
Sent: Monday, June 09, 2003 11:42 AM
To: accessd at databaseadvisors.com
Subject: RE: [AccessD] Access97 and recordlocking
That SQL will return an empty recordset. Is that what you intended?
Charlotte Foust
-----Original Message-----
From: Jeanine Scott [mailto:jscott at mchsi.com]
Sent: Monday, June 09, 2003 8:30 AM
To: accessd at databaseadvisors.com
Subject: [AccessD] Access97 and recordlocking
If I pull a recordset like this:
"Select * from tblTest where 1=0"
how does the recordlocking work?
I understand Access97's disadvantage of page locking rather than single
record locking; however, I'm having a lot of issues where users are
getting kicked out because of record locking errors but I can't see how
this above SQL cause the table to be locked.
I'm using a recordset pull rather than a direct SQL insert because I
have to insert several records to the same table at one time. I do not
want to do a separate db call for each of the records because the LAN
speed is just horrible between the FE and the BE.
Thanks!!
Jeanine
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Charlotte
Foust
Sent: Monday, June 09, 2003 11:28 AM
To: accessd at databaseadvisors.com
Subject: RE: [AccessD] Static Function Tutorial (was Like Operator
SQLSyntax)
It would be very unusual for me to want ALL the variables in a routine
to be static. That's why I never use static functions. I prefer to use
static variables in standard functions when I need a static value.
Charlotte Foust
-----Original Message-----
From: Gustav Brock [mailto:gustav at cactus.dk]
Sent: Sunday, June 08, 2003 11:34 PM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Static Function Tutorial (was Like Operator
SQLSyntax)
Hi Arthur
> .. By default all variables in a static function are static variables.
> You could declare a static variable in a non-static function, but I
> don't know why you would.
Well, to free you from resetting those variables which are not to be
used as static variables ...
/gustav
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com