Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > запись данных в БД |
Автор: Zigmyndshtein 29.5.2008, 20:43 |
подскажите пожалуйста как мне передать данные с формы в БД я использую компонент Query, в его свойстве SQL содержится такая строка "select *from <table>", это строка мне нужна для операции с полями базы. как нме при таком раскладе собрать данные из компонентов Edit на фотме и записать их в базу. я пробовал query->FildByName("имя поля")->Value=Edit->Text; но ничего не вышло, вывалилась ошибка |
Автор: Rodman 29.5.2008, 20:46 |
используй не SELECT, а INSERT! |
Автор: Dmi3ev 29.5.2008, 21:40 | ||
не понимаю в чем у Вас проблема? вот так не подходит?
писал прям тут, но ошибок вроде нет ![]() |
Автор: Данкинг 29.5.2008, 23:39 |
Может, Query1->ExecSql ? |
Автор: Zigmyndshtein 29.5.2008, 23:49 | ||||
этот код вешать на кнопку? если так то я уже пробовал этот вариант! ругается... на "плюсы" ругатеся и говорит, что запись не может быть добавлена. може как то нужно открыть базу или ещё чего? |
Автор: Данкинг 29.5.2008, 23:52 |
На кнопку добавления данных. Какие плюсы? Что именно пишет в ошибке? Открыть - не открыть, но подключиться к ней определённо не мешало бы! ![]() |
Автор: Zigmyndshtein 29.5.2008, 23:58 |
Данкинг, база подключна через Query. а зачем прописывать в самом начале запроса Query->Close(); а ругается на те плюсы которые перед и после Edit-ов стоят Добавлено через 4 минуты и 56 секунд я впринципе понимаю что сдесь ничего нет сложного, но может я где-то что-то упустил? |
Автор: Данкинг 30.5.2008, 00:09 | ||
А сам Query куда подключён? Чтобы закрыть запрос, а затем обязательно надо очистить его SQL-данные (что мы и видим в примере). Так какая именно ошибка? Попробуй через параметры (в синтаксисе Билдера могу ошибиться):
|
Автор: jonie 30.5.2008, 00:27 | ||
|
Автор: Данкинг 30.5.2008, 01:11 | ||||
Ну понятно, я с Дельфи переделывал. Сейчас исправлю. |
Автор: Dmi3ev 30.5.2008, 10:12 | ||||
Данкинг, на счет execsql ты прав, это же не запрос на выборку ![]() Zigmyndshtein, я немного неправильно написал, чтобы работало, надо так:
добавились кавычки одинарные перед и после Edit-ов, заметил? это чтобы он понимал, что мы добавляем свой текст, а не имя поля. если будешь добавлять число, то не надо их ставить, и так понятно, что это не имя поля. если бы у нас были числовые поля, а не текстовые, мы бы так написали:
эти примеры я проверил, работают. |
Автор: Zigmyndshtein 30.5.2008, 11:35 |
попробовал я этот код: Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("INSERT INTO Obchii_jyrnal (Num_zajavki) VALUES ( "+StrToInt(Edit1->Text)+")"); Query1->ExecSQL(); выпала ошибка ещё при компидяции: [C++ Ioeaea] Unit3.cpp(32): E2085 Invalid pointer addition со следующим вариантом кода: Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("INSERT INTO Obchii_jyrnal (Num_zajavki, Dataa) VALUES ( '"+Edit1->Text+"', '"+Edit2->Text+"')"); Query1->ExecSQL(); вроде всё нормально, он красиво комплицца и прога запускается, но при нажатии на кнопку занесения данных в дазу на которой висит код вываливается сообщение: Prolect Project2.exe raised exception class EDBEngineError with message 'Fild value required.'. Process stoeppd. Use Step or Run to continue |
Автор: Dmi3ev 30.5.2008, 12:12 |
разберитесь с типами полей, из за этого у вас все проблемы. давайте подробнее: 1. какая бд(paradox, dbase, ... )? 2. имена полей и типы? 3. куда и чего вставить? а то приходится догадываться, что там у вас. |
Автор: TaNK 30.5.2008, 12:17 | ||||
Dataa - какого типа Date или varchar? |
Автор: Zigmyndshtein 30.5.2008, 13:24 |
Dmi3ev, БД paradox поле(Num_Zajavriki) тип Number(N) поле(Dataa) тип Date(D) и есть поле Naimenovanie тип Alpha(A) и нужно из Edit-тов на форме собрать данные записать в БД |
Автор: Dmi3ev 30.5.2008, 14:17 | ||
этот код работает 100 процентов, только что компилировал:
поля F1-N F2-A-50 F3-D вводи число, например 1 в эдит1, строку в эдит2, а дату в формате дд.мм.гггг в эдит3!!! точно работает))) |
Автор: Zigmyndshtein 31.5.2008, 00:21 |
Dmi3ev, я попробовал этот код в отдельном проекте, он действительно работает, а в моём проекте не хочет, вываливается сообщение об ошибке: Prolect Project2.exe raised exception class EDBEngineError with message 'Fild value required.'. Process stopped. Use Step or Run to continue может ли вываливаться ошибка если запрос на запись данных в БД производится на второй форме, а на перво форме используется таже БД и таже таблица для просмотра |
Автор: Dmi3ev 31.5.2008, 14:12 | ||
может, но тогда должно появляться сообщение о том, что таблица занята (хотя у парадокса бываю загоны, проверь), а здесь мы видим, что ошибка в том, что значение поля обязательно!!! надо просто внимательно посмотреть: 1. сколько значений ты вставляешь и сколько полей (равно ли это число) 2. убрать свойство required у полей 3. типы полей и того, что ты вставляешь если ничего не получится, выкладывай проект, просто так будет проще и быстрее, кто-нибудь да поможет, а представлять как у Вас там и чего гораздо труднее))) |
Автор: Zigmyndshtein 31.5.2008, 17:37 |
Dmi3ev, нашел в чем была проблемма. я добавлял всего одну запись в базу, а обязательных для заполнения стояло 2 поля!!! спасибо за помощь!!! ![]() ещё один вопросик мелочный как после закрытия одной формы обновить данные в той фотме которая отбражает содержимое базы (после закрытия формы заполнения форма отображения становится активной) |
Автор: Dmi3ev 31.5.2008, 21:47 | ||
если там, допустим, данные хранятся в Table, то тогда надо написать:
ваще есть еще рефреши всякие, но так точно можно))) |
Автор: Zigmyndshtein 1.6.2008, 10:48 |
Dmi3ev, у мня правдо вместо тайбл используется query, ну а куда новесить лучше эту процедуру, если по закрытию одной формы должна обновиться вторая |
Автор: Данкинг 1.6.2008, 10:59 |
Тогда заново выбрать данные в запрос... ![]() |
Автор: Xolodna 2.6.2008, 14:16 |
Ребят, у меня практически такая же проблема. При попытке добавления новой записи в таблицу, билдер выдает ошибку "Ошибка синтаксиса в инструкции INSERT INTO". Перепробовала уже всё, что знала - никак не хочет добавлять:( Может, вы хоть чем поможете. Вот код: AnsiString id_opr = DBEdit1->Text; AnsiString id_answ = DBLookupComboBox4->KeyValue; AnsiString date = MaskEdit1->Text; ADOQuery2->Close(); ADOQuery2->SQL->Clear(); ADOQuery2->SQL->Add("INSERT INTO Rezults (id_opr, id_answ, date) VALUES ('"+id_opr+"','"+id_answ+"','"+date+"');"); ADOQuery2->ExecSQL(); |
Автор: gather 2.6.2008, 14:25 |
Запрос, который пытается выполнить - в студию (точнее сказать сюда) давайте |
Автор: Xolodna 2.6.2008, 15:07 |
Эээм... да я вроде как его написала в сообщении.... |
Автор: Rififi 2.6.2008, 15:12 | ||
ошибка, я уверен, в неправильном формате даты (переменная date) чтобы её избежать, для этого придумали параметры команды. в гугле полно примеров, юзай поиск. |
Автор: Xolodna 2.6.2008, 15:28 | ||
Поюзаю, конечно, на всякий случай, но дело в том, что один запрос на добавление подобного вида уже есть, и он работает, и не ругается ни на что. Там такая же дата, такого же формата. Поэтому я, мягко говоря, в недоумении:( |
Автор: gather 2.6.2008, 15:33 |
вместе с реальными данными, которые Вы добавляете. Выведите запрос например в memo и copypaste сюда. |
Автор: Xolodna 2.6.2008, 16:08 |
Всем огромное спасибо! Ошибку нашла и она действительно была связана с полем даты, как и сказал Rififi. Вот исправленная строка: ADOQuery2->SQL->Add("INSERT INTO Rezults (id_opr, id_answ, [date]) VALUES ("+id_opr+","+id_answ+",'"+date+"');"); Просто не хватало скобочек квадратных ![]() |
Автор: Zigmyndshtein 3.6.2008, 16:45 |
спасибо огромное всем за помощь |
Автор: blackDancer 12.2.2009, 19:48 | ||
Посмотри здесь http://forum.vingrad.ru/forum/topic-245869/anchor-entry1775201/0.html в самом конце темы может то? |