4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287

MS Access выдает ошибку при добавлении записи "Ключ уже существует"

27.07.2019, 20:39. Показов 5008. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сначала создаю таблицу запросом:

SQL
1
CREATE TABLE Settings (5OpenAPIKey1 VARCHAR(50),5SecretAPIKey1 VARCHAR(50));
Затем пытаюсь вставить в эту таблицу запись запросом:

SQL
1
INSERT INTO Settings (5OpenAPIKey1,5SecretAPIKey1 ) VALUES ('123456778900uiiopp' , '1234567890oiutrewq');
И оно выдает ошибку "Ключ уже существует"

Вопрос что ему от меня надо??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2019, 20:39
Ответы с готовыми решениями:

Выдает ошибку при добавлении записи
procedure TForm4.Button1Click(Sender: TObject); var chk: integer; begin chk:=STRTOINT(edit5.text); if (Edit1.Text = '') or...

При добавлении столбца в БД MS Access C# выдает ошибку
Прошу помочь , т.к. осталась неделя до конца практики, а задание нужно срочно сдать. Тема такая: написать программу для тестирования. Есть...

При добавлении записи в таблицу выдает ошибку
при добовлении записи в таблицу выдает ошибку

11
 Аватар для Пытливый
3763 / 2271 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
28.07.2019, 01:54
Ключевое поле он требует который вы не создали

Добавлено через 10 минут
CREATE TABLE Settings (ID AUTOINCREMENT primary key, 5OpenAPIKey1 VARCHAR(50),5SecretAPIKey1 VARCHAR(50));

Добавлено через 1 минуту
И кто вас надоумил давать имена полям начинающиеся с цифры? Никогда так не делайте.
0
4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287
28.07.2019, 03:58  [ТС]
Та же ошибка и даже если писать инсерт так:

SQL
1
INSERT INTO Settings (ID,OpenAPIKey1,SecretAPIKey1 ) VALUES (1,'123456778900uiiopp' , '1234567890oiutrewq');
Все равно та же самая ошибка...
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
29.07.2019, 07:51
прочтите хоть начало учебника по БД
ключ - уникальное значение, по которому мы однозначно можем идентифицировать запись
поэтому сервер не дает вставить вторую запись с тем же самым ключом
0
4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287
29.07.2019, 10:17  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
поэтому сервер не дает вставить вторую запись с тем же самым ключом
но проблема в том что он не дает вставить даже первую запись с таким ключем... Т.к. в таблице в итоге 0 записей...
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
29.07.2019, 11:35
тут на слово не принято верить авторам )
покажите код, где это происходит
случайно выяснится, что в наличии цикл, или вообще ошибка в другой строке выходит

Добавлено через 47 секунд
кроме того, из первого поста следует, что ключа у ЭТОЙ таблицы и вовсе нет
0
4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287
29.07.2019, 12:54  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
тут на слово не принято верить авторам )
покажите код, где это происходит
случайно выяснится, что в наличии цикл, или вообще ошибка в другой строке выходит
Добавлено через 47 секунд
кроме того, из первого поста следует, что ключа у ЭТОЙ таблицы и вовсе нет
Код написан не совсем на делфи, поэтому сразу его не приводил...но с другими базами он работает
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Procedure S(textIn:string); //добавляет в memo1 на форме надпись переданную в параметре textIn
begin
   Memo1.Lines.add(textIn);//добавляем текст                                     
   Application.ProcessMessages; //даем мемо прорисоваться                                                    
end;
 
Function CreateSettingsBD:Boolean;
var
   PathToRuntimest:string;
   PathToBase:string;
   SettingsDB:TDataBases;
begin
   PathToRuntimest := PathToRuntime;
   PathToBase := PathToRuntimest +'\DataBase\';
                               
   SettingsDB := TDataBases.Create(self);//создаем экземпляр класса
   SettingsDB.ConnectToBase(PathToBase + 'DBFile46.mdb');
  
        
   if not SettingsDB.TabExists('Settings') then //проверяем есть ли в файле таблица
   begin      //если ее нет то добавляем ее
      SettingsDB.QueryText := 'CREATE TABLE Settings (ID AUTOINCREMENT primary key, OpenAPIKey1 VARCHAR(50), SecretAPIKey1 VARCHAR(50));';
      SettingsDB.SendCommand;
      s('Создали таблицу Settings...');                  
  
   end;
   result := true;
end;
Добавлено через 8 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Procedure S(textIn:string); //добавляет в memo1 на форме надпись переданную в параметре textIn
begin
   Memo1.Lines.add(textIn);//добавляем текст                                     
   Application.ProcessMessages; //даем мемо прорисоваться                                                    
end;
 
Function CreateSettingsBD:Boolean;
var
   PathToRuntimest:string;
   PathToBase:string;
   SettingsDB:TDataBases;
begin
   PathToRuntimest := PathToRuntime;
   PathToBase := PathToRuntimest +'\DataBase\';
                               
   SettingsDB := TDataBases.Create(self);//создаем экземпляр класса
   SettingsDB.ConnectToBase(PathToBase + 'DBFile46.mdb');
  
        
   if not SettingsDB.TabExists('Settings') then //проверяем есть ли в файле таблица
   begin      //если ее нет то добавляем ее
      SettingsDB.QueryText := 'CREATE TABLE Settings (ID AUTOINCREMENT primary key, OpenAPIKey1 VARCHAR(50), SecretAPIKey1 VARCHAR(50));';
      SettingsDB.SendCommand;
      s('Создали таблицу Settings...');                  
  
   end;
   result := true;
end;
 
Function SaveSettingsBD(OpenKey,SecretKey:string):Boolean;
begin
     if Length(OpenKey)> 50 then
     begin                                       
        showMessage('Открытый ключ длинной более 50 символов и не может быт сохранен в базу настроек!!!');
        result := false;
        exit;                    
     end;                           
     if Length(SecretKey)> 50 then
     begin                                       
        showMessage('Секретный ключ длинной более 50 символов и не может быт сохранен в базу настроек!!!');
        result := false;
        exit;                    
     end;
     SettingsDB.QueryText := 'Select * From Settings';
     SettingsDB.MakeQuery;
          
   if SettingsDB.First then
   begin
      SettingsDB.QueryText := 'UPDATE Settings set ID = 1,OpenAPIKey1 = ' + QuotedStr(OpenKey) +',SecretAPIKey1 = '+ QuotedStr(SecretKey) +';'
      showMessage('Мы тут');                                    
   end                        
   else
   begin
      SettingsDB.QueryText := 'INSERT INTO Settings (ID,OpenAPIKey1,SecretAPIKey1 ) VALUES (20,' + QuotedStr(OpenKey) +
    ' , ' + QuotedStr(SecretKey)+ ');';
      //showMessage('Мы в инсерте '+ QuotedStr(OpenKey) + ' SecretKey: '+QuotedStr(SecretKey));
      S(SettingsDB.QueryText);  //мы заходим сюда в любом случае с любого раза, т.к. в базу ничего не добавляется....                                  
   end;                          
       
   DBOrders.SendCommand;  //вот тут мы получаем ошибку...
   result:= true;                                    
      
end;
Добавлено через 9 минут
а вот 2 процедуры которые создают "рабочие" таблицы в которые все замечательно вставляется и одна из них вообще без ключа....

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function CreateOrdersDBForSum:boolean;    
begin
   if not DBOrdersForSumm.TabExists('Orders') then //проверяем есть ли в файле таблица
   begin      //если ее нет то добавляем ее         
 
      DBOrdersForSumm.QueryText := 'CREATE TABLE Orders (order_id VARCHAR(20),type VARCHAR(20),created VARCHAR(20),pair VARCHAR(20),price numeric(24,8),quantity numeric(24,8),amount numeric(15,4),OpenOrderPrice numeric(15,4),Status VARCHAR(10),CreatedNormalDate VARCHAR(30));';
      DBOrdersForSumm.SendCommand;          
 
   end
   else       
       DBOrdersForSumm.ClearTable('Orders');  
  
   result := true;
 
end;          
 
Function CreateOrdersDB:boolean;
begin
   if not DBOrders.TabExists('Orders') then //проверяем есть ли в файле таблица
   begin      //если ее нет то добавляем ее         
      
      DBOrders.QueryText := 'CREATE TABLE Orders (order_id VARCHAR(20),type VARCHAR(20),created VARCHAR(20),pair VARCHAR(20),price numeric(24,8),quantity numeric(24,8),amount numeric(15,4),OpenOrderPrice numeric(15,4),Status VARCHAR(10),CreatedNormalDate VARCHAR(30));';
      DBOrders.SendCommand;          
   end;
 
   try           
        DBOrders.QueryText :=  'ALTER TABLE Orders ADD CONSTRAINT PK_order_id PRIMARY KEY (order_id)';
        DBOrders.SendCommand;
   except
   end;
 
   result := true;         
 
end;
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
29.07.2019, 14:03
1. по опыту - ПО, которое на ходу клепает таблицы в базе, это очень странное ПО

2. если у вас поле типа AUTOINCREMENT то никаких присваиваний в него нет и быть не может
поэтому и тут
SQL
1
UPDATE Settings SET ID = 1
и тут
SQL
1
INSERT INTO Settings (ID
ошибка
Я еще раз предлагаю вам не бездумно писать код, а озаботиться чтением документации
Вы же написали AUTOINCREMENT, значит, должны были узнать, что это обозначает

3. Вы пишете программу в среде, которая целиком поддерживает ООП, использование свободных процедур и функций может быть оправданно только в случае маленьких утилит. Но точно не для работы с моделью данных и БД.
Используйте объекты и их поля и методы
0
4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287
29.07.2019, 14:45  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
и тут
SQLВыделить код
1
INSERT INTO Settings (ID
как я сказал

SQL
1
INSERT INTO Settings (OpenAPIKey1,SecretAPIKey1 ) VALUES ('giuhohkjhkjh' , 'kjhkjhljhljhklj');
в таком варианте ошибка та же самая, ID в явном виде я указал уже от безисходности...

Добавлено через 2 минуты
Цитата Сообщение от krapotkin Посмотреть сообщение
Вы пишете программу в среде, которая целиком поддерживает ООП, использование свободных процедур и функций может быть оправданно только в случае маленьких утилит. Но точно не для работы с моделью данных и БД.
Используйте объекты и их поля и методы
я пишу программу в среде в которой есть только процедуры и функции, а классов нет...Можно вызывать только импортированные...
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
29.07.2019, 15:13
значит, вы что-то недоговариваете
происхождение ошибки очевидно
чудес не бывало вот уже 1986 лет
так что создавайте минимальный пример, где это воспроизводится, и кидайте сюда
базу postgres найдём...
0
29.07.2019, 15:44

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
чудес не бывало вот уже 1986 лет
С тех времен тоже никто убедительный proof не предоставил... Так что считаем, что их нет вообще!!!

0
4 / 4 / 4
Регистрация: 04.05.2014
Сообщений: 287
30.07.2019, 23:13  [ТС]
все начал ваять демо пример и нашел косяк в строке 60 написано :

Delphi
1
DBOrders.SendCommand;  //вот тут мы получаем ошибку...
а должно быть

Delphi
1
SettingsDB.SendCommand;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2019, 23:13
Помогаю со студенческими работами здесь

При установке драйвера выдает ошибку: устройство с таким именем уже существует
Народ, такая беда - невозможно установить драйвера на сетевую карту. Выбивает ошибку, говорит, что устройство с таким именем уже есть. Это...

При добавлении новой записи в бд через прогу c# выдает ошибку (не удалось преобразовать значение типа char к money)
Программа корректно редактирует запись в бд типа money, но при создании новой записи туда же, выдает ошибку Тут все из полей...

Создание директории. Выдаёт ошибку, что директория верхнего уровня уже существует
Пытаюсь создать директорию 3 по пути C:\1\2\3. Директория 3 не существует, но существуют директории 1 и 2. Выдаёт ошибку Не удается...

Зацикливается при добавлении новой записи в уже заполненную базу
//Зацикливается при добавлении в уже заполненную базу, новую запись procedure TForm3.Button1Click(Sender: TObject); begin if...

При добавлении базы выдает ошибку!
Переставил 1 С 9.2 с одного компа (XP) на другой (7). При добавлении базы выдает ошибку! Как исправит? Executable 'C:\DB 19.10.15\1C.exe'...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru