![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в SQL INSERT INTO указать правильное значение для счетчика? [D7, ACCEESS]
DVM © (2006-11-02 12:13:00)Есть таблица MS Access в которой есть поле ID типа счетчик.
Добавляю записи c пом TADOQuery:
ADOQuery.SQL.Add('INSERT INTO EventLog');
ADOQuerySQL.Add('VALUES (100, 1, 1, 1, 0)');
В данном запросе все работает, первое значение 100 это и есть ID.
Но как мне построить запрос, чтобы счетчик автоматически приращался и был уникальным?
Stanislav (2006-11-02 12:58:00) [1]DVM © (02.11.06 12:45) [13]
да.
DVM (2006-11-02 12:58:00) [2]
> sniknik © (02.11.06 12:57) [14]
Спасибо за совет, буду знать.
sniknik (2006-11-02 12:57:00) [3]да. если бы ты его использовал то изначально был бы лишен возможности сделать ADOCommand. SQL.Add, что иногда приводит(вернее приводило) к глюкам дельфи ([8]), а сделал бы правильно, по той логике которую в ADO закладывали его разработчики... и т.д.
DVM (2006-11-02 12:45:00) [4]
> sniknik © (02.11.06 12:41) [11]
> используйте Command
Имеется ввиду TADOCommand?
DVM (2006-11-02 12:43:00) [5]
> ЮЮ © (02.11.06 12:38) [10]
Спасибо, помогло.
sniknik (2006-11-02 12:41:00) [6]> Сколько раз писать: не делайте Add, делайте SQL.Text :=
сколько раз писать не используйте Query в ADO, используйте Command/Dataset
это во всех случаях логичнее для ADO чем притянутые за уши конструкции из BDE.
> Да вроде нет. Все остальное же с ним работает и выборка и т.д.
да точно да. ну работает, ну есть в движке "оптимизатор" подставляет/конвертирует нужное там где может/однозначно... ну и что? почитай справку, раздел зарезервированные слова.
ЮЮ (2006-11-02 12:38:00) [7]В самом Access тоже ругается. Причем на DateTime, возьми его в скобки:
INSERT INTO EventLog ( EventType, ZoneID, SensorID, [DateTime] )
VALUES (1, 1, 1, 0);
DVM (2006-11-02 12:35:00) [8]
> Desdechado © (02.11.06 12:31) [8]
Исправил:
ADOQuery.SQL.Text := 'INSERT INTO EventLog (EventType, ZoneID, SensorID, DateTime) VALUES (1, 1, 1, 0)';
Все равно "ошибка в синтаксисе INSERT INTO"
Что за ерунда, никак не пойму.
EventType, ZoneID, SensorID - целые числа, DateTime - дата/время.
Первое поле ID - счетчик.
Desdechado (2006-11-02 12:31:00) [9]Сколько раз писать: не делайте Add, делайте SQL.Text :=
Это в некоторых версиях позволяет избежать глюков Дельфи, да и во всех позволяет не забывать о Clear.
DVM (2006-11-02 12:30:00) [10]
> DateTime разве не зарезервированное слово?
Да вроде нет. Все остальное же с ним работает и выборка и т.д.
> Да и значение како-то некузявое для лога
Я для простоты написал 0. Оно работает в первом моем посте. Дело вряд ли в этом.
ЮЮ (2006-11-02 12:28:00) [11]DateTime разве не зарезервированное слово?
Да и значение како-то некузявое для лога
DVM (2006-11-02 12:21:00) [12]Написал:
> ADOQuery.SQL.Add('INSERT INTO EventLog (EventType,ZoneID,
> SensorID,DateTime)');
> ADOQuery.SQL.Add('VALUES (1, 1, 1, 0)');
Пишет ошибка в синтаксисе INSERT INTO
ЮЮ (2006-11-02 12:17:00) [13]INSERT INTO EventLog(<Второе поле>,<3 поле>, <4 поле>, <5 поле
VALUES (1, 1, 1, 0)
DVM (2006-11-02 12:16:00) [14]
> Stanislav © (02.11.06 12:14) [1]
Тогда пишет "Не совпадает число значений ..."
Stanislav (2006-11-02 12:15:00) [15]А pole1 это счетчик.
ADOQuery.SQL.Add('INSERT INTO EventLog (Pole2,pole3,pole4,pole5,pole6)');
ADOQuerySQL.Add('VALUES (100, 1, 1, 1, 0)');
Stanislav (2006-11-02 12:14:00) [16]а ты перечисли все поля кроме счетчика