Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Agent654
0 / 0 / 0
Регистрация: 26.06.2018
Сообщений: 68
1

Исправить ошибки в написании алгоритма записи в БД Access

10.07.2018, 09:20. Просмотров 358. Ответов 3

Здравствуйте. Собственно в чём проблема. Я пишу программу проверки знаний формул по физике. И для статистике хотел бы сделать топ 3-ёх формул по которым ученик делает ошибки. Вот код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
if (GroupBox1.Visible = true) then
   begin
// ---------------------------------------- Алгоритм проверки Edit-ов -----------------------------------------
        ADOQuery1.SQL.Text:= 'SELECT chislitel FROM Таблица1 WHERE id_formula = '+Ttext1;
        ADOQuery1.Open;
        nameText:= ADOQuery1.Fields[0].AsString;
        ADOQuery1.Close;
 
        ADOQuery1.SQL.Text:= 'SELECT znamenatel FROM Таблица1 WHERE id_formula = '+Ttext1;
        ADOQuery1.Open;
        nameText2:= ADOQuery1.Fields[0].AsString;
        ADOQuery1.Close;
 
        ADOQuery1.SQL.Text:= 'SELECT bukva_voprosa FROM Таблица1 WHERE id_formula = '+Ttext1;
        ADOQuery1.Open;
        nameText3:= ADOQuery1.Fields[0].AsString;
        ADOQuery1.Close;
        if (nameText = Edit2.Text) and (nameText2 = Edit3.Text) and (nameText3 = Edit1.Text) then source:= source + 1
        else
        begin
        errors:= errors + 1;
// Sql запрос который смотрит если count(кол-во ошибок) с такой id_forlmula и с таким ID студента 
 
 
        ADOQuery3.SQL.Text:= 'SELECT count FROM Таблица1 WHERE id_formula = '+Ttext1+' AND id_student = '+nameText1;
        ADOQuery3.Open;
        count := ADOQuery3.Fields[0].AsString;
        ADOQuery3.Close;
 
// Если нет то программа должна добавить строчку в БД
   if (count = '') then
   begin
        ADOQuery3.close;
ADOQuery3.SQL.Text:='Insert into Таблица1 ([id_student], [id_formula], [count]) Values (:id_student, :id_formula, :count)';
ADOQuery3.Parameters.ParamByName('id_student').Value:= nameText1;
ADOQuery3.Parameters.ParamByName('id_formula').Value:= Ttext1;
ADOQuery3.Parameters.ParamByName('count').Value:= count2 + errors;
ADOQuery3.ExecSQL;
   end else
begin
// А если есть то программа должна к числу в поле count прибавить 1+
count2:= (StrToInt(count));
ADOQuery3.close;
ADOQuery3.SQL.Text:='UPDATE SET Таблица1 ([count]) WHERE id_formula = '+Ttext1+' AND id_student ='+ nameText1+' Values(:count)';
ADOQuery3.Parameters.ParamByName('count').Value:= count2 + 1;
ADOQuery3.ExecSQL;
end;
 
   end; end;
Таких кусков кода у меня 8. Для каждой формулы. Помогите пожалуйста.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2018, 09:20
Ответы с готовыми решениями:

Исследование быстродействия алгоритма - исправить ошибки в коде
Добрый день! Прошу подсказать несколько технических моментов ибо в c++ новичок. Сделал по...

Найти и исправить ошибки в реализации алгоритма Дейкстры
Алгоритм Дейкстры (построение путей с минимальными цепями) #include<iostream.h>...

Работа с текстовыми файлами.Исправить ошибки записи в текстовый файл
Дан текстовый файл(С:\\temp\\filemas1), первые 2 символа- кол-во строк(n) и столбцов(r)...

Написании циклического алгоритма суммы
Какое начальное значение s? И ошибки такие error C2664: 'sin' : cannot convert parameter 1 from...

Народ очень нужна помощь в написании алгоритма
Написать программу, которая по введенному значению аргумента вы-числяет значение функции, заданной...

3
krapotkin
4065 / 3390 / 1150
Регистрация: 14.04.2014
Сообщений: 16,239
Записей в блоге: 17
10.07.2018, 09:59 2
почему мне кажется, что вы вообще не читали справочник по запросу select ?
https://www.w3schools.com/sql/sql_select.asp

SQL
1
SELECT поле1, поле2, поле3 FROM таблица WHERE условия....
0
drvolodko
218 / 62 / 32
Регистрация: 23.05.2014
Сообщений: 612
11.07.2018, 09:51 3
Присоединяясь к krapotkin, дополню
Цитата Сообщение от Agent654 Посмотреть сообщение
ADOQuery3.SQL.Text:= 'SELECT count FROM Таблица1 WHERE
если значений в базе не окажется, то будет возвращено NULL поэтому тут
Delphi
1
count := ADOQuery3.Fields[0].AsString;
будет вылетать ошибка. Проверку на отсутствие набора данных лучше делать так:
Delphi
1
if ADOQuery3.isEmpty then
или
Delphi
1
if ADOQuery3.EOF then
0
krapotkin
4065 / 3390 / 1150
Регистрация: 14.04.2014
Сообщений: 16,239
Записей в блоге: 17
11.07.2018, 10:02 4
ну тогда и я дополню
плохая практика использовать номер поля Fields[n]
лучше все-таки имя FieldByName('ccc')
0
11.07.2018, 10:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2018, 10:02

Ошибки в написании админки
Подскажите пожалуйста как написать часть кода к админке. Мне нужно чтобы было текстовое поле в...

Ошибки в написании, исправьте
uses crt; const r:set of char=; var s,st,a:string; i,j,k,ns,max,nmax:byte; b:array of...

Ошибки в написании кода
Доброго времени суток! Нужно было написать подобие школьного журнала, но у меня возникли три...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.