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

БД и Delphi. Запрос внутри кода программы.

17.04.2012, 21:55. Показов 2170. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу программу тестирования. Возникла проблема. Состоит она вот в чем.
Есть две формы, форма входа и основная форма. На форме входа тестируемый выбирает свою группу, фамилию и тему. все это в 3х разных комбобоксах (подгоняется из бд).
На основной форме реализуется само тестирование. Есть поле мемо для самого вопроса и 4 поля мемо для вариантов ответа. Чтобы вопросы выдавались по конкретной теме, а не все подряд, я пишу такой код (во второй форме):

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
buf4:=Form1.ComboBox3.Text;
 
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select QEST, GOOD_ANS, WR_ONE, WR_TW, WR_THR');
ADOQuery2.SQL.Add('from QESTS,TEST');
//ADOQuery2.SQL.add('where TEST.TEST_ID=QESTS.TEST_ID and ');
//ADOQuery2.SQL.add('TEST.TEST_NAME like "'+buf4+'"');
ADOQuery2.Active:= True;
ADOQuery2.Open;
 
 
good:=0;
bad:=good;
Randomize;
 
rand[0]:=random(4);
go:k:=random(4);
if rand[0]<>k then rand[1]:=k else goto go;
go2:k:=random(4);
if ((rand[0]<>k) and (rand[1]<>k)) then rand[2]:=k else goto go2;
go3:k:=random(4);
if ((rand[0]<>k) and (rand[1]<>k) and (rand[2]<>k)) then rand[3]:=k else goto go3;
 
if ((RadioButton1.Checked) and(ADOQuery2.FieldValues['GOOD_ANS']= Memo2.Text)) then inc(good) else
if ((RadioButton2.Checked) and(ADOQuery2.FieldValues['GOOD_ANS']= Memo3.Text)) then inc(good) else
if ((RadioButton3.Checked) and(ADOQuery2.FieldValues['GOOD_ANS']= Memo4.Text)) then inc(good) else
if ((RadioButton4.Checked) and(ADOQuery2.FieldValues['GOOD_ANS']= Memo5.Text)) then inc(good) else
inc(bad);
ADOQuery2.Next;
if not ADOQuery2.Eof then
begin
Memo1.Text:=ADOQuery2.Fields[0].Text;
 
arry[0]:=ADOQuery2.Fields[1].Text;
arry[1]:=ADOQuery2.Fields[2].Text;
arry[2]:=ADOQuery2.Fields[3].Text;
arry[3]:=ADOQuery2.Fields[4].Text;
 
Memo2.Text:=arry[rand[0]];
Memo3.Text:=arry[rand[1]];
Memo4.Text:=arry[rand[2]];
Memo5.Text:=arry[rand[3]];
 
end;
buf4 типа string

Здесь 2 закомменттированные строчки. В них проблема. Пока это комментарий - всё работает. Снимаю комментарий, ничего не выводится.
Подскажите, пожалуйста, как исправить эту проблему.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2012, 21:55
Ответы с готовыми решениями:

Программа на Delphi внутри программы на Delphi
Добрый вечер. Делаю тренажерный комплекс,состоящий из тестирования и программного тренажера. Все написаны на Delphi. Создал ещё один проект...

Вставка кода внутри программы
Здравствуйте! У меня следующий вопрос: можно ли внутри кода программы в любом ее месте вызвать функцию, которая бы вставляла код cpp из...

Использование C++ кода внутри программы на C: какие есть варианты?
Есть программа на C++, и в ней кое-какие нужные функции, которые хотелось бы использовать в программе на C. Переписывать заново функции с...

12
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.04.2012, 22:10
Вы уверены, что сам sql-запрос рабочий?
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
17.04.2012, 22:20  [ТС]
А почему нет? Если Вы имеете ввиду саму базу, то там всё корректно. Что касается кода, я как раз об этом и спрашиваю...
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.04.2012, 22:30
В базе может быть все корректно, но запрос вполне может быть или неверно составлен, или в базе нет удовлетворяющих ему записей.
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
17.04.2012, 22:41  [ТС]
Если ручками выполнить этот запрос в субд, подставив в buf4 то, что стоит в комбобоксе, то он выполняется.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.04.2012, 23:00
Ок. Верю.

Добавлено через 7 минут
Так, стоп. Строка 9. Экранирование. Вместо двойной кавычки и одинарной экранируйте тремя одинарными. На закрывание соответственно четырьмя. Типа этого:
Delphi
1
ADOQuery2.SQL.add('TEST.TEST_NAME like '''+buf4+'''');
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
17.04.2012, 23:09  [ТС]
Попробовала. Не помогло=(
Может, у меня просто что-то не передается. buf4, наверное. Но почему? формы друг друга видят (в uses подключала). Да и запрос вроде простой. Понять не могу, почему не пашет...
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
17.04.2012, 23:23  [ТС]
Прикрепляю схему бд (все таблицы заполнены) и скрины форм.
Миниатюры
БД и Delphi. Запрос внутри кода программы.   БД и Delphi. Запрос внутри кода программы.   БД и Delphi. Запрос внутри кода программы.  

0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.04.2012, 23:40
Посмотрите значение RecordCount после запроса. Если оно равно нулю, значит из базы по запросу ничего не пришло. Если не ноль, то попробуйте вывести результат в DBGrid.
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
17.04.2012, 23:45  [ТС]
HighPredator, вопрос может глупый, но как его посмотреть?
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
17.04.2012, 23:48
Delphi
1
if ADOQuery2.RecordCount<>0 then {...}
0
0 / 0 / 0
Регистрация: 17.04.2012
Сообщений: 10
20.04.2012, 00:36  [ТС]
HighPredator, RecordCount=0, DBGrid пустой =(.
Что же делать...

Добавлено через 12 минут
Проблема в одной строчке:
Цитата Сообщение от Lelena Посмотреть сообщение
ADOQuery2.SQL.add('TEST.TEST_NAME like "'+buf4+'"');
Она не работает.
Я пыталась иначе. С 1й формы брать TEST_ID, и его юзать в запросе :
Delphi
1
2
3
4
5
6
7
8
9
10
buf4:=Form1.Edit2.Text;
 
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select QESTS.QEST, QESTS.GOOD_ANS, QESTS.WR_ONE, QESTS.WR_TW, QESTS.WR_THR, QESTS.TEST_ID');
ADOQuery2.SQL.Add('from QESTS,TEST');
ADOQuery2.SQL.add('where TEST.TEST_ID=QESTS.TEST_ID ');
ADOQuery2.SQL.add('and TEST.TEST_ID='+buf4);
ADOQuery2.Active:= True;
ADOQuery2.Open;
Но в таком случае выдается ошибка синтаксиса (пропущен оператор) в выражении запроса ' TEST.TEST_ID=QESTS.TEST_ID and TEST.TEST_ID=' '. Странная какая-то ошибка, ведь по синтаксису вроде все верно...

HighPredator, одна надежда на Вас!
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
20.04.2012, 01:06
Скобки попробуйте поставить:
Delphi
1
2
3
4
5
6
7
8
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select QESTS.QEST, QESTS.GOOD_ANS, QESTS.WR_ONE, QESTS.WR_TW, QESTS.WR_THR, QESTS.TEST_ID');
ADOQuery2.SQL.Add('from QESTS,TEST');
ADOQuery2.SQL.add('where (TEST.TEST_ID=QESTS.TEST_ID) ');
ADOQuery2.SQL.add('and (TEST.TEST_ID='+Edit2.Text+')');
ADOQuery2.Active:= True;
ADOQuery2.Open;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2012, 01:06
Помогаю со студенческими работами здесь

Как хранить файлы внутри программы на Delphi 7?
Хотелось бы спросить, как хранить файл, в моем случае картинку, внутри программы на делфи 7, чтобы не загружать эту картинку извне?

Компиляция кода внутри программы. как реализовать и что изучать?
Допустим, у меня есть программа с некоторым алгоритмом, однако есть одна функция, реализацию которой я хочу отдать пользователю. Я себе это...

Написание функции для создания точек внутри куба и сферы: перевод кода из C++ в Delphi
Добрый день! В лабораторной работе мне дали задание - создать три трекбара и поместить тысячу точек внутри куба и сферы с кодом на C++: ...

Перевод кода программы из Pascal в Delphi
Помогите пожалуйста перевести когд из Pascal в Delphi, задали задание, а я не шарю в этом. program GRANULIROVANIE; { Компьютерная...

Перевод кода программы из Pascal в Delphi
Привет Всем! Прошу помощи в переводе кода программы из Pascal в Delphi. Буду рад если вы поможите! Заранее спасибо. PROGRAM moddis;...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru