Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 8
1

использование IBUpdateSQL для добавления записей в бд

12.05.2011, 11:33. Показов 2097. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
надо добавить записи в таблицу!!
прошу помощи у всех кто может помочь. мучуюсь уже неделю!! я недавно занимаюсь таким делом, к тому же саму базу разрабатывала не я и менять что-то мне запретили, мне надо создать только пользовательский интерфейс. но при этом в базе даже речи не идет о ссылочной целостности, связях, триггерах и тому подобном.
перепробовала уже по-моему все что только можно, но дело так с места и не сдвинулось.
есть две формы, на первой расположены 2 DBGrid, подключенные к 2-м IBQuery, IBDatabase и IBTransaction по кнопке "Добавить" вызывается 2-я формаб, где расположен ComboBox с выпадающим списком, два IBQuery, IBUpdateSQL(запросы сгенерированы) и IBTransaction. необходимо чтобы можно было добавить через ComboBox новые записи с возможность выбирать из уже имеющихся. вот то что я смогла придумать, но это не работает: записи не добавляются в бд и выскакивает ошибка: "IBQuery1:Cannot perform this operation on an open dataset"

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
void __fastcall TForm3::FormCreate(TObject *Sender)
{
 
IBQuery1->Active=true;
  IBQuery2->Active=true;
 
   IBQuery1->Close();
   ComboBox1->Clear();
   IBQuery1->Open();
   IBQuery1->First();
while( !IBQuery1->Eof )
{
 ComboBox1->Items->Add( IBQuery1->FieldByName("USEL_NAME")->AsString );
 Application->ProcessMessages();
 IBQuery1->Next();
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm3::Button1Click(TObject *Sender)
{
 //IBTransaction1->Active=true;
    IBQuery2->Close();
   IBQuery2->SQL->Text="select max(UZEL_TYPE) from USELS_TYPES;";
   IBQuery2->Open();
  AnsiString plus1 = IntToStr(StrToInt(DBText1->Caption) + 1);
 
 IBQuery1->Close();
    IBQuery1->Insert();
    IBQuery1->ParamByName("USEL_NAME")->AsString = ComboBox1->Text;
    IBQuery1->ParamByName("UZEL_TYPE")->AsString = plus1;
  IBQuery1->Open();
 
 
 IBUpdateSQL1->ExecSQL(ukInsert);
 IBQuery1->ExecSQL();
  IBQuery1->ApplyUpdates();
    IBTransaction1->Commit();
 
    }
 
//---------------------------------------------------------------------------
 
void __fastcall TForm3::FormDestroy(TObject *Sender)
{
IBQuery1->Active=false;
      IBQuery2->Active=false;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2011, 11:33
Ответы с готовыми решениями:

Форма для добавления записей в таблицу
Существует заполненная таблица, что бы было удобней добавлять данные, сделал форму. Но после...

Форма для добавления записей из списка
Увидел тему вот эту и понял, что тоже хочу реализовать похожее, но только немного иначе. В примере...

Создать класс для удаления и добавления записей в БД
Привет дорогие форумчане помогите разбираться с одну задачу : Написать класс пользователей в...

Как сделать макрос для добавления записей в таблицу?
Необходимо макрос, который будет добавлять записи в таблицу "00_tb1_org". Необходимо чтобы в...

2
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
12.05.2011, 12:30 2
OnCreate
1. Никогда не пытайтесь манипулировать с БД в событии OnCreate - будут странные эффекты.
2. TIBQuery->Open() и TIBQuery->Active = true одно и то же, равно как и Close/Active=alse

OnButtonClick
1. После выполнения запроса и обработки его результатов (IBQuery2) сразу же его закрывайте. Помните, что каждый ОТКРЫТЫЙ запрос сервер "помнит" и держит для него версии записей. Не надо лишний раз напрягать попусту сервер.
2.
SQL
1
2
3
4
5
IBQuery1->Close();
IBQuery1->INSERT();
IBQuery1->ParamByName("USEL_NAME")->AsString = ComboBox1->Text;
IBQuery1->ParamByName("UZEL_TYPE")->AsString = plus1;
IBQuery1->OPEN();
Работать с IBQuery можно либо как к датасетом, если запрос был SELECT, либо без датасета (UPDATE,DELETE,INSERT..). Вы же совмещаете несовместимое:
сначала закрываете его как датасет, а затем пытаетесь добавть в ЗАКРЫТЫЙ датасет новую запись,
после чего работаете не с датасетом, а с содержимым запроса, подставляя параметры и открывая его снова.

Последний фрагмент вообще сплошная загадка, похоже каждую строчку Вы брали сюда с потолка ибо вместе они никак не "дружат".

Добавлено через 2 минуты
В деструктор не стОит добавлять то, что Вы добавили.
Во-первых, не логично и просто "криво", во-вторых при автоматическом освобождении компонентов датасеты будут также автоматически закрыты.
1
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 8
12.05.2011, 13:39  [ТС] 3
спасибо, сейчас попробую исправить
0
12.05.2011, 13:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2011, 13:39
Помогаю со студенческими работами здесь

Форма для одновременного добавления нескольких записей в таблицу
Здравствуйте! Есть таблица для учета ежедневной выручки по сотрудникам со следующими полями: дата,...

Как сделать форму для добавления записей в базу
Народ расскажите как сделать форму для добавления записей в базу. У меня есть база с 1 таблицей в...

Код VB для запрещения добавления, изменения и удаления записей в форме
Здравствуйте! Подскажите пожалуйста код VB для запрещения добавления, изменения и удаления записей...

Как создать страницу для добавления новых записей в базу данных?
Есть приложение, список компаний с разными параметрами( e-mail,телефон и т.д.). Можно ли создать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru