Всем привет, сейчас не так уж и много времени разбираться с какими-то темами, примерами, так что пока не очень часто пишу в блог, хотя время найти могу, для того, чтобы помочь разобраться читателям моего блога с некоторыми вопросами, которые они мне задают в комментариях или на email. Вот на этот раз вопрос был по работе с БД, а именно, цитата:

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

Ну так давайте тогда и приступим к рассмотрению данного вопроса. Самый простой способ, есть конечно и не один, но я расскажу два простых способа. Давайте создадим для начала какую-нибудь БД и в ней создадим таблицу, СУБД можно выбрать любую, так как данный метод будет работать почти со всеми СУБД, которые будут использовать технологию ADO для подключения, да и BDE, тоже должно работать. Я выбрал СУБД MS Access.

Далее создал БД, в ней таблицу под именем Student, следующей структуры:

После этого сохраняем нашу БД и создаем проект в Delphi. На форму устанавливаем следующие компоненты:

  • TADOQuery
  • TADOConnection
  • TDBGrid
  • TDataSource
  • TButton

Далее делаем подключение к нашей БД, как это делать, мы рассматривали в данной статье . После этого, как у нас всего готова, необходимо сделать настройки некоторых компонентов, а это — TDBGrid. А точнее, нам необходимо установить свойство, чтобы можно было выделять несколько записей, которые отображаются в TDBGrid. Для этого выделяем компонент TDBGrid и в свойстве Options-dgMultiSelect (в более ранних версиях Delphi, возможно будет goMultiSelect) устанавливаем его в True. Теперь записи можно выделять, при нажатии клавиш Ctrl и/или Shift.

Все, теперь нам необходимо данные строки обработать (которые выделены), а потом с ними можно делать все, что захотим. Вот несколько самых простых способов, с помощью которых можно решить данный вопрос, на событие OnClick нашей кнопки пишем следующий код:

procedure TForm1.btn1Click(Sender: TObject);
var
 I:Integer;
begin
   try
    qry1.First;
     for I := 0 to dbgrd1.SelectedRows.Count-1 do
       begin
         qry1.Bookmark:=dbgrd1.SelectedRows[i];
         ShowMessage(qry1.FieldByName('FIO').AsVariant);
       end;
   finally
    //-//-//-//-//-//-//-//-//
   end;
end;

С помощью свойства Bookmark, мы устанавливаем указатель в самой таблице на закладку, запись, которой соответствует выделенная запись в TDBGrid, при этом организовываем цикл, по всем выделенным записям. Тоже самое можно организовать следующим образом:

procedure TForm1.btn1Click(Sender: TObject);
var
 I:Integer;
begin
   try
    qry1.First;
     for I := 0 to dbgrd1.SelectedRows.Count-1 do
       begin
         qry1.GotoBookmark(dbgrd1.SelectedRows[i]);
         ShowMessage(qry1.FieldByName('FIO').AsVariant);
       end;
   finally
    //-//-//-//-//-//-//-//-//
   end;
end;

Здесь все, тоже самое, только указатель мы устанавливаем с помощью процедуры GotoBookmark. Вот и все, теперь эти записи можно получать в цикле, и что хотите, то с ними и делайте.

Ну и сразу отвечу на второй вопрос, цитата:

acces су поставил пароль но Microsoft jet 4.0 не хочет подключится
подробно объясните, пожалуйста и программно как можно обращаться с ним

Что касается установки пароля на БД MS Access, то его можно установить, как программно, так и при помощи MS Access. Устанавливаете пароль в MS Access, свойство компонента TADOConnection - LoginPromt устанавливаем в False, при этом в свойство Mode должно быть установлено в ReadWrite, так как БД, должна открываться в монопольном режиме, пароль можно также передавать и своим диалоговым окном в свойство ConnectionString компонента TADOConnection. Внимательно просмотрите строку подключения ConnectionString и само диалоговое окно подключения, Вы сами все поймете, куда и как вводить пароль.


Все, что рассмотрели в данной статье с помощью компонента TADOQuery, можно сделать и с помощью компонента TADOTable


В настоящее время очень популярно иметь недвижимость, особенно в курортных городах и уголках Земли. Так как, Вы в свободное время, можете спокойно приехать со своей семьей и близкими отдохнуть, например Вы можете купить недвижимость в калабрии и проводить очень прекрасные дни там, тем более приобретаете по очень выгодным ценам, что очень важно в настоящее время.


Метки: , , , , , , , , ,




К записи “Работа с выделенными записями в таблицах СУБД” оставлено комментариев: 7.

  1. samsim:

    Респект автору за статейку. Работа с базами данных не так сложна ка много в ней всяких нюансов, по этому ваше решение как по мне очень компактное и несложное как для новачка.

  2. нурик:

    я тока что изучаю делфи (ембаркадеро делфи хе)
    и у меня проблемы
    задача в том что в делфи на любую компонент вытащить текстовый файл и каждое слова в этом файле записывать отдельно на каждую строку выбранного компонента
    тоесть есть текстовый файл 200 слов и вызываем его нажатие на баттон и 200 слов на 200 строке отдельно в мемо (например)

    Текст на текстовым файле: Меня зовут Нурик. Помогите пожалуйста!!!!
    Результат на мемо:
    меня
    зовут
    нурик
    помогите
    пожалуйста

    Заранее спасибо

    • Andrey:

      необходимо в каждой строке искать пробелы. Считываем строку до пробела и проверяем дальше, если есть еще пробел, то считываем еще, и так до конца строки
      str:='';
      for i:=1 to length(s) do
      begin
      if s[i]<>' ' then
      begin
      str:=str+s[i];
      end;
      if s[i]=' ' then
      begin
      Memo1.Lines.Add(str);
      str:='';
      end;
      end;

  3. Владислав:

    Спасибо за Ваши статьи! Только не могу понять, что такое qry? это компонент какой-то или что такое?

  4. Антон:

    Да… А блог то помер почти год назад. последняя статья опубликована
    «Andrey Опубликовано: 26 Октябрь 2014″ А так классно материал разъяснялся. ((( Очень уж мне хочется узнать как же все таки правильно
    Создавать TDBTree с Возможностью установки чекбоксов. Если все таки есть еще шанс то распишите эту тему в статье.

Оставить комментарий

Вы можете использовать следующие теги:

*