Четверг, 10.07.2025, 01:18
Приветствую Вас Гражданское лицо | RSS
[SEARCH_TITLE]
[SEARCH_FORM]
Главная | Каталог статей | Регистрация | Вход
TMS
Форма входа
Сайт переехал на новый адрес:
//alexcoder.ucoz.ru
На данном адресе новые материалы выкладываться не будут
Также по новому адресу доступен оффлайн архив материалов
Меню сайта

Категории раздела
Программирование [10]
Компъютеры [2]
WEB [2]
Веб-сервисы
Игры [2]
ОС [6]

Поиск

Облако тегов

Наш опрос
Оцените мой сайт
Всего ответов: 22

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Также использую Google Analystic

Мини-чат

KASPERSKY
Новости вирусоной активности

Реклама
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Главная » Статьи » Компъютеры » Программирование

    Продолжим историю базы данных
    В прошлый раз мы спроектировали структуру(полностью) и дизайн (частично) базы. Правда я добавил табы, на которых собственно теперь лежит dataGridView.
    Внедрим возможность поиска.
    Делаем панель, на неё бросим 2-я combobox-а, checkbox и 2 кнопки.
    У мну вышло так :

    Для начала сделаем так чтоб было возможно работать с подзапросами. Зачем.
    Если мы сперва сделаем поиск по наименованию, а потом захотим искать по дате, то запрос по дате будет выглядеть так :
    Code

    SELECT * FROM (запрос по наименованию) WHERE дата=искомая_дата

    Можно было б оптимизировать запрос но это бы усложнило программу.

    Так же вставим в проект новую форму. Она будет нужна чтобы юзер сог ввести свой запрос.
    На неё повесим 2 кнопки и RichText или как-то так
    Кнопки - OK, Отмена.
    Создадим в классе int переменную res. По нажатию кнопок будем её менять (Ok - 1, Cancel - 0).
    Также создадим строковое public property c названием sqlText. в которое будет кидаться текст richEdit-a. Форму кстати обзовём sqlDialog

    Вот код моего класса


    Из основной формы мы будем вызывать showSQLDialog() и если он вернёт 1 - будет выполнять юзерский запрос из sqlText.

    Теперь ужасы. Ты считаешь, что в VS 2008 легко проводить запосы к базе данных программно? Как бы не так.

    Пришло клепать мозг. Найди в компонентах формы dataSet. В контекстном меню - "EDIT IN DATASET DESIGNER". Дабл клик на свободном месте и мы видим такой код :

    Code

    namespace WindowsFormsApplication1 {
       
       
      public partial class dbDataSet {
      }
    }

    namespace WindowsFormsApplication1.dbDataSetTableAdapters {
       
       
      public partial class mainDataTableAdapter {
      ...
      }
    }

    меняем на
    Code

    namespace WindowsFormsApplication1 {
       
       
      public partial class dbDataSet {
      }
    }

    namespace WindowsFormsApplication1.dbDataSetTableAdapters {
       
       
      public partial class mainDataTableAdapter {
      public string SelectCommand
      {
      get
      {
      return CommandCollection[0].CommandText;
      }
      set
      {
      CommandCollection[0].CommandText = value;
      }
      }
      }
    }


    Мы добавили в dataSet свойство SelectCommand, обёртку для его запроса. Напрямую юзать CommandCollection вроде нельзя.

    Теперь в одну из кнопок (обзовём её "свой SQL") код

    Code

      sqlEditDialog sd = new sqlEditDialog();
      sd.showSQLDialog();

      QUERY = sd.sqlText;

      mainDataTableAdapter.SelectCommand = QUERY;
      mainDataTableAdapter.Fill(dbDataSet.mainData);

    Здесь QUERY - private переменная класса (строковая).
    Кстати компоненты могут обзываться иначе, но вроде смысл пока ясен.

    Теперь построим поиск не для гика. Т.е. по полю, значению и галке "в найденном"
    Один из комбобоксов назовём searchFieldName, второй searchValue, чекбокс " в найденном" - inSearched

    Сперва в первый комбобокс нам надо грузить список полей. Сделаем это, используя dataGridView :

    Code

      private void setFieldsList()
      {
      for (int i = 0; i < dataGridView1.Columns.Count; i++)
      {
      searchFieldName.Items.Add(dataGridView1.Columns[i].DataPropertyName.ToString());
      }
      }
      private void Form1_Load(object sender, EventArgs e)
      {
      // TODO: This line of code loads data into the 'dbDataSet.mainData' table. You can move, or remove it, as needed.
      this.mainDataTableAdapter.Fill(this.dbDataSet.mainData);
      QUERY = mainDataTableAdapter.SelectCommand;
      setFieldsList();
      }

    Запустим. Список полей есть.

    Теперь поиск.В onclick-е кнопки пиши

    Code

      if (inSearched.Checked)
      {
      QUERY = "SELECT * FROM (" + QUERY + ") WHERE " + searchFieldName.Text + "='" + searchValue.Text + "'";
      }
      else
      {
      QUERY = "SELECT * FROM mainData WHERE " + searchFieldName.Text + "='" + searchValue.Text + "'";
      }

      mainDataTableAdapter.SelectCommand = QUERY;
      mainDataTableAdapter.Fill(dbDataSet.mainData);

    Т.е. если чекбокс "в найденном" не выделен, прога просто сгенерит новый запрос, в противном случае - новый запрос, в котором даные выделяются из старого

    Полный код класса формы

    Категория: Программирование | Добавил: alexKniaz (09.02.2010)
    Просмотров: 845 | Комментарии: 1 | Теги: Visual Studio, C#, Базы данных | Рейтинг: 0.0/0
    Всего комментариев: 1
    1 alexKniaz  
    0
    скорее всего будет длинный перерыв. Вдохновение грубо говоря пропало, а денег мне за сайт не плотят biggrin
    но разные ключевые вещи будут описаны

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]

    Copyright MyCorp © 2025
    Конструктор сайтовuCoz