Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2015, 01:19   #1
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Собственно вот для таких анкет, необходимо сделать ПО.
Свою текущую наработку приложил, все работает, единственное не получается корректно заполнять данными анкетируемого.
Код:
Исследование: Социологическое исследование


Центр Исследований уровня жизни просит Вас ответить на несколько
вопросов. Анкета анонимная, фамилия указывать не надо. Для ответа
достаточно обвести кружком варианты ответов (альтернативы), с которыми
Вы согласны.

[1]. Как бы Вы оценили уровень материального положения Вашей семьи
	[1]. живем вполне обеспеченно, можем ни в чем себе не отказывать
	[2]. достаток выше среднего, но покупки престижных товаров затруднительна
	[3]. средняя обеспеченность, немного откладываем
	[4]. живем от зарплаты до зарплаты
	[5]. живем бедно

[2]. Укажите примерный размер денежного дохода, пришедшийся на одного Вашей семьи в прошлом месяце (в рублях)

_________________________

[3]. Согласны ли Вы, что одиночкам легче приспособиться к новым экономическим условиям
	[1]. да, согласен
	[2]. нет, не согласен

[4]. Как изменится материальное положение Вашей семьи в ближайший год
	[1]. улучшится
	[2]. ухудшится
	[3]. останется прежним

[5]. Что Вы собираетесь предпринять для улучшения материального положения Вашей семьи
	[1]. Найду работу по совместительству
	[2]. займусь предпринимательством
	[3]. найду временные приработки
	[4]. ничего не буду делать

[6]. Ваш пол
	[1]. мужской
	[2]. женский

[7]. Ваш возраст (укажите число полных лет)

_________________________

[8]. Какая то чушь

_________________________


Большое спасибо
Тут даже наверное по структуре изменения не потребуется, а вот как заполнять таблицу ответы проходя через вопросы и попутно на них отвечая, при условии, что если данные уже есть и их нужно изменить если данных ранее не было то добавить.

UnANSWER - FASN

Все что было тестировал на форме Form1(UnTMP).

Уже мозг сломал, но думаю что решение здесь должно быть простым...

Последний раз редактировалось Stilet; 18.05.2015 в 07:18.
le7o вне форума Ответить с цитированием
Старый 18.05.2015, 07:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чет вообще не понял в чем проблема...
Ну ладно. Не в первой. Итак:
1) Какими компонентами пользуешься?
2) Какова структура таблицы?
3) Как именно пробовал то что не выходит?
4)...зарезервировано для будущих постов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 07:53   #3
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Ответил Вам в личном сообщении с ссылкой на архив:
1. AdoTable связи и отображение, динамически создаваемые ADOQuery для добавления удаления и изменения (здесь просто дело привычки).
2. Структура таблиц во вложении к личному сообщению.
3. Пробовал проверкой на наличие записей если есть то изменить, если нет то добавить - но здесь я кажется сделал что то не то.
4. Принято.



Цитата:
Сообщение от Stilet Посмотреть сообщение
Чет вообще не понял в чем проблема...
Ну ладно. Не в первой. Итак:
1) Какими компонентами пользуешься?
2) Какова структура таблицы?
3) Как именно пробовал то что не выходит?
4)...зарезервировано для будущих постов.
le7o вне форума Ответить с цитированием
Старый 18.05.2015, 08:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Структура таблиц во вложении к личному сообщению.
Нет у меня Акцесса. Не пользуюсь МС Оффисом.
Цитата:
Пробовал проверкой на наличие записей если есть то изменить, если нет то добавить
Схема на самом деле может быть проще:
Сначала ты проводишь UPDATE. Метод ExecSQL возвращает кол-во записей, которые были обработаны запросом - в данном случае обновлены. Соответственно если этот метод вернет 0 - нужно делать вставку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 08:29   #5
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Давайте по схеме БД, тогда.
Что может быть проще, учитывая, что необходимо название исследования, респонденты, вопросы, ответы (как альтернативные так и числовые так и текстовые)?

Цитата:
Сообщение от Stilet Посмотреть сообщение
Нет у меня Акцесса. Не пользуюсь МС Оффисом.

Схема на самом деле может быть проще:
Сначала ты проводишь UPDATE. Метод ExecSQL возвращает кол-во записей, которые были обработаны запросом - в данном случае обновлены. Соответственно если этот метод вернет 0 - нужно делать вставку.

Последний раз редактировалось le7o; 18.05.2015 в 08:33. Причина: добавлена информация к вопрсосу
le7o вне форума Ответить с цитированием
Старый 18.05.2015, 09:20   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну для начала неплохо бы увидеть твою структуру )
Скриншоты выложи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 09:43   #7
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Структуру приложил:
По таблицам (сделал в CODE для читабельности):

Код:
--------------------------------
1. STUDY - исследования
--------------------------------
ID                        - PK
STUDY                  - названия
...                        - остальные поля ни на что ни влияют
--------------------------------
--------------------------------
2. QUESTION - вопросы
--------------------------------
ID                       - PK
NUMBER               - номер вопроса
QUESTYON            - текст вопроса
STUDY_ID            - привязка к исследованию (STUDY)
TYPE_ID               - выбор типа вопроса(текстовый, числовой, вариативный) 
                            привязка к типу вопроса
-------------------------------
-------------------------------
3. ALTERNATIVE - варианты
-------------------------------
ID                       - PK
NUMBER              - номер варианта
VARIANT              - текст варианта
QUESTION_ID       - привязка к конкретному вопросу
-------------------------------
-------------------------------
4. DATA - респонденты
-------------------------------
ID                      - PK
FIO                    - любой текст идентифицирующий респондента
STUDY_ID           - привязка к исследованию (STUDY)
-------------------------------
5. ANSWER - вопрос ответ по сути
-------------------------------
ID                      - PK
QUESTION_ID      - привязка к конкретному вопросу
ALTERNATIVE_ID  - привязка без обеспечения целостности данных (может быть = 0
                           в зависимости от типа вопроса)
DATA_ID             - привязка к таблице с информацией о респонденте
ASNTEXT             - поля заполняются в зависимости от типа вопроса: если 
ASNSTRIGN         - вариативный то соответственно 0 и '', числовой - int, 
                           текстовый      - string
-------------------------------


Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну для начала неплохо бы увидеть твою структуру )
Скриншоты выложи.
Изображения
Тип файла: jpg Безымянный.jpg (19.3 Кб, 142 просмотров)
le7o вне форума Ответить с цитированием
Старый 18.05.2015, 13:55   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Понятно, ты всетки рекомендации в прошлой теме не учел...
Ладно. Пусть по твоему.
В таком случае то что ты хочешь сделать на основе твоего кода может выглядеть так:
Код:
procedure TFANS.Button1Click(Sender: TObject);
var
  query : TADOQuery;
begin
query := TADOQuery.Create(nil);
query.Connection := dm.ADOConn ;
  query.SQL.Clear ;
  query.SQL.Add('UPDATE ANSWER set ASNTEXT=:p_ASNTEXT
      WHERE QUESTION_ID=:p_QUESTIONID AND DATA_ID=:p_DATAID
  ');
  query.Parameters.ParamByName('p_QUESTIONID').Value := dm.QUESTIONS.FieldByName('ID').AsInteger;
  query.Parameters.ParamByName('p_DATAID').Value := dm.DATA.FieldByName('ID').AsInteger;
  query.Parameters.ParamByName('p_ASNTEXT').Value := <Ответ>;

  if query.ExecSQL=0 then begin
   query.SQL.Add('INSERT INTO ANSWER (ASNTEXT,QUESTION_ID,DATA_ID) VALUES (:p_ASNTEXT,:p_QUESTIONID,:p_DATAID)');
   query.Parameters.ParamByName('p_QUESTIONID').Value := dm.QUESTIONS.FieldByName('ID').AsInteger;
   query.Parameters.ParamByName('p_DATAID').Value := dm.DATA.FieldByName('ID').AsInteger;
   query.Parameters.ParamByName('p_ASNTEXT').Value := <Ответ>;
   query.ExecSQL;
 end;
 query.Commit;
 query.Free ;
 
  DBNavigator1.BtnClick(nbNext);
  GroupsVisible;
  View;
end;
Короче говоря нет у меня нет совершенно никаких путевых предложений исходя из структуры базы, кроме того, что описал. Не представляю я как эта структура может работать. Если это придумал ты сам, то зря советов в прошлой теме не послушал. Если же твой преподоносор то... соболезную. Учат тебя не для того чтоб научить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2015, 21:44   #9
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Хорошо, а какую вы структуру можете предложить, при учете что в принципе сущности выделены все необходимые?

За Ваш ответ по поводу кода спасибо буду пробовать приспособить.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Понятно, ты всетки рекомендации в прошлой теме не учел...
Ладно. Пусть по твоему.
В таком случае то что ты хочешь сделать на основе твоего кода может выглядеть так:
Код:
procedure TFANS.Button1Click(Sender: TObject);
var
  query : TADOQuery;
begin
query := TADOQuery.Create(nil);
query.Connection := dm.ADOConn ;
  query.SQL.Clear ;
  query.SQL.Add('UPDATE ANSWER set ASNTEXT=:p_ASNTEXT
      WHERE QUESTION_ID=:p_QUESTIONID AND DATA_ID=:p_DATAID
  ');
  query.Parameters.ParamByName('p_QUESTIONID').Value := dm.QUESTIONS.FieldByName('ID').AsInteger;
  query.Parameters.ParamByName('p_DATAID').Value := dm.DATA.FieldByName('ID').AsInteger;
  query.Parameters.ParamByName('p_ASNTEXT').Value := <Ответ>;

  if query.ExecSQL=0 then begin
   query.SQL.Add('INSERT INTO ANSWER (ASNTEXT,QUESTION_ID,DATA_ID) VALUES (:p_ASNTEXT,:p_QUESTIONID,:p_DATAID)');
   query.Parameters.ParamByName('p_QUESTIONID').Value := dm.QUESTIONS.FieldByName('ID').AsInteger;
   query.Parameters.ParamByName('p_DATAID').Value := dm.DATA.FieldByName('ID').AsInteger;
   query.Parameters.ParamByName('p_ASNTEXT').Value := <Ответ>;
   query.ExecSQL;
 end;
 query.Commit;
 query.Free ;
 
  DBNavigator1.BtnClick(nbNext);
  GroupsVisible;
  View;
end;
Короче говоря нет у меня нет совершенно никаких путевых предложений исходя из структуры базы, кроме того, что описал. Не представляю я как эта структура может работать. Если это придумал ты сам, то зря советов в прошлой теме не послушал. Если же твой преподоносор то... соболезную. Учат тебя не для того чтоб научить.
le7o вне форума Ответить с цитированием
Старый 19.05.2015, 07:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при учете что в принципе сущности выделены все необходимые?
Только одну - бросать программирование )
Я уже сказал в предыдущей теме какие я вижу сущности, если же тебе нужны именно эти, и ты им не можешь дать ладу, то... Только бросать этот проект и не морочить себе голову).
Понимаешь, одно дело, когда наблюдатель не понимает как все устроено, но если сам разработчик не понимает... В обшем все плохо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужен совет в проектировании приложения usrjava Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 25 16.03.2015 10:29
Какие нюансы нужно принимать в расчет при проектировании космического корабля? IT-Lopata Свободное общение 16 13.06.2014 23:47
UML объектно-ориентированном проектировании ... kir9kir9kir9 Фриланс 2 15.06.2010 16:41
Использование конструкторов и деструктора при проектировании пользовательского класса НеважНо Общие вопросы C/C++ 1 22.01.2010 14:56
Прошу совета в проектировании классов Sergey82 Общие вопросы C/C++ 5 02.07.2009 20:09