cmd = New OleDbCommand("SELECT [sub_pay_item_quantity].[quantity], [sub_pay_item_unit_rate].[rate] FROM [sub_pay_item_quantity], [sub_pay_item_unit_rate] WHERE [sub_pay_item_quantity].[sub item]=[sub_pay_item_unit_rate].[sub item] AND [sub_pay_item_quantity].[sub item]='" & subItem & "' AND [sub_pay_item_quantity].[bridge type]='" & bridgeType & "' AND [sub_pay_item_quantity].[span]='" & span & "'", conn)
The problem obviously is in the way you encapsulate table and column names between brackets ; as you can see, the right syntax is [table].[column], not [table.column] (at least with SQL Server, but you did not tag which database system you are using).
Note: constructing a SQL statement by concatenating text fields like you do is a very bad habit, because this leaves your code opened for SQL injection attacks. You should use parameterized queries instead (see corrected example prepared for parameterized query):
cmd = New OleDbCommand("SELECT [sub_pay_item_quantity].[quantity], [sub_pay_item_unit_rate].[rate] FROM [sub_pay_item_quantity], [sub_pay_item_unit_rate] WHERE [sub_pay_item_quantity].[sub item]=[sub_pay_item_unit_rate].[sub item] AND [sub_pay_item_quantity].[sub item]=@subItem AND [sub_pay_item_quantity].[bridge type]=@bridgeType AND [sub_pay_item_quantity].[span]=@span", conn)