Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
MS Access

Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"

06.10.2022, 00:49. Показов 7228. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Проблема такая. Я нажимаю на нужную мне запись в DBGrid и по нажатию клавиши выбраная запись должна удаляться, но она не удаляется и ещё мне выводиться ошибка базы данных "Несоответствие типов данных в выражении условия отбора". Скрин прикрепил ниже. При этом сама прога не вылетает. Как это исправить? Много где искал в том числе и на форуме но не нашел ясного ответа. Пожалуйста помогите! Прикрепляю ниже скрины структур моих таблиц. И коды кнопок.
Кнопка удаления
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm2::Button4Click(TObject *Sender)
{
 AnsiString number = DBGrid1->Fields[0]->AsString;
    AnsiString messageTxt = "При удаление записи будут удалены все записи связаные в анкете ";
    if(MessageDlg(messageTxt, mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
    {
        try{
        ADOQuery1->Active = false;
        ADOQuery1->SQL->Text = "DELETE FROM Owner WHERE (Номер_документу = '"+ number +"');";
        ADOQuery1->Active = true;
        } catch(Exception& e){
        }
            ADOQuery1->Active = false;
            ADOQuery1->SQL->Text="Select * from Owner";
            ADOQuery1->Active = true;
    }
 
}
В ADOQuery1 у меня:
SQL
1
SELECT * FROM Owner
На всякий случай скидываю еще кнопку добавления этих записей
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
void __fastcall TForm3::Button2Click(TObject *Sender)
{
     #define O Form1->ADOTable1
            for(int i=0;i<1;i++){
O->Last();
Form1->ADOQuery1->Active=false;
Form1->ADOQuery2->Active=false;
        Form1->ADOQuery3->Active=false;
            Form1->ADOQuery4->Active=false;
    int id =Form1->ADOTable1->FieldByName("Номер_документу")->AsInteger;
        O->Insert();
O->FieldByName("Номер_документу")->AsString=id+1; // +1 к каждой новой записи
        O->FieldByName("Імя")->AsString=Edit2->Text;
    O->FieldByName("Прізвище")->AsString=Edit3->Text;
        O->FieldByName("По батькові")->AsString=Edit4->Text;
    O->FieldByName("Адреса_прописки")->AsString=Edit5->Text;
        O->Post();
    }
    Form1->ADOQuery3->Active=true;
    Form1->ADOQuery1->Active=true;
    Form1->ADOQuery2->Active=true;
    Form1->ADOQuery4->Active=true ;
 
}
Миниатюры
Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"   Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"   Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"  

Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"   Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2022, 00:49
Ответы с готовыми решениями:

Несоответствие типов данных в выражении условия отбора
Имеется 2 столбца в таблице Access 2010: &quot;Текстовой&quot; и &quot;Числовой&quot;. Оба &quot;обязательно для заполнения - нет&quot;. При заполнении таблицы в...

Фильтр по дате: ошибка "Несоответствие типов данных в выражении условия отбора"
Здравствуйте! База данных в Access, нужно выбрать все записи с даты (например: 10.02.2016) по дате (например: 15.02.2016) по нажатию...

"Несоответствие типов данных в выражении условия отбора"
Прошу помочь. Есть две основные формы: форма, где я добавляю/редактирую данные и форма для просмотра с DBGridом. Добавление работает,...

10
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
06.10.2022, 01:10
Цитата Сообщение от Seruch Посмотреть сообщение
ADOQuery1->SQL->Text = "DELETE FROM Owner WHERE (Номер_документу = '"+ number +"');"
на
C++
1
ADOQuery1->SQL->Text = "DELETE FROM Owner WHERE (Номер_документу = "+ number +")";
Вы полю "Номер документа" строковой подкидываете в запросе.
0
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
06.10.2022, 01:21  [ТС]
TrollHammer, Оно удаляет, но выдает выдает две ошибки(( И увидеть его можно только после перезахода
Миниатюры
Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"   Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"  
0
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
06.10.2022, 16:24  [ТС]
Кто то знает способы как это пофиксить?
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
06.10.2022, 16:48
Seruch, без обид, но какой смысл что-то говорить, если Вы все равно этого не читаете и не делаете... Это касается и использование ADOTable и это вот Ваше:
Цитата Сообщение от Seruch Посмотреть сообщение
увидеть его можно только после перезахода
я же уже объяснял, что надо делать, а толку-то?
0
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
06.10.2022, 17:35  [ТС]
D1973, Делал все как вы говорили. я завел отдельный ADOQuery1 на этой форме (видно на скрине), При запуске програмы, то есть в FormCreate1 я прописал
C++
1
ADOQuery1->Open();
, после удаления перевыполнил этот запрос:
C++
1
2
ADOQuery1->Close();
ADOQuery1->Open();
Вот фулл код кнопки с вашими рекомандациями. Но оно ничего не меняет. Эти две ошибки по прежнему вылазят.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm2::Button4Click(TObject *Sender)
{
 
 AnsiString number = DBGrid1->Fields[0]->AsString;
    AnsiString messageTxt = "При удаление записи будут удалены все записи связаные в анкете ";
    if(MessageDlg(messageTxt, mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
    {
        try{
        ADOQuery1->Active = false;
        ADOQuery1->SQL->Text = "DELETE FROM Owner WHERE (Номер_документу = "+ number +")";
        ADOQuery1->Close();   // 1 вставка после удаления
        ADOQuery1->Open();  //    2 вставка после удаления
 
        ADOQuery1->Active = true;
        } catch(Exception& e){
        }
            ADOQuery1->Active = false;
            ADOQuery1->SQL->Text="Select * from Owner";
            ADOQuery1->Active = true;
    }
 
}
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
06.10.2022, 17:38
Ну а Датасет для грида? Он ведь у Вас, 100%, так и остался на ADOTable?
0
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
06.10.2022, 17:49  [ТС]
D1973,
Миниатюры
Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"   Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"  
0
2 / 2 / 0
Регистрация: 11.11.2020
Сообщений: 232
06.10.2022, 22:43  [ТС]
Я ещё хочу чтобы оно если удаляло запись с этой таблицы, то удаляло связаную по номеру документу в таблице Account_data.
Вот написал запрос
C++
1
    DOQuery1->SQL->Text = "DELETE FROM Owner, Account_data WHERE (Owner.Номер_документу = "+ number +" AND Account_data.Номер_документу= " + number +")";
Но оно выдает эту ошибку. Что не так? Я же указал название обеих таблиц в начале и потом ещё поля приравнял.
Миниатюры
Ошибка при удалении из БД "Несоответствие типов данных в выражении условия отбора"  
0
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
07.10.2022, 04:14
Seruch, Вам компонентов ADOQuery жалко? Что Вы в один компонент все пихаете, сделайте один компонент на добавление, один на удаление один для вывода в грид, один для вспомогательных операций... Дайте им нормальные осмысленные имена - и все Вам самому станет понятно, что, когда и зачем происходит.
Цитата Сообщение от Seruch Посмотреть сообщение
Но оно ничего не меняет.
И не будет. Почитайте про блок try .. catch(), для чего он нужен и как он работает - все Вам станет понятно
Цитата Сообщение от Seruch Посмотреть сообщение
ADOQuery1->Open();  //    2 вставка после удаления
ADOQuery1->Active = true;
Вот эти две строки - абсолютно одно и то же. Причем ни одно, ни другое в данном случае неуместно: метод Open() выполняется для запросов, которые возвращают некоторый набор данных. В языке SQL этому требованию удовлетворяет только команда SELECT. Команды INSERT, UPDATE, DELETE никакого НД не возвращают, о чем, собственно, Вам и говорится в сообщениях об ошибках из поста #3. Для выполнения таких команд используется метод ExecSQL()

Не по теме:

Вот еще одно подтверждение того, что Вы не читаете или не запоминаете того, что Вам пишут в Ваших темах: ответ на этот вопрос уже был дан в одной из ближайших Ваших тем.


Цитата Сообщение от Seruch Посмотреть сообщение
Вот написал запрос
А теперь откройте любой букварь по SQL и прочитайте про синтаксис команды DELETE.
Вообще, в нормальных СУБД, такие вещи делаются при помощи инструментов, которые называются триггеры и которые позволяют осуществлять каскадные изменения данных без нарушения их целостности. Но эта чудо-поделка, которая Access, этого тупо не умеет и весь контроль целостности данных ложится на плечи клиентского приложения. Следовательно, прежде чем удалять главную запись, вы должны сначала удалить все подчиненные.

Не по теме:

И еще одно подтверждение того, что советы Вами просто пропускаются мимо ушей (ну, т.е. глаз в текущих реалиях): про то, что ничего удалять из БД нельзя, я тоже говорил уже...

1
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
10.10.2022, 14:59
D1973,
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2022, 14:59
Помогаю со студенческими работами здесь

"Несоответствие типов данных в выражении условия отбора"
Ошибка несоответствия при удалении ADOQuery12-&gt;SQL-&gt;Clear(); ADOQuery12-&gt;SQL-&gt;Add(&quot;DELETE ,,, FROM WHERE...

Несоответствие типов данных в выражении условия отбора при удалении строк
Пытаюсь удалить выбранные строки в datagridview из бд. Загрузка из бд в datagridview.Тут Все корректно работает. OleDbDataAdapter del =...

Ошибка: Несоответствие типов данных в выражении условия отбора
Код кнопки: List&lt;string&gt; data = new List&lt;string&gt;(); for (int i = 0; i &lt; dataGridView2.RowCount; i++) { ...

Ошибка: Несоответствие типов данных в выражении условия отбора.
Есть созданная БД access и VB2010express Приложение, две формы. С одной записи добавляются. Вторая для просмотра отчета. На форме 2...

Несоответствие типов данных в выражении условия отбора при добавлении записи в БД
Доброго время суток. Помогите пожалуйста, при добавление новых элементов в таблицу access выбивает ошибка. вот исходный код. ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru