views:

36

answers:

4

I get the following error when I try and execute the code down below. I have added the sql string I pass as well. What am I missing?

Error: Syntax error (missing operator) in query expression 'TOURID = 25e5eed3-ea84-4c30-a660-2c880253da60'.

sql: "DELETE * FROM TOURS WHERE TOURID = 25e5eed3-ea84-4c30-a660-2c880253da60;"

Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\_Development\Data\filename.accdb;Persist Security Info=False;"
    Dim DBConnection As New System.Data.OleDb.OleDbConnection(connectionString)
    Try
        DBConnection .Open()
        Dim cmd As New System.Data.OleDb.OleDbCommand(sql, DBConnection )
        Dim sqlAdapterTOURS As New System.Data.OleDb.OleDbDataAdapter(cmd)
        cmd.CommandType = CommandType.Text
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        DBConnection .Close()
    End Try
+4  A: 

You need to quote when working with GUIDS like this:

DELETE * 
FROM TOURS 
WHERE TOURID = '25e5eed3-ea84-4c30-a660-2c880253da60';
Nick Craver
+3  A: 

Your value should be surrounded by single quotes, like this:

DELETE * FROM TOURS WHERE TOURID = '25e5eed3-ea84-4c30-a660-2c880253da60';
rosscj2533
+1  A: 

Guess: your GUID-type entry should be quoted, maybe?:

DELETE FROM TOURS WHERE TOURID = '25e5eed3-ea84-4c30-a660-2c880253da60'
davek
+1  A: 

Access/Jet/ACE is not very GUID-friendly. Michael Kaplan wrote about this many years ago:

Replication and GUIDs, the Good, the Bad, and the Ugly

Depending on the context, you may need to use the VBA functions for working with GUIDs, i.e., StringFromGUID() and GUIDFromString(). I'm not sure exactly what you have to do in a SQL context, though. I do know you can't do a join between two GUID fields (you have to use implicit joins, i.e., using a WHERE clause instead).

David-W-Fenton