I cannot seem to get this IF
statement to step into the Call Expiry
part it goes to the else therefore I can only assume there is something wrong with my condition.
I’m trying to fetch the contract status from an access table Investment Data WHERE
Customer Number is the Customer Number on the current spreadsheet. (There is only 1 customer number on spreadsheet).
Is there something wrong with my logic or does the SELECT
statement return something that is not a string?
Any Help is appreciated, thanks.
If ("SELECT [Contract Status] FROM [Investment Data] WHERE [Customer Number] =(" & "SELECT [Customer Number] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")") = "Current" Then
expiryPrompt = MsgBox("A previous entry from the same contract is currently active, would you like to expire current active contract?", vbYesNo, "Confirmation")
Call Expiry
Exit Sub
Else
MsgBox ("Entry has been entered into the database.")
cN.Execute ssql
Exit Sub
End If
Edit 1: In terms of trying to store the SELECT
I have the following
Dim cdb As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim temp As String
strSQL = "SELECT [Contract Status] FROM [Investment Data] WHERE [Customer Number] =(" & _
"SELECT [Customer Number] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")"
Set cdb = DAO.OpenDatabase(dbPath)
Set rst = cdb.OpenRecordset(strSQL)
temp = rst
I know the the return value of a Recordset is not a String
I just don’t know how I would store it in a variable.
Advertisement
Answer
You will need to put the value into something so as you can compare it in the if statement. If I understand what you want then give this a try. I am also assuming you will get one result in the SQL statement.
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
Set rs.ActiveConnection = conn
strSQL = "SELECT [Contract Status] FROM [Investment Data] WHERE
[Customer Number] =(" & "SELECT [Customer Number] FROM
[Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh & ")"
rs.Open strSQL
If Not rs.EOF Then xx = rs.GetRows Else 'do you code for not getting result
rs.Close
If xx(0, 0) = "Current" Then
expiryPrompt = MsgBox("A previous entry from the same contract is currently active, would you like to expire current active contract?", vbYesNo, "Confirmation")
Call Expiry
Exit Sub
Else
MsgBox ("Entry has been entered into the database.")
cN.Execute ssql
Exit Sub
End If
I also have not amended your code inside the if statement to follow my way I accessing the database.
To answer your question in the coments. The result will be transposed into the variable. so accessing more than one row or column , you will need to do something like this.
For getting the rows,
For i = 0 To 9
Cells(i + 1, 1) = x(0, i)
Next i
For getting the columns,
For i = 0 To 9
Cells(1, i + 1) = x(i, 0)
Next i