|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Ключевое поле заполняется 0 (нулём)
Добрый день.
Создаю таблицу в базе данных MS JET4.0. Несколько полей и первое ключевое: ADOQuery1.SQL.Text:=('CREATE TABLE `sadka`(`Код` counter(1,1) primary key, ......... Таким образом всё создаётся и при работе в DBGrid база данных заполняется. Клавиша "вниз" создаёт новую запись, её заполняю, при этом ключевое поле остаётся пустым!!! естественно туда я не могу ничего написать сам - система не даёт(это же ключ), но при переходе на ранее созданную запись и попытке редактировать вылетает ошибка ".. нет строки для обновления..." - БРЕД!! Пробывал записи делать через DBNavigator - тоже самое, ключ пишется 0. Но, если закрыть базу и открыть заново, тут же, то все ключи посчитаны по порядку. Пробывал создавать ещё 2_я способами, но эффект тот же. На картинке фото глюка. Немного подлечил так - при перемещении по базе, ловлю клики и перегружаю базу, но почему то не всегда срабатывает, иногда проверка ключа раньше проходит нежели мой перехват. |
#2
|
|||
|
|||
тип поля укажи identity (если правильно помню).
|
#3
|
|||
|
|||
Так это поле после "перезагрузки" базы пересчитывается правильно, и при удалении записи больше не повторяется её номер - тоесть ключ в полной мере работает...
НО попробую добавить. Спасибо. |
#4
|
|||
|
|||
Попробывал добавить IDENTITY, ничего не изменилось, пробывал менять очерёдность - ничего не меняется.
Замучался уже, при создании новой записи и перепрыге со строки на строку - нет строки для обновления... конечно, если заполнять всё равномерно без прыжков по записям где отпечатался 0 в ключевом поле то всё проходит гладко... но мало ли какие случаии возникнут... и объясни юзеру что и как... |
#5
|
||||
|
||||
Попробуйте немного по другому описать ключ:
Код:
create table Test (id counter(1,1) primary key, ... Код:
DataSource1.DataSet := nil; ADOQuery1.SQL.Text := 'create table Test (id counter(1,1) primary key, Context char(50))'; ADOQuery1.ExecSQL; ADOQuery1.SQL.Text := 'select * from Test'; ADOQuery1.Open; DataSource1.DataSet := ADOQuery1; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Добрый день.
Не вижу принципиальной разницы: моё: ADOQuery1.SQL.Text:=('CREATE TABLE '+protname+' (`№п/п` counter(1,1) PRIMARY KEY UNIQUE , Ваше: ADOQuery1.SQL.Text := 'create table Test (id counter(1,1) primary key, Context char(50))'; Что-то не то, видимо не включено авто обновление/заполнение или ещё что-то, типо авто пресчёта... раз он срабатывает после пере-открытия базы.... Во вложении проект. При создании базы требует файл шаблон (пустую базу ACCESS 2003) куда и будут писаться таблицы. Прикрепил бы, но не лезет сюда. Хотя разбил RARом на 3 части и залилось сюда. |
#7
|
||||
|
||||
Что-то мой Акцес даже не хочет открывать эту базу - настолько старый формат. Не могу посмотреть даже структуру таблиц нормально.
ПС: Че то я тоже не пойму, почему у вас вместо нового значения, все время 0 лепится. Помнится, было у меня что-то такое на заре работы с Акцесом, но вот в чем прикол пока не вспомню. Попробую я к вашей базе другим приложением подключится. Есть у меня подозрение, что у вас примари индекс почему-то не подхватывается. ППС: А попробуйте изменить значение CursorLocation на clUseServer. У меня в тесте стало нормально работать. Но это какой-то странный косяк, обычно этого не требуется. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 08.02.2016 в 21:42. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
-=#PupaJr#=- (15.02.2016)
|