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

DBgrid

25.05.2015, 13:59. Показов 2264. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток программисты. В Accsess создана БД с ключевым полем ID, и БД в Dlephy7 выводится в DBGrid, немогли бы вы подсказать можно ли взять все значения ID и поместить в одномерный массив. Немного поясню что к чему, надо сделать программу, тесты, причем программа должна уметь как и проводить тест так и создавать вопросы к этому тесту, в БД хранятся сами вопросы, каждому вопросу соответствует свой ID, в тесте всего 5 вопросов, и надо сделать так чтобы и из всех вопросов в случайным образом выбирались 5 вопросов. Как мне сделать так чтобы все существующие ID копировались в масив (просто если добавить туда вопрос он будет иметь допустим ID 1, а потом удалить его и добавить следующий то он будет иметь ID 2 и так далее). Возможно ли это ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2015, 13:59
Ответы с готовыми решениями:

Запросы: для выбранного в DBGrid сотрудника отобразить информацию в другом DBGrid
Добрый вечер! Вот какой вопрос необходимо для выбранного сотрудника в DBGrid отобразить информацию в другом DBGrid допустим об образовании....

Как вывести в DBGrid информацию только по выбранной строке в другой таблице DBGrid?
У меня есть 3 таблицы - Компании, Адреса и Квартиры. Компании содержит поля - Код компании и название Адреса содержит поля - Код...

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

53
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.05.2015, 16:02
Студворк — интернет-сервис помощи студентам
GoOFee, это ты обращаешься неинициализированной памяти, а где именно прога падает? случайно не при присвоении значения элементу массива?
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
25.05.2015, 16:22  [ТС]
northener, спасибо все вроде работает, осталось сделать процедуру рандома для выобра элементво

Добавлено через 54 секунды
Lord_Voodoo, да там все сделал работаетосталось организовать процедурудля рандома

Добавлено через 11 минут
И опять мне нужна помощь вот есть вот это чудо
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
procedure TForm4.Button1Click(Sender: TObject);
var
  i,n:integer;
  mas: array of integer;
begin
  setlength(mas,100);
  Form2.DBGrid1.DataSource.DataSet.First;
  i:=0;
while  not Form2.DBGrid1.DataSource.DataSet.Eof do
begin
  mas[i]:=Form2.DBGrid1.DataSource.DataSet.FieldByName('ID').Value;
  Form2.DBGrid1.DataSource.DataSet.Next;
  i:=i+1;
end;
   randomize;
   for  i:=0 to 5 do;
   begin
   n:=random(mas[i]);
   Form2.DBGrid1.DataSource.DataSet.First;
   if n= Form2.DBGrid1.DataSource.DataSet.FieldByName('ID').Value  then
   begin
    Memo1.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Qustion').Text;
    Memo2.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer1').Text;
    Memo3.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer2').Text;
    Memo4.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer3').Text;
   end;
   i:=i+1;
   end;
end;
но по нажатию кнопки не чего не происходит, вообще 0 на массу, из-за чего это может быть ? По идеи в полях мемо должно выводится вопрос и варианты ответа
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.05.2015, 16:30
GoOFee, ну так гляньте, что у вас происходит пошагово... смущает сразу отсутствие цикла, в котором бы вы искали нужный ID, а во-вторых, странная организация получения случайных чисел (см. строку 18)...
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
25.05.2015, 16:35  [ТС]
Lord_Voodoo, да точно, а есть еше вопрос, я вот выделял память в массиве на 100 элементов, а можно ли как то выделять ее на столько элементов сколько строк в БД ? и как мне тогда подругому организавать 18 строчку ?
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
25.05.2015, 16:41
Цитата Сообщение от GoOFee Посмотреть сообщение
можно ли как то выделять ее на столько элементов сколько строк в БД ?
В данном простом случае кол-во записей в таблице даст Dataset.RecordCount
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
25.05.2015, 19:41  [ТС]
northener, Lord_Voodoo, вот я тут немного поразмыслив пришол к выводу что все что я делал на смарку и все переделал тепреь код имеет следующий вид
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm4.Button1Click(Sender: TObject);
 var
 a :integer;
begin
   Randomize;
   a:=random(Form2.DBGrid1.DataSource.DataSet.FieldByName('ID').AsInteger) ;
   Form2.DBGrid1.DataSource.DataSet.First;
   While not Form2.DBGrid1.DataSource.DataSet.Eof do
   begin
   if a=Form2.DBGrid1.DataSource.DataSet.FieldByName('ID').AsInteger then
   begin
   Memo1.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Qustion').Text;
   Memo2.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer1').Text;
   Memo3.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer2').Text;
   Memo4.Text:=Form2.DBGrid1.DataSource.DataSet.FieldByName('Answer3').Text;
   end
   else
   Form2.DBGrid1.DataSource.DataSet.Next;
   end;
