SQLite Delphi выдает неверное исключение - PullRequest
1 голос
/ 29 апреля 2010

Project CompetitionServer.exe вызвал исключение класса ESQLiteException с сообщением «Ошибка выполнения SQL.
Ошибка [1]: ошибка SQL или отсутствует база данных.
"INSERT INTO MatchesTable (MatchesID, RoundID, AkaFirstName, AoFirstName) VALUES (1,2, p, o)": такого столбца нет: p ' Процесс остановлен. Для продолжения используйте Step или Run.

Да, p - это НЕ столбец, это данные, которые я пытаюсь вставить. Как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

В SQL строковые константы, которые являются данными, должны быть заключены в кавычки. В противном случае строка интерпретируется как ключевое слово, имя таблицы или имя столбца, что и происходит здесь. Используйте 'p' вместо простого p.

2 голосов
/ 29 апреля 2010

Вы должны использовать параметры SQL. Стандартный подход Delphi к этому:

Query1.SQL.Text := 'INSERT INTO MatchesTable(MatchesID,RoundID,AkaFirstName,AoFirstName)VALUES(1,2,:p,:o)';
Query1.Params[0].Value := ...;
Query1.Params[1].Value := ...;
Query1.ExecSQL;

Но детали могут зависеть от компонентов доступа к данным, которые вы используете.

2 голосов
/ 29 апреля 2010

Вы значение 'p' является константой, поэтому вам нужно поместить его в кавычки. Таким образом, утверждение должно быть

INSERT INTO MatchesTable(MatchesID,RoundID,AkaFirstName,AoFirstName)VALUES(1,2,'p','o')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...