|
|
Регистрация | << Правила форума >> | 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)
|
#8
|
|||
|
|||
База пустая, но открываться должна.. могу сбросить с 1-2-3-4 таблицами, у меня 2010 офис видит и пустую и с таблицами, но таблицы не даёт править в режиме конструктора...
Предложение Ваше попробую... |
#9
|
|||
|
|||
Ваш совет помог, спасибо.
Честно говоря так и не понял зачем эта настройка с "курсором"... видимо в сервере происходят прямые изменения или у клиента а потом только на сервере. Так если у клиента - кося - нули, если прямо на сервере то нормально. |
#10
|
||||
|
||||
Если курсор локальный, то при запросе забирается весь набор данных, если же серверный, то считывается только часть данных. Для малых баз данных это несущественно, но если объемы данных переваливают за сотни тысяч, это существенно ускоряет получение результата.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |