Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 1
Регистрация: 18.07.2011
Сообщений: 90

Вставка пустых данных

18.09.2011, 00:16. Показов 1490. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача следующая: если соответствующие поля Edit заполнены - занести их в БД, если нет - пропустить эти параметры и перейти к следующим (или занести NULL в поле БД)
При первом запуске пишет ошибку - Error creating cursor handle, затем я пытаюсь раскоментировать ExecSQL() и закоментировать Query2->Open() - начинает писать ошибку - Key violation причём проверяю в DatabaseDesktop таблицу N_jobs - все данные заносит правильно - ошибка возникает при Open(ExecSQL). Правда в графе Stoim при отсутствии данных (а именно тогда возникает ошибка) ставит 0.00 В принципе меня такое отображение устраивает, но всё-же - как оставить поле пустым?

C++
1
2
3
4
5
6
7
8
9
Query2->Close();
Query2->SQL->Clear();
Query2->SQL->Text="INSERT INTO N_jobs(Material,Stoimost) VALUES (:Mat,:Stoim)"; // тип полей - text и float соответственно
float a=NULL;
Query2->Params->Items[0]->Value=Edit1->Text;
if (Edit2->Text.IsEmpty()) Query2->Params->Items[1]->Value=a; // если в поле-пусто - ставим в графу NULL (почему-то обойтись без переменной a не получается)
else Query2->Params->Items[1]->Value=StrToFloat(Edit2->Text); //если не пусто - заносим в float-поле соответствующее значение
Query2->Open();
//Query2->ExecSQL(); // (результат один и тот же)
P.S. Здесь для примера приведено только 2 поля с 2мя параметрами (на самом деле их больше)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2011, 00:16
Ответы с готовыми решениями:

Добавление в запрос пустых данных
Есть такая проблема из клиентской части в БД добавляю значения, но иногда они могут быть пустыми, с обычными текстовыми полями проблем нет,...

Вставка данных не из БД в DBGrid
Доброго времени суток уважаемые форумчане! Тема, казалось бы довольно избитая, но все же... Требуется вставить в DBGrid значения из...

Вставка данных из базы в RichEdit
Добрый день!!! Возникла такая проблема. База данных сделана в Access'е. В таблице есть столбец (тип данных:поле Мемо), в котором...

6
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.09.2011, 00:37
Ну вообщето параметры нужны для того чтобы при помощи их заносить щначения в запрос, а здесь у тебя не видно что ты эти параметры заносишь в запрос

Добавлено через 3 минуты
А ты не пробывал написать так

C++
1
float = 0.00
0
1 / 1 / 1
Регистрация: 18.07.2011
Сообщений: 90
18.09.2011, 14:02  [ТС]
пробовал и так тоже. (только float a=0.00) Разницы с NULL нет. Пошагово прохожу код - всё ОК - ошибка вылетает в последней стоке - Open(ExecSQL).
Но странно, что при первом запуске - одна ошибка, а при взаимной смене последей стоки - постоянно другая ошибка выскакивает. - Сей фокус для меня совсем непонятен. Причём таблица в результате заполняется и ДАННЫЕ ЗАНОСЯТСЯ в таблицу правильно!!!
Может просто прописать исключение на эту ситуацию, чтобы не реагировать никак на возникающую ошибку?

Добавлено через 29 минут
Странно, но сегодня ExecSQL заработал так как надо (видимо просто требовалась перезагрузка ПК)
Насчёт моих проб проделать данные операции через Open() - прочитал - что эта ф-я не применяется для подобного рода операций (она возвращает курсор - поэтому и ошибка - error creating cursor handle) - применяется исключительно для SELECT, а ExecSQL - во всех остальных случаях.
0
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
18.09.2011, 17:13
я бы немного упростил код
C++
1
2
3
4
if (!Edit2->Text.Length())
    Edit2->Text = "0";
Query2->SQL->Text = "INSERT INTO N_jobs(Material,Stoimost) VALUES ('"+Edit1->Text+"', "+Edit2->Text+")";
Query2->ExecSQL();
0
1 / 1 / 1
Регистрация: 18.07.2011
Сообщений: 90
18.09.2011, 18:28  [ТС]
Ты немного обхитрил задачу - заполнил пустое поле Edit->Text ))
А насчёт VALUES ('"+Edit1->Text+"', "+Edit2->Text+") - здесь у меня возникла проблема и я ушёл от неё с помощью параметров. У меня компилятор ругался на "+Edit2->Text+", насчёт '"+Edit1->Text+"', - тут что-то ты с кавычками, наверное, переборщил...
0
 Аватар для Lelik-pahan
1709 / 905 / 207
Регистрация: 25.11.2009
Сообщений: 1,850
18.09.2011, 18:59
1) если нельзя заполнять пустое поле, то можно написать так:
C++
1
2
3
AnsiString stoimost = Edit2->Text;
if (!stoimost.Length())
    stoimost = "0";
и вставлять в запрос не Edit2->Text, а stoimost

2)
Цитата Сообщение от vvspl Посмотреть сообщение
А насчёт VALUES ('"+Edit1->Text+"', "+Edit2->Text+") - здесь у меня возникла проблема и я ушёл от неё с помощью параметров. У меня компилятор ругался на "+Edit2->Text+"
он должен был ругаться, когда поле эдит2 было пустое. Для этого я и делал проверку.

3)с кавычками я не мудрил, всё правильно. Поле mat у тебя является текстовым, соответственно значение нужно писать в апострофах. Например, если у тебя в Edit1 написано шёлк, в Edit2 написано 123, то написав
C++
1
Query2->SQL->Text = "INSERT INTO N_jobs(Material, Stoimost) VALUES ('"+Edit1->Text+"', "+Edit2->Text+")";
ты получишь такой запрос
INSERT INTO N_jobs(Material, Stoimost) VALUES ('шёлк', 123)
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
19.09.2011, 10:17
if (Edit2->Text.IsEmpty()) Query2->Params->Items[1]->Clear()

Добавлено через 2 минуты
А правильнее так:
if (Trim(Edit2->Text) == "")) Query2->Params->Items[1]->Clear();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2011, 10:17
Помогаю со студенческими работами здесь

Вставка данных в базу из Edit
Доброго времени суток! void __fastcall TForm2::Button1Click(TObject *Sender) { IBQuery1->Active=false; IBQuery1->SQL->Clear(); ...

Вставка данных в ссылку и переход по ней
Здравствуйте. Возник такой вопрос: есть ссылка вида http://site.ru/api.php?id=123&pass=12345 где id - это id юзера, pass - пароль и такая...

Вставка выборки из базы данных в отдельную таблицу
Есть некоторая база данных на Interbase. Из неё производится выборка полей таблиц и последующая вставка этих полей в отдельную таблицу, ни...

Вставка в таблицу данных из другой программы и переменных одновременно c++ builder
Собственно, имеется таблица(table1) с 4мя столбцами, в нее нужно вставить строку, в которой два столбца это выборка(и) из другой...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru