Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Как выделить строку в БД добавленную запросом?

07.09.2009, 10:45. Показов 6066. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть код
C++
1
2
3
4
5
6
7
8
9
10
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text = "INSERT INTO Glavnaya (Invent_Number,Number_in_Lan,Department,Processor,Memory,HDD,Room)VALUES('"+Edit1->Text+"', '"+Edit2->Text+"', '"+Edit3->Text+"', '"+Edit4->Text+"', '"+Edit5->Text+"', '"+Edit6->Text+"', '"+Edit7->Text+"')";
ADOQuery1->ExecSQL();
 
 
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text ="Select * from Glavnaya ORDER BY Invent_Number";
ADOQuery1->Open();
Как можно выделить новую строку добавленную в БД запросом
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2009, 10:45
Ответы с готовыми решениями:

Как выделить новую строку в QTableView добавленную через QSqlQuery
Имеем QSqlQueryModel и припомощи QSqlQuery делается вставка в базу данных, при этом в QTableView данные обновляются, появляется новая...

Как добавленную строку в DGV сохранить в БД
Прошу помочь в проблеме. В access была создана база с таблицей. Таблица состоит из 3х столбцов - код(примари кей), имя, и фамилия. В с#...

Нужно SQL-запросом вернуть самую последнюю добавленную запись
Нужно SQL-запросом вернуть самую последнюю добавленную запись. Такой вариант нормальный? SELECT `message`, `reply` FROM `chat` WHERE `id`...

64
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.09.2009, 17:33  [ТС]
Студворк — интернет-сервис помощи студентам
Нет не получается щас вообще ошибку выводит при редактировании любого поля и жалуется на эту строку с новым условием

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("UPDATE Glavnaya SET Invent_Number =:Invent_Number, Number_in_Lan = :Number_in_Lan, Department = :Department, Processor = :Processor, Memory = :Memory, HDD = :HDD, Room = :Room");
ADOQuery1->SQL->Add("WHERE Invent_Number = " + ADOQuery1->FieldByName("Invent_Number")->AsString);
ADOQuery1->Parameters->ParamByName("Number_in_Lan")->Value = Trim(Edit2->Text);
ADOQuery1->Parameters->ParamByName("Department")->Value = Trim(Edit3->Text);
ADOQuery1->Parameters->ParamByName("Processor")->Value = Trim(Edit4->Text);
ADOQuery1->Parameters->ParamByName("Memory")->Value = Trim(Edit5->Text);
ADOQuery1->Parameters->ParamByName("HDD")->Value = Trim(Edit6->Text);
ADOQuery1->Parameters->ParamByName("Room")->Value = Trim(Edit7->Text);
ADOQuery1->Parameters->ParamByName("Invent_Number")->Value = Trim(Edit1->Text);
ADOQuery1->ExecSQL();
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text ="Select * from Glavnaya ORDER BY Invent_Number";
ADOQuery1->Open();
Прям не знаю чё и делать

Добавлено через 3 минуты
А если это поле целочисленное это как-то влияет?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.09.2009, 17:38  [ТС]
Вот скриншот
Миниатюры
Как выделить строку в БД добавленную запросом?  
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.09.2009, 18:18
Sasha, иногда кажется, что говорю сам себе... сделай adoquery2 и в нем редактируй...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("UPDATE Glavnaya SET Invent_Number =:Invent_Number, Number_in_Lan = :Number_in_Lan, Department = :Department, Processor = :Processor, Memory = :Memory, HDD = :HDD, Room = :Room");
ADOQuery2->SQL->Add("WHERE Invent_Number = " + ADOQuery1->FieldByName("Invent_Number")->AsString);
ADOQuery2->Parameters->ParamByName("Number_in_Lan")->Value = Trim(Edit2->Text);
ADOQuery2->Parameters->ParamByName("Department")->Value = Trim(Edit3->Text);
ADOQuery2->Parameters->ParamByName("Processor")->Value = Trim(Edit4->Text);
ADOQuery2->Parameters->ParamByName("Memory")->Value = Trim(Edit5->Text);
ADOQuery2->Parameters->ParamByName("HDD")->Value = Trim(Edit6->Text);
ADOQuery2->Parameters->ParamByName("Room")->Value = Trim(Edit7->Text);
ADOQuery2->Parameters->ParamByName("Invent_Number")->Value = Trim(Edit1->Text);
ADOQuery2->ExecSQL();
 
ADOQuery1->Refresh();
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 09:38  [ТС]
Цитата Сообщение от VoodooMan Посмотреть сообщение
Sasha, иногда кажется, что говорю сам себе... сделай adoquery2 и в нем редактируй...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("UPDATE Glavnaya SET Invent_Number =:Invent_Number, Number_in_Lan = :Number_in_Lan, Department = :Department, Processor = :Processor, Memory = :Memory, HDD = :HDD, Room = :Room");
ADOQuery2->SQL->Add("WHERE Invent_Number = " + ADOQuery1->FieldByName("Invent_Number")->AsString);
ADOQuery2->Parameters->ParamByName("Number_in_Lan")->Value = Trim(Edit2->Text);
ADOQuery2->Parameters->ParamByName("Department")->Value = Trim(Edit3->Text);
ADOQuery2->Parameters->ParamByName("Processor")->Value = Trim(Edit4->Text);
ADOQuery2->Parameters->ParamByName("Memory")->Value = Trim(Edit5->Text);
ADOQuery2->Parameters->ParamByName("HDD")->Value = Trim(Edit6->Text);
ADOQuery2->Parameters->ParamByName("Room")->Value = Trim(Edit7->Text);
ADOQuery2->Parameters->ParamByName("Invent_Number")->Value = Trim(Edit1->Text);
ADOQuery2->ExecSQL();
 
ADOQuery1->Refresh();
А если у меня ADOQuery2 занято тем, что я через него вывожу на печать, это как-то повлияет на редактирование или заводить ещё 1 ADOQuery для редактирорвания.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 09:41
неужеди так трудно создать временный объект, поредактировать в нем и удалить... я просто не буду даже пытаться спрогнозировать поведение программы с таким поведением, как у тебя...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 10:44  [ТС]
Теперь поле Invent_Number не обновляется, а второй раз если вносишь измененние в это поле, вообще удаляет эту строку из базы.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ADOQuery2->Close();
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("UPDATE Glavnaya SET Invent_Number =:Invent_Number, Number_in_Lan = :Number_in_Lan, Department = :Department, Processor = :Processor, Memory = :Memory, HDD = :HDD, Room = :Room");
ADOQuery2->SQL->Add("WHERE Invent_Number = " + ADOQuery1->FieldByName("Invent_Number")->AsString);
ADOQuery2->Parameters->ParamByName("Number_in_Lan")->Value = Trim(Edit2->Text);
ADOQuery2->Parameters->ParamByName("Department")->Value = Trim(Edit3->Text);
ADOQuery2->Parameters->ParamByName("Processor")->Value = Trim(Edit4->Text);
ADOQuery2->Parameters->ParamByName("Memory")->Value = Trim(Edit5->Text);
ADOQuery2->Parameters->ParamByName("HDD")->Value = Trim(Edit6->Text);
ADOQuery2->Parameters->ParamByName("Room")->Value = Trim(Edit7->Text);
ADOQuery2->Parameters->ParamByName("Invent_Number")->Value = Trim(Edit1->Text);
ADOQuery2->ExecSQL();
ADOQuery1->Refresh();
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text ="Select * from Glavnaya ORDER BY Invent_Number";
ADOQuery1->Open();
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 10:52  [ТС]
Вот скриншот
Миниатюры
Как выделить строку в БД добавленную запросом?  
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 11:13
Sasha, а у тебя часом Invent_Number - не счетчик?

вот что пишут в нете:
Одна из возможных причин - правится Primary Key в триггере или Primary Key генерируется самопально (через Default).

Вторая - если вносятся изменения в представление (VIEW) в поле по которому идет соединение.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 11:18  [ТС]
Да нет я уже говорил, что числовое поле на котором стоит ключ
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 11:21
а вообще зачем Primary Key редактировать? это может обернуться в будущем проблемами, причем серьезными
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 11:25  [ТС]
Ну а если мне надо будет инвентарный номер отредактировать, тогда что?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 11:31
Sasha, вообще по-хорошему ключевое поле генерируется раз и живет без изменений до удаления записи... а если надо редактировать поле, тогда не делай его ключевым и редактируй спокойно, сколько надо... и ключи непринято показывать пользователю, т.к. используется для внутренних нужд базы...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 11:36  [ТС]
Тогда объясни мне почему здесь редактируется всё нормально несмотря что поле ключевое
C++
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
 else if((Edit1->Text!="")&&(Edit1->Text == ADOQuery1->FieldByName("Invent_Number")->AsInteger))
                            {
                             DataSource1->OnDataChange = NULL;
                             DataSource1->DataSet->Edit();
                             DataSource1->DataSet->FieldByName("Invent_Number")->Value = StrToInt(Edit1->Text);
                             DataSource1->DataSet->FieldByName("Number_in_Lan")->Value = Edit2->Text.SubString(1,1) + PadL(Edit2->Text.SubString(2,Edit2->Text.Length()),3,'0');
                             DataSource1->DataSet->FieldByName("Department")->Value = Edit3->Text;
                             DataSource1->DataSet->FieldByName("Processor")->Value = Edit4->Text;
                             DataSource1->DataSet->FieldByName("Memory")->Value = Edit5->Text;
                             DataSource1->DataSet->FieldByName("HDD")->Value = Edit6->Text;
                             DataSource1->DataSet->FieldByName("Room")->Value = Edit7->Text;
                             DataSource1->DataSet->Post();
                             DataSource1->OnDataChange = DataSource1DataChange;
                            }
 
                             else if ((Edit1->Text!="")&&(Edit1->Text != ADOQuery1->FieldByName("Invent_Number")->AsInteger))
                               {
                                   int PrevID = ADOQuery1->FieldByName("Invent_Number")->AsInteger;
                                   TLocateOptions Options;
                                   Options.Clear();
                                   Options << loPartialKey << loCaseInsensitive;
                                    if(ADOQuery1->Locate("Invent_Number",Edit1->Text,Options))
                                  { AnsiString qw = "Такой инвентарный номер уже есть в базе данных!!! \n\n" + IntToStr(ADOQuery1->FieldByName("Invent_Number")->AsInteger)+" - "
                                    +ADOQuery1->FieldByName("Number_in_Lan")->AsString+" - "
                                    +ADOQuery1->FieldByName("Department")->AsString+" - "
                                    +ADOQuery1->FieldByName("Processor")->AsString+" - "
                                    +ADOQuery1->FieldByName("Memory")->AsString+" - "
                                    +ADOQuery1->FieldByName("HDD")->AsString+" - "
                                    +ADOQuery1->FieldByName("Room")->AsString + "\n\n"
                                    + "Введите другой инвентарный номер";
                                    Application->MessageBox(qw.c_str(),"Внимание",MB_ICONWARNING);
                                    ADOQuery1->Locate("Invent_Number",PrevID,Options);
                                    Edit1->SetFocus();
                                  }
                                 else
                                  {
 
                                   DataSource1->OnDataChange = NULL;
                                   DataSource1->DataSet->Edit();
                                   DataSource1->DataSet->FieldByName("Invent_Number")->Value = StrToInt(Edit1->Text);
                                   DataSource1->DataSet->FieldByName("Number_in_Lan")->Value = Edit2->Text.SubString(1,1) + PadL(Edit2->Text.SubString(2,Edit2->Text.Length()),3,'0');
                                   DataSource1->DataSet->FieldByName("Department")->Value = Edit3->Text;
                                   DataSource1->DataSet->FieldByName("Processor")->Value = Edit4->Text;
                                   DataSource1->DataSet->FieldByName("Memory")->Value = Edit5->Text;
                                   DataSource1->DataSet->FieldByName("HDD")->Value = Edit6->Text;
                                   DataSource1->DataSet->FieldByName("Room")->Value = Edit7->Text;
                                   DataSource1->DataSet->Post();
                                   ADOQuery1->Refresh();
                                   DataSource1->OnDataChange = DataSource1DataChange;
                                   
                                  }                                  
                                  }
а здесь с проблемами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ADOQuery2->Close();
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("UPDATE Glavnaya SET Invent_Number =:Invent_Number, Number_in_Lan = :Number_in_Lan, Department = :Department, Processor = :Processor, Memory = :Memory, HDD = :HDD, Room = :Room");
ADOQuery2->SQL->Add("WHERE Invent_Number = " + ADOQuery1->FieldByName("Invent_Number")->AsString);
ADOQuery2->Parameters->ParamByName("Number_in_Lan")->Value = Trim(Edit2->Text);
ADOQuery2->Parameters->ParamByName("Department")->Value = Trim(Edit3->Text);
ADOQuery2->Parameters->ParamByName("Processor")->Value = Trim(Edit4->Text);
ADOQuery2->Parameters->ParamByName("Memory")->Value = Trim(Edit5->Text);
ADOQuery2->Parameters->ParamByName("HDD")->Value = Trim(Edit6->Text);
ADOQuery2->Parameters->ParamByName("Room")->Value = Trim(Edit7->Text);
ADOQuery2->Parameters->ParamByName("Invent_Number")->Value = Trim(Edit1->Text);
ADOQuery2->ExecSQL();
ADOQuery1->Refresh();
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text ="Select * from Glavnaya ORDER BY Invent_Number";
ADOQuery1->Open();
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 11:46
потому что так ты в первом случае непосредственно данные редактируешь на заданной строке, а во втором случае это пытается делать база данных по запросу (видимо, она такого не допускает)... проведи тест: введи поле ключевое, а инвентарный номер сделай простым полем и попробуй отредактировать по второму методу (если им в этом случае не будет работать, тогда что-то мы набокопорили, иначе придется искать методы обойти ограничение)
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 12:05  [ТС]
Простым ты имеешь ввиду текстовым, а не числовым
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 12:10
Sasha, а не ключевым
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 12:20  [ТС]
Понял по пробую
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 17:30  [ТС]
Цитата Сообщение от VoodooMan Посмотреть сообщение
Sasha, а не ключевым
Убрал я ключ с поля Invent_Number стало, ещё хуже
Миниатюры
Как выделить строку в БД добавленную запросом?  
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.09.2009, 17:34
Sasha, ты фиктивное ключевое поле завел?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.09.2009, 17:43  [ТС]
Нет не завёл, если надо то какой лутше тип поля сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2009, 17:43

Как сделать видимой последнюю добавленную строку в datagrid
Уважаемые Гуру! После добавления строки в viewModel последняя добавленная строка не видима в DataGrid. Как сделать ее видимой? ...

Не сохраняет добавленную строку
Не сохраняет добавление строки. dataset содержит таблицы с четырех адаптеров. После выполнения показывает что счетчик...

Окрасить только что добавленную строку в Datagridview
Добрый день! Добавляю в цикле ряды в Datagridview: foreach (string source in DicListbox.Keys) {...

Отобразить в ListView только что добавленную строку из БД
Здравствуйте! У меня есть на первой форме ListView, который отображает таблицу базы данных. С этой первой формы вызываю вторую форму, с...

Как можно одним запросом редактировать предыдущую строку и добавить новый?
Как можно одним запросом редактировать предыдущую строку и добавить новый? Если можно на примитивных примерах помагите.


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru