Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2016, 16:17
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию Ключевое поле заполняется 0 (нулём)

Добрый день.
Создаю таблицу в базе данных MS JET4.0.
Несколько полей и первое ключевое:
ADOQuery1.SQL.Text:=('CREATE TABLE `sadka`(`Код` counter(1,1) primary key, .........
Таким образом всё создаётся и при работе в DBGrid база данных заполняется. Клавиша "вниз" создаёт новую запись, её заполняю, при этом ключевое поле остаётся пустым!!! естественно туда я не могу ничего написать сам - система не даёт(это же ключ), но при переходе на ранее созданную запись и попытке редактировать вылетает ошибка ".. нет строки для обновления..." - БРЕД!!
Пробывал записи делать через DBNavigator - тоже самое, ключ пишется 0.
Но, если закрыть базу и открыть заново, тут же, то все ключи посчитаны по порядку.
Пробывал создавать ещё 2_я способами, но эффект тот же.
На картинке фото глюка. Немного подлечил так - при перемещении по базе, ловлю клики и перегружаю базу, но почему то не всегда срабатывает, иногда проверка ключа раньше проходит нежели мой перехват.
Изображения
Тип файла: gif base_key.gif (31.0 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 02.02.2016, 18:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

тип поля укажи identity (если правильно помню).
Ответить с цитированием
  #3  
Старый 04.02.2016, 16:53
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Так это поле после "перезагрузки" базы пересчитывается правильно, и при удалении записи больше не повторяется её номер - тоесть ключ в полной мере работает...
НО попробую добавить. Спасибо.
Ответить с цитированием
  #4  
Старый 07.02.2016, 08:31
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Попробывал добавить IDENTITY, ничего не изменилось, пробывал менять очерёдность - ничего не меняется.

Замучался уже, при создании новой записи и перепрыге со строки на строку - нет строки для обновления... конечно, если заполнять всё равномерно без прыжков по записям где отпечатался 0 в ключевом поле то всё проходит гладко... но мало ли какие случаии возникнут... и объясни юзеру что и как...
Изображения
Тип файла: jpg base_key_null.jpg (92.9 Кбайт, 2 просмотров)
Ответить с цитированием
  #5  
Старый 07.02.2016, 13:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Попробуйте немного по другому описать ключ:
Код:
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  
Старый 08.02.2016, 14:40
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Добрый день.
Не вижу принципиальной разницы:
моё:
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 части и залилось сюда.
Вложения
Тип файла: rar ПО_Автоклав_ц219.rar (75.9 Кбайт, 7 просмотров)
Тип файла: rar autoklavmdb.part1.rar (1.39 Мбайт, 4 просмотров)
Тип файла: rar autoklavmdb.part2.rar (1.39 Мбайт, 4 просмотров)
Тип файла: rar autoklavmdb.part3.rar (413.6 Кбайт, 4 просмотров)
Ответить с цитированием
  #7  
Старый 08.02.2016, 21:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Что-то мой Акцес даже не хочет открывать эту базу - настолько старый формат. Не могу посмотреть даже структуру таблиц нормально.
ПС: Че то я тоже не пойму, почему у вас вместо нового значения, все время 0 лепится. Помнится, было у меня что-то такое на заре работы с Акцесом, но вот в чем прикол пока не вспомню. Попробую я к вашей базе другим приложением подключится. Есть у меня подозрение, что у вас примари индекс почему-то не подхватывается.
ППС: А попробуйте изменить значение CursorLocation на clUseServer. У меня в тесте стало нормально работать. Но это какой-то странный косяк, обычно этого не требуется.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 08.02.2016 в 21:42.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
-=#PupaJr#=- (15.02.2016)
  #8  
Старый 10.02.2016, 17:46
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

База пустая, но открываться должна.. могу сбросить с 1-2-3-4 таблицами, у меня 2010 офис видит и пустую и с таблицами, но таблицы не даёт править в режиме конструктора...

Предложение Ваше попробую...
Ответить с цитированием
  #9  
Старый 11.02.2016, 17:54
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Ваш совет помог, спасибо.
Честно говоря так и не понял зачем эта настройка с "курсором"... видимо в сервере происходят прямые изменения или у клиента а потом только на сервере. Так если у клиента - кося - нули, если прямо на сервере то нормально.
Ответить с цитированием
  #10  
Старый 11.02.2016, 18:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если курсор локальный, то при запросе забирается весь набор данных, если же серверный, то считывается только часть данных. Для малых баз данных это несущественно, но если объемы данных переваливают за сотни тысяч, это существенно ускоряет получение результата.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter