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