[AccessD] Kindof OT: ADO problem in VB

Drew Wutka DWUTKA at marlow.com
Wed Feb 12 15:07:00 CST 2003


What version of Oracle?

Drew

-----Original Message-----
From: Seth Galitzer [mailto:sgsax at ksu.edu]
Sent: Wednesday, February 12, 2003 10:50 AM
To: accessd
Subject: [AccessD] Kindof OT: ADO problem in VB


Hi folks,

I'm asking here because I'm hoping somebody can help me out with this
problem.

I wrote this little VB app that collects temperature data in our
greenhouses and then posts that data to an external server (using ADO)
over the network.  The app runs on three PCs and posts data every 15
minutes.  The database server is Oracle.  I've got the Oracle drivers
installed on all PCs.

So here's the problem: the app runs great... for about three days, at
which point it is unable to connect to the Oracle server (returns
"Unknown Error" from the Oracle software layer).  Once this happens, it
is unable to reconnect to the server until I stop and restart the app.

I do not keep the ADO connection open for the duration of the app run. 
I create a new connection each time it posts data.  If it is unable to
connect to the server every once in a while, that's fine, so long as it
can connect on the next cycle.  The problem is that it does not pick up
on the nxt cycle, or the next, or the next...  It will only connect
again after I have closed the app and restarted it.

So my question is this: where is this breaking down?  Is it a problem
with my code, or VB, or the ADO layer, or the Oracle driver layer?  I'm
pretty sure it's not my code (I'll include a copy of the relevant
function at the bottom) since it really doesn't do anything
extraordinary.  I don't know enough about ADO to be able to blame it
(this was my first real try at using ADO).  I do know that the Oracle
software layer is pain in the arse to install and is big, fat, and
heavy, but don't know where to start poking to evaluate it.  Could this
be a limitation of th VB engine and do I just need to rewrite it in C++?

Any suggestions would be welcome.

Seth

'-----Begin code snippet-----
' Watch for word wrap, this is copied and pasted right 
'    out of the code window
' The error is reported as ocurring on line 31 below

' Constants for trapping Oracle errors
Public Const conORA04031 = &H80004005
Public Const conORA04031B = -2147217900

Public Function basPostData(cBoard As clsBoard)
    Dim strConnect As String
    Dim conn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim lngSensorID As Long
    Dim dteTimeStamp As Date
    Dim intI As Integer
    Dim strSQL As String
    Dim strError As String
    Dim lngError As Long

21 On Error GoTo Err_basPostData

    
24     dteTimeStamp = Now()
25     Set conn = New ADODB.Connection
26     Set rst = New ADODB.Recordset

    ' Assemble connection string using system settings
29     conn.ConnectionString = "Provider=" & conProviderString & ";Data
Source=" & DBServer(False) & _
                            ";User ID=" & DBUser(False) & ";Password=" &
DBPassword(False) & ";"
31     conn.Open             'error reported on this line

34     For intI = 0 To cBoard.NumSensors
        ' First need to get sensor ID from database for insertion later
36         rst.Open "SELECT SensorID FROM tbl_Sensors WHERE ComputerID =
" & ComputerID(False) & _
                 " AND BoardNumber = " & cBoard.BoardNum & _
                 " AND ChannelNumber = " & intI + 1, conn           '
1-based index in data table
39         rst.MoveFirst                   'should only get one row back
in the recordset
40         lngSensorID = rst("SensorID")   'store value for later
        ' Insert new row into sensor_data table in database with data
for this channel
42         conn.BeginTrans
43         strSQL = "INSERT INTO tbl_Sensors_Data (datetime, sensorid,
data) VALUES (TO_DATE('" & Format(dteTimeStamp, "yy-mmm-dd:hh:mm") & "',
'YY-MON-DD:HH24:MI'), " & lngSensorID & ", '" & cBoard.sData(intI) &
"')"
44         conn.Execute strSQL
45         conn.CommitTrans
46         rst.Close       'need to close recordset before opening the
next one
47     Next intI

Exit_basPostData:
    ' Clean-up local object variables
51     On Error Resume Next
52     rst.Close
53     conn.Close

55     Set rst = Nothing
56     Set conn = Nothing
Exit Function
Err_basPostData:
59     strError = Err.Description
60     lngError = Err.Number
61     If boolLog Then basLogIt Hex(Err.Number) & ": " &
Err.Description, "basPostData", Erl
62     Select Case lngError
        Case 0
64          Resume Next
        Case conORA04031, conORA04031B
66          Resume Exit_basPostData
        Case Else
68          MsgBox lngError & ": " & strError & vbCrLf & "in function
basPostData", , "Unhandled Error"
70          Resume Exit_basPostData
71     End Select
72     Resume 0

End Function

'-----End code snippet-----


-- 
Seth Galitzer			sgsax at ksu.edu
Computing Specialist		http://puma.agron.ksu.edu/~sgsax
Dept. of Plant Pathology
Kansas State University

_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com



More information about the AccessD mailing list