end;
в начале я забыл зациклить, и она работала правда иногда приходилось нажимать пару раз кнопку, чтобы что то вывело, плюс еше есть не понятки, при трасировке я просматривал переменную а, и были интерестные результаты , вопервых там появляются только числа от 0 до 2, и еше что более интерестно что в БД записей с ID 0 и 2 нету но почемуто он их получал отуда, в БД существуют такие ID: 1 3 5 6 7 8 9, откуда там появились значения 0 и 2 не понятно, и почему он не берет другие значения, когда а=1 то все норм правильно выводит. Вот а когда я реализовал цикл, то получилось следующее, просто по нажатию кнопки не чего не происходит, нажимаешь ее пару раз и она зависает, (зависает само приложение не Delphy) и надо его закрывать через диспечер задач, потому что по другому не получается, при этом не какую ошибку не выводит, а в диспечере задач имеет состояние не отвичает, можете с этим помочь ?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.05.2015, 09:04
GoOFee, слушай, я знаю, как тебе помочь - не используй ID, а просто физическое положение записи в таблице... а на счет зависания - у тебя просто зацикливание происходит, когда не находит ID, IMHO... покажи код, который виснет
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
26.05.2015, 16:40  [ТС]
Lord_Voodoo, код выше обработка кнопки на ней виснет, а про физическое положение записи в таблице я не понял
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.05.2015, 18:27
GoOFee, ну какая тебе разница, брать ID или положение записи в таблице? причем в расположении нет пропущенных номеров, все номера заполнены
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
26.05.2015, 18:38  [ТС]
Lord_Voodoo, а как тогда это сделать ?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.05.2015, 18:41
GoOFee, делаешь сначала First, а потом а раз Next в таблице вопросов
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
26.05.2015, 19:00  [ТС]
Lord_Voodoo, да но для этого мне необходимо в а занести общее количество вопросв, вот как это сделать я не понимаю, разве что написать цикл который будет проходить по всей таблици с помощь next, а потом каждый раз когда сделает 1 шаг поставить инкремент для переменной а
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
27.05.2015, 08:35
GoOFee, учите SQL, в подобных задачах он вам пригодится:
SQL
1
SELECT COUNT(*) FROM TABLE_NAME
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
27.05.2015, 13:55  [ТС]
Lord_Voodoo, и как мне его в Delphy запхнуть ? Данная задача я надеюсь будетоднократной
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
27.05.2015, 14:00
Цитата Сообщение от GoOFee Посмотреть сообщение
мне необходимо в а занести общее количество вопросв, вот как это сделать я не понимаю
Мое сообщение https://www.cyberforum.ru/post7667127.html не помогло?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
27.05.2015, 14:04
GoOFee, ты не знаешь, как выполнить запрос и вычитать результат его выполнения?
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
27.05.2015, 17:05  [ТС]
Lord_Voodoo, угу

Добавлено через 1 час 39 минут
northener, нет
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
27.05.2015, 17:39
Цитата Сообщение от GoOFee Посмотреть сообщение
northener, нет
Странно.
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 106
27.05.2015, 18:25  [ТС]
northener, я правильно понимаю Dataset.RecordCount получает общее количество записей ?

Добавлено через 8 минут
northener, у меня тут другой вопрос появился как вытащить на какой записи находишься в данный момент

Добавлено через 17 минут
попробую немного пояснить думаю сделать так, я взял общее количество записей с помощью функции RecordCount и записал их в переменную "а" потом я в переменную "i" присваиваю случайное значение из переменной а в коде выглядит так
Delphi
1
2
3
a:=Form2.DBGrid1.DataSource.DataSet.RecordCount;
randomize;
i:=random(a);
А теперь я хочу сдлеть так чтобы функция dataset.next выполнялась до того момента пока текущий номер записи не ровна переменной i, как только оно будет равно i тогда в элементы memo выводить текст с текущей записи
Как то так

Добавлено через 4 минуты
Все проблема вроде бы решена

Добавлено через 4 минуты
и опять вопрос, как сделать так чтобы случайным образом получалось допустим 10 чисел из 50 без повторения
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
27.05.2015, 19:26
Цитата Сообщение от GoOFee Посмотреть сообщение
и опять вопрос, как сделать так чтобы случайным образом получалось допустим 10 чисел из 50 без повторения
ну так записывай в массив полученные значения и пропускай повторы...


кстати, использовать не совсем правильно RecordCount, т.к. есть ситуации, когда это значение будет отображать некорректное значение, к примеру, если данные из БД вычитываются буферизированно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2015, 19:26

Фиксирование нужных столбцов DBGrid или скрыть относительно позиции гор. скролла DBGrid'a необходимые столбцы
Добрый день! Можно ли в компоненте DBGrid сделать фиксированными определенные столбцы? или же как то вычислять позицию горизонтального...

Из dbGrid вывести выбранные строки в другой DbGrid
Мне надо вывести Из dbGrid вывести выбранные строки в другой DbGrid, например есть 100 записей в одном DbGrid нужно вывести 1-ю и 4-ю в...

Перенос записей из одного DBGrid в другой DBGrid
Здравствуйте. Есть проблема! Ни как ни получается перенос записей Вот текст кода: procedure TF_Licenzie.DBGrid1CellClick(Column:...

Связывание индикатора DBGrid со значениями в другом DBGrid
Доброго дня! Имеется два DBGrid с подключенными разными взаимосвязанными таблицами, также один ADOConnection, два ADOQuery и два...

Из dbgrid передать активную строку в другой dbgrid
Приветствую! Подскажите как реализовать следующее: база access, подключение Ado, на форме zakaz таблица, нужно что бы по нажатию на строку...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru