Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330

Как избавиться от ошибки (Транзакция активна)?

12.05.2012, 18:07. Показов 2276. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Никак не получается удалить запись из таблицы.
C++
1
2
3
4
5
6
7
8
9
10
11
    Form2->IBQuery1->Close();
    Form2->IBQuery1->SQL->Clear();
    String FIO_DEL=Form2->DBEdit1->Text;
    String Address_DEL=Form2->DBEdit2->Text;
    String Data_BD_DEL=Form2->DBEdit3->Text;
    String TEL_DEL=Form2->DBEdit4->Text;
    Form2->IBTransaction1->StartTransaction();
    Form2->IBQuery1->SQL->Add("Delete from PERSONAL where FIO="+FIO_DEL+",ADDRESS="+Address_DEL +", DATA_BD="+ Data_BD_DEL + ",Tel=Tel_DEL" +"");
    Form2->IBQuery1->ExecSQL();
    Form2->IBTransaction1->Commit();
    Form2->IBQuery1->Open();
В итоге получаю:
Миниатюры
Как избавиться от ошибки (Транзакция активна)?   Как избавиться от ошибки (Транзакция активна)?  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2012, 18:07
Ответы с готовыми решениями:

Как избавиться от ошибки?
Тип ошибки: Microsoft OLE DB Provider for ODBC Drivers (0x80040E4D) Login failed for user 'sa'. Reason: Not associated with a trusted...

Как избавиться от ошибки
Добрый вечер всем. Пытаюсь поработать с БД на C#. Установил System.Data.SQLite и добавил в reference соответствующий .dll файл. Далее...

Как избавиться от ошибки компоновщика?
Как избавиться от ошибки компоновщика в vs2008? Сначала вылезала в мфц проектах, а теперь уже везде. Переустановка не помогает

16
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
12.05.2012, 19:38  [ТС]
Если без танзакций, выскакивает динамическая SQL ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
    Form2->IBQuery1->Close();
    Form2->IBQuery1->SQL->Clear();
    String FIO_DEL=Form2->DBEdit1->Text;
    String Address_DEL=Form2->DBEdit2->Text;
    String Data_BD_DEL=Form2->DBEdit3->Text;
    String TEL_DEL=Form2->DBEdit4->Text;
//    Form2->IBTransaction1->StartTransaction();
    Form2->IBQuery1->SQL->Add("Delete from PERSONAL where FIO="+FIO_DEL+",ADDRESS="+Address_DEL +", DATA_BD="+ Data_BD_DEL + ",Tel=Tel_DEL" +"");
    Form2->IBQuery1->ExecSQL();
//    Form2->IBTransaction1->Commit();
    Form2->IBQuery1->Open();
Добавлено через 1 час 26 минут
Изменил код. Первым делом "убиваю транзацию", которая мешает. (Не знаю правда, почему она активна, может быть что-то с настройками).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Form2->IBQuery1->Close();
    Form2->IBQuery1->SQL->Clear();
    String FIO_DEL=Form2->DBEdit1->Text;
    String Address_DEL=Form2->DBEdit2->Text;
    String Data_BD_DEL=Form2->DBEdit3->Text;
    String TEL_DEL=Form2->DBEdit4->Text;
    if (Form2->IBTransaction1->Active==true)
        Form2->IBTransaction1->Rollback();
 
    Form2->IBTransaction1->StartTransaction();
    Form2->IBQuery1->SQL->Add("Delete from PERSONAL where FIO="+FIO_DEL+",ADDRESS="+Address_DEL +", DATA_BD="+ Data_BD_DEL + ",Tel=Tel_DEL" +";");
    Form2->IBQuery1->ExecSQL();
    Form2->IBTransaction1->Commit();
    Form2->IBQuery1->Open();
Теперь ругается на строку SQL. Не подскажете, где ошибки?
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
12.05.2012, 20:00  [ТС]
C++
1
    Form2->IBQuery1->SQL->Add("Delete from PERSONAL where FIO="+FIO_DEL+"and ADDRESS="+Address_DEL +"and DATA_BD=" + Data_BD_DEL + "and Tel=" + TEL_DEL + ";");
Миниатюры
Как избавиться от ошибки (Транзакция активна)?  
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2012, 02:36
Aleator, это что за удаления такие? Где же у Вас ключик заветный прячется, по которому обычно и удаляют?
Корректное проектирование БД может значительно облегчить жизнь...
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
14.05.2012, 23:40  [ТС]
Согласен, что удаление "никакое". Главное было в активной транзакции.
Что касается удаления (переписанного), то почему не работает такое вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
      Form2->IBTransaction1->StartTransaction();
 int x=Form2->DataSource1->DataSet->FieldByName("ID_PERSONAL")->AsInteger;
    Form2->IBQuery1->SQL->Clear(); 
    Form2->IBQuery1->SQL->Add("Delete FROM PERSONAL WHERE ID_PERSONAL=:ID_PERSONAL_DEL"); // çàäàòü òåêñò çàïðîñà
 
    Form2->IBQuery1->ParamByName("ID_PERSONAL_DEL")->Value=x;
    Form2->IBQuery1->Prepare();   
    Form2->IBQuery1->ExecSQL();
    Form2->IBTransaction1->Commit();
 
    Form2->IBQuery1->SQL->Clear();
    Form2->IBQuery1->SQL->Add("SELECT * FROM PERSONAL");
    Form2->IBQuery1->Active=true;
(ошибок не показывает). Для проверки сразу после удаления делаю запрос-просмотр, получаю всё те же данные.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2012, 23:49
Aleator, эх, очень хочется Вам помочь, да вот InterBase увы нету
Но есть лаба, которую я давно делал - она тупая, но вроде как основные элементы типа добавления, удаления, обновления там выполнены... Наверное
Правда проект был сделан на XE - сможете открыть?
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
14.05.2012, 23:52  [ТС]
Попытка-не пытка.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
14.05.2012, 23:57
Aleator, вот, посмотрите, мало ли что обнаружите. А я пока поищу интербейз.
Вложения
Тип файла: zip LABO2.zip (1.62 Мб, 12 просмотров)
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
15.05.2012, 00:19  [ТС]
Спасибо. Начал копать.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
15.05.2012, 00:21
Aleator, а подскажите, плиз, что надо скачать для работы с IB-компонентами?)
Чет смутно помню про IB Expert... Только не помню нафига он.

Что-то я запутался слегка)
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
15.05.2012, 00:42  [ТС]
Что значит скачать? Вы имеете ввиду чем создавать базу в Interbase?
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
15.05.2012, 01:02  [ТС]
Мои художества:
Вложения
Тип файла: zip New Folder.zip (1.31 Мб, 7 просмотров)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
15.05.2012, 04:09
Aleator, если найду нормальный InterBase под XE2 - гляну.
Проблема остается?
Без параметров, кстати, как удаление проходит?

Добавлено через 1 час 22 минуты
Пф... Еле установил всю эту ересь.

Итак, разбираемся с удалением:

1)
C++
1
2
    if (Form2->IBTransaction1->Active==true)
        Form2->IBTransaction1->Rollback();
- поясните, пожалуйста, необходимость тут этого.
А особенно Rollback().

2) Комментим указанные выше 2 строчки, запускаем, выделяем запись, жмякаем "Удалить" и....
violation of FOREIGN KEY constraint "INTEG_8" on table "GRAPHWORK"
3) Открываем AESFXCF.gdb (я это делаю через IB Expert). Находим табличку GRAPHWORK. Вкладка "Constraints", подвкладка "Foreign keys". Смотрим... Constraint Name: INTEG_8 - тот самый. Ага: Update Rule = NO ACTION, Delete Rule = NO ACTION. Что же получается? Мы пытаемся удалить запись из главной таблицы PERSONAL, а что же в таком случае должно быть с подчиненной записью, которая находится в таблице GRAPHWORK? Разумеется, она должна также удаляться (уволили человека - график его работ уничтожается - это по общей логике; связь "1 ко многим" - это по логике проектирования БД). А у нас, как видите, при удалении ничего не происходит (NO ACTION). Вы уж извольте регулировать удаление записей и там (GRAPHWORK сначала) и там (PERSONAL). Это можно делать вручную, а можно вместо NO ACTION, выставить CASCADE (на обновление и на удаление), что означает автоматическое регулирование таких ситуаций. Щелкаем наверху желтую молнию/ctrl + F9.

4) Запускаем прогу, выделяем запись (давайте попробуем "Смолину"), жмякаем "Удалить" и....
violation of FOREIGN KEY constraint "INTEG_12" on table "SUBSCRIPTION"
Ну тут я уже подсказывать не буду, что надо делать - логика аналогичная. Надеюсь догадаетесь

А вот "Деревянко" удалится, т.к. этот человек не зафиксирован в таблице SUBSCRIPTION.


P.S. Прошу простить за занудный стиль изложения - просто хочется привить понимание
P.P.S.
Цитата Сообщение от The_Immortal Посмотреть сообщение
Корректное проектирование БД может значительно облегчить жизнь...
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
15.05.2012, 09:54  [ТС]
Огромное спасибо!
C++
1
2
  if (Form2->IBTransaction1->Active==true)
        Form2->IBTransaction1->Rollback();
- без этого все время выскакивает ошибка транзакция активна (не знаю какая), поэтому я её сначала "прибиваю", а потом работаю дальше.
Можно и
C++
1
Form2->IBTransaction1->Commit();
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
15.05.2012, 10:16
Aleator,
Цитата Сообщение от Aleator Посмотреть сообщение
без этого все время выскакивает ошибка транзакция активна
Хм, а у меня чего-то ничего не выскочило.
А вот с этим Роллбэком Датасет потом получается пустой - по крайней мере ID по полю возвращается всегда 0.
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
15.05.2012, 23:48  [ТС]
1. Базу я создавал и открываю для внесения изменений в IBConsol-е.
2. В вкладке "Constraints", подвкладке "Foreign keys" значение OnUpdate = Restrict. Меняю на CASCADE (и удаление и обновление). Закрываю IBConsol. Открываю через минуту - всё по прежнему.
3. Скачаю IB Expert, буду менять свойства там.
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
16.05.2012, 02:30
Aleator,
Цитата Сообщение от Aleator Посмотреть сообщение
В вкладке "Constraints", подвкладке "Foreign keys" значение OnUpdate = Restrict. Меняю на CASCADE (и удаление и обновление). Закрываю IBConsol. Открываю через минуту - всё по прежнему.
Хм, а у меня нормально. CASCADE сохраняется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2012, 02:30
Помогаю со студенческими работами здесь

Как избавиться от данной ошибки
/home/stas/Downloads/Graphs/mainwindow.cpp:88: ошибка: call of overloaded 'isnan(double)' is ambiguous if(!isnan(f(i))) { ...

Как избавиться от ошибки 202.
uses crt; function vich(n:integer):real; begin if n=1 then vich:=1 else vich:=vich(n-1)+vich(n-2); end; var n:integer; begin...

Как избавиться от этой ошибки?
После установки ос при каждом включении появляется такое окно. как это исправить ноут SAMSUNG NP300E7A-A02

Как избавиться от такой ошибки?
При запуске проекта вылетает ошибка "Project raised exception class EStackOverFlow with message 'Stack overflow ' process stopped"....

Как избавиться от ошибки в WebBrowser?
Всем привет! Не подскажите ка избавиться от вот этой ошибки?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru