Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9

Вставить значение в переменных в базу данных

21.05.2010, 09:34. Показов 3163. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте! Помогите плжалуйста, уже сегодня второй день не могу найти решению. У меня такая проблема: Есть база данных, Database.mdb, там есть таблица students, поля question, Answered, Answer.

Delphi
1
2
3
4
5
6
7
8
9
10
s1:=Memo1.Text;
s2:=RadioGroup1.Items[RadioGroup1.ItemIndex];
s3:=Label1.Caption;
 
with ADOQuery2 do begin
  Close;
  SQL.Clear;
  SQL.Add('Insert into students(question, Answered, Answer) values(:s1, :s2, :s3);');
  ExecSQL;
End;
И там ошибка с какой-то Paremeter
Думаю я не правильно написал команду Insert для Дельфи... помогите пожалуйста...
Заранее всем спасибо, за внимание
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2010, 09:34
Ответы с готовыми решениями:

INSERT INTO не добавляет в базу данных значение переменных из формы
Привет всем. Проблема такая, есть форма и ее обработчик, когда отправляю запрос на добавление в базу в нее не чего не отправляется. В...

В базу передаются имена переменных, а не их значение
Всем привет! Столкнулся с такой ситуацией. Изучаю php и попытался написать регистрацию. <? if (isset($_POST)) {$login =...

Как вставить null значение в базу?
Как вставить null значение в базу? Поле пометил как возможно null? if (checkBox26.Checked) parameters +=...

12
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
21.05.2010, 10:16
значения вот этого блока
Delphi
1
2
3
s1:=Memo1.Text;
s2:=RadioGroup1.Items[RadioGroup1.ItemIndex];
s3:=Label1.Caption;
не попадают вот сюда
SQL
1
VALUES(:s1, :s2, :s3)
только потому что вам кажется, что они ДОЛЖНЫ туда попасть, ибо вы дали им одинаковые названия.

для этого вы должны произвести явное присвоение параметрам
что-то типа
Delphi
1
ADOQuery2.ParamByName('s1').AsString:=s1
тут в синтаксисе могу ошибаться, т.к. с ADO не связывался, но принцип примерно таков.
1
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
21.05.2010, 12:07  [ТС]
arni, здравствуйте. Спасибо за ответ, во первых.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
with ADOQuery2 do
Begin
  Close;
  SQL.Clear;
  SQL.Add('insert into students (id, question, Answered, Answer) values(');
  FieldByName('id').AsString:='1';
  FieldByName('question').AsString:=Memo1.Lines.Text;
  FieldByName('Answered').AsString:=Label2.Caption;
  FieldByName('Answer').AsString:=Label1.Caption;
  SQL.Add(')');
  ExecSQL;
End;
Но не получается, Ошибка такая: ADOQuery2: Field 'id' not found, на самом деле у меня на базе есть такие и field ы
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
21.05.2010, 12:13
Вы всё в кашу превратили.
Во-первых я судачил о ParamByName, а вы почему-то замутили FieldByName.
Во-вторых, куда вы дели перечисление переменных в insert? Они были там очень даже к стати.
Ну и наконец,
Delphi
1
SQL.Add(')');
это прост оотжиг. Раньше у вас все было правильно на этом месте.
1
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
21.05.2010, 12:59  [ТС]
arni, у меня с SQL запросами ничего не получилось, но я тот проблему решил с помощью ADOTable.
Вы не могли бы объяснить мне ADOTable1.Locate()?
Вот здесь находится open sourse:
http://www.greatis.com/delphic... otsql.html
0
Тимуровец
 Аватар для Страдалецъ
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
21.05.2010, 13:19
Мда ужжжж
Всего-то и надо было:
Delphi
1
2
3
4
5
6
7
8
9
with ADOQuery2 do begin
  Close;
  SQL.Clear;
  SQL.Add('Insert into students(question, Answered, Answer) values(:s1, :s2, :s3);');
  Parameters.ParamValues['s1'] := Memo1.Lines.Text;
  Parameters.ParamValues['s2'] := Label2.Caption;
  Parameters.ParamValues['s3'] := Label1.Caption;
  ExecSQL;
End;
А Locate нужен для поиска значений в таблице.
1
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
21.05.2010, 17:15  [ТС]
Все ясно стало! Спасибо Вам!
Я сделаю программу тестирование для своего курсового,
Теперь у меня появляется другая проблема:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
   try
     with ADOQuery1 do
       Begin
         Close;
         SQL.Clear;
         SQL.Add('Insert into students(id, question, Answered, Answer) values(:s1, :s2, :s3, :s4);');
         Parameters.ParamValues['s1'] := Label2.Caption;
         Parameters.ParamValues['s2'] := Memo1.Text;
         Parameters.ParamValues['s3'] := RadioGroup1.Items[RadioGroup1.ItemIndex];
         Parameters.ParamValues['s4'] := Label1.Caption;
         ExecSQL;
       End;
   finally
     ADOQuery1.Close;
   end;
end;
Что мне надо делать, когда я выбрал кнопки RadioButton1, на базе один раз появился выбранный caption кнопки. У меня получается, много из каждый вопросов, если я выбираю только один раз то конечно появиться на базе один раз.
Спасибо Вам всем огромное за ответы, и должен сказать Вам всем что я начинающий...
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
21.05.2010, 19:06
Цитата Сообщение от yojik Посмотреть сообщение
Что мне надо делать, когда я выбрал кнопки RadioButton1, на базе один раз появился выбранный caption кнопки. У меня получается, много из каждый вопросов, если я выбираю только один раз то конечно появиться на базе один раз.
Вы изъясняетесь хуже первоклашки. Я прочитал написание вами трижды и не понял, что именно вы хотите спросить.
0
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
22.05.2010, 09:23  [ТС]
Здравствуйте! У меня вот здесь не работает:
Delphi
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
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  with ADOQuery1 do begin
    Close;
    SQL.Clear;
    SQL.Add('select id from students where id=:s');
    Parameters.ParamValues['s'] := Label2.Caption; //Label2.Caption - íîìåð âîïðîñà
    Open;
    if FieldByName('id').AsString='' then begin//Åñëè ïóñòî
      With ADOQuery2 do begin
        Close;
        SQL.Clear;
        SQL.Add('Insert into students(id, question, Answered, Answer) values(:s1, :s2, :s3, :s4)');
        Parameters.ParamValues['s1'] := Label2.Caption;
        Parameters.ParamValues['s2'] := Memo1.Text;
        Parameters.ParamValues['s3'] := RadioGroup1.Items[RadioGroup1.ItemIndex];
        Parameters.ParamValues['s4'] := Label1.Caption;
        ExecSQL;
      end;
    end
    else
      With ADOQuery2 do begin
        Close;
        SQL.Clear;
        SQL.Add('update students set Answer=:s2 where id=:s1');
        Parameters.ParamValues['s1'] := Label2.Caption;;
        Parameters.ParamValues['s2'] := RadioGroup1.Items[RadioGroup1.ItemIndex];
        ExecSQL;
      end;
  End;
end;
Если использовать кнопку F7 (Step Over), то есть если по шаговой проверить работу программы, то все видно и в базе данных появляется, например первый вопрос только один раз. Если же использовать F9 (Run), то код не работает, в базе например появляется с первого вопроса три раза (если нажмешь три раза на radioButton1). Типа во так:

id question Answered Answer
1 Первые ЭВМ были созданы … в 40-е годы в 60-е годы
2 Первые ЭВМ были созданы … в 40-е годы в 60-е годы
3 Современную организацию ЭВМ предложил… Джон фон Нейман Ада Лавлейс
4 Первая ЭВМ в нашей стране появилась… XX веке в ХIХ веке
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
22.05.2010, 09:37
помедитируйте над этим:
SQL
1
SELECT id FROM students WHERE id=:s
вы просите SQL-сервер вернуть то, что вы и так знаете
0
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
22.05.2010, 09:50  [ТС]
Здравствуйте, arni.
Ведь я же должен показать в каком строке вставить или обновить дату, например, вопрос 3-й, я и должен вставить или обновить данные в 3-й сроке.
Anyway, почему если я проверяю программу с F7 то код работает, если с F9 нет, НЕПОНЯТНО!!!
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
22.05.2010, 09:59
Цитата Сообщение от yojik Посмотреть сообщение
Ведь я же должен показать в каком строке вставить или обновить дату, например, вопрос 3-й, я и должен вставить или обновить данные в 3-й сроке.
Это попытка защитить свой код?
Перевожу на русский ваш запрос:
предположим в переменную S вы передаете значение 3. Итак:
Скажи мне чему равно поле ID у поля, у которого ID равняется 3
Итак, вы обречены получать из запроса ровно то значение, которое передали в переменной (либо вообще ничего, если такой записи не нашлось).
1
0 / 0 / 0
Регистрация: 21.05.2010
Сообщений: 9
22.05.2010, 10:28  [ТС]
arni, Вы не могли бы написать тот часть программы, каков он должен быть по Вашему?
Есть кнопка "Вперед", нажав на нее, его функция переход на другой вопрос, есть RadioButton1, там есть четыре кнопки ответов, выбрав на ответы, вопрос, номер вопроса, ответ, и ответ пользователя записывается на students, которые есть поля id, question, Answered, Answer. Если ответ на любой вопрос осуществляется первый раз, то пусть "insert", если положим пользователь думал что это не правильный ответ на тот вопрос то пусть "update". Или посоветуйте мне, пожалуйста. Спасибо Вам за ответы. Я многое научил Вас.

Добавлено через 2 минуты
Или как можно проверить что i-строка базы данных пустая или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2010, 10:28
Помогаю со студенческими работами здесь

Запись переменных в базу данных
Добрый вечер форумчане! Помогите пожалуйста в вопросе. Есть две переменных логин и пароль, которые необходимо занести в базу данных. В...

Вставить данные из DataSet в базу данных
Здравствуйте. DataSet содержит большую(около 5 тыс. записей) таблицу с данными, полученную из xml файла. В базе данных есть такая же по...

Вставить файл в базу данных MySQL
Доброе время суток! Столкнулся с такой проблемой. Есть файлы которые нужно положить в базу данных MySQL (все это реализовывал с SQL...

вставить значения из select в базу данных
Здравствуйте. Помогите пожалуйста. Есть форма, пользователь выбирает из выпадающего списка (select) некое значение, как только он выбрал,...

Как можно вставить видео в базу данных?
подскажите пожалуйста, как можно вставить видео в базу данных делфи! зараннее спасибо


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru