Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в 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]

а ты перечисли все поля кроме счетчика


Наверх

Титульная страница Поиск, карта сайта Написать письмо