C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Вопрос по DBGrid, Вопрос по DBGrid
vinni
Отправлено: 10.07.2006, 11:27


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Здравствуйте, у меня такой вопрос: как мне удалить из базы данных выделенные СТРОКИ в DBGrid, связанной с этой базой данных?
olegenty
Отправлено: 10.07.2006, 12:38


Ветеран

Группа: Модератор
Сообщений: 2412



для каждой выдененной строки вызвать выполнить запрос на удаление, после чего обновить НД.
vinni
Отправлено: 10.07.2006, 13:29


Дежурный стрелочник

Группа: Участник
Сообщений: 46



так вот, как мне пройтись по выделенным строкам?
olegenty
Отправлено: 10.07.2006, 14:03


Ветеран

Группа: Модератор
Сообщений: 2412



для TDBGrid
CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if (DBGrid1->SelectedRows->Count > 0)
 {
   AnsiString s = "";
   TDataSet *pDS = DBGrid1->DataSource->DataSet;
   for (int i=0; i < DBGrid1->SelectedRows->Count; i++)
   {
     pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str());
     for (int j = 0; j < pDS->FieldCount; j++)
     {
       if (j>0)
         s = s+", ";

       s = s + pDS->Fields->Fields[j]->AsString;
     }
     ListBox1->Items->Add(s);
     s = "";
   }
 }
}


для TDBGridEh
CODE

function TForm1.GridSelectionAsText(AGrid: TDBGridEh): String;
var bm:TBookmarkStr;
   i,j,DLIndex :Integer;
   ss: TStringStream;
   function StringTab(s:String; Index, Count:Integer):String;
   begin
     if Index <> Count then
       Result := s + #09
     else
       Result := s;

   end;
begin
 Result := '';
 with AGrid do begin
   if Selection.SelectionType = gstNon then Exit;
   with Datasource.Dataset do
   try
     ss := TStringStream.Create('');
     bm := Bookmark;
     DisableControls;
     try
       case Selection.SelectionType of
         gstRecordBookmarks:
         begin
           for I := 0 to Selection.Rows.Count-1 do

           begin
             Bookmark := Selection.Rows[I];
             for j := 0 to VisibleColumns.Count — 1 do
               ss.WriteString(StringTab(VisibleColumns[j].DisplayText,
                   j,VisibleColumns.Count — 1));
             ss.WriteString(#13#10);
           end;
         end;
         gstRectangle: begin
            Bookmark := Selection.Rect.TopRow;
            while True do begin

              for j := Selection.Rect.LeftCol to Selection.Rect.RightCol do
                if Columns[j].Visible then
                  ss.WriteString(StringTab(Columns[j].DisplayText,
                     j,Selection.Rect.RightCol));
              if CompareBookmarks(Pointer(Selection.Rect.BottomRow),Pointer(Bookmark)) = 0 then
                Break;
              Next;
              if Eof then Break;

              ss.WriteString(#13#10);
            end;
         end;
         gstColumns: begin
            for j := 0 to Selection.Columns.Count-1 do
                ss.WriteString(StringTab(Selection.Columns[j].Title.Caption,
                    j,Selection.Columns.Count-1));
            ss.WriteString(#13#10);
            First;
            while  EOF = False do begin

              for j := 0 to Selection.Columns.Count-1 do
                ss.WriteString(StringTab(Selection.Columns[j].DisplayText,
                    j,Selection.Columns.Count-1));
              ss.WriteString(#13#10);
              Next;
            end;
            for i := 0 to FooterRowCount-1 do begin
              for j := 0 to Selection.Columns.Count-1 do

                  ss.WriteString(StringTab(GetFooterValue(i,Selection.Columns[j]),
                     j,Selection.Columns.Count-1));
              ss.WriteString(#13#10);
            end;
         end;
         gstAll: begin
            for j := 0 to VisibleColumns.Count-1 do
                ss.WriteString(StringTab(VisibleColumns[j].Title.Caption,
                    j,VisibleColumns.Count-1));
            ss.WriteString(#13#10);

            First;
            while  EOF = False do begin
              for j := 0 to VisibleColumns.Count-1 do
                ss.WriteString(StringTab(VisibleColumns[j].DisplayText,
                    j,VisibleColumns.Count-1));
              ss.WriteString(#13#10);
              Next;
            end;
            for i := 0 to FooterRowCount-1 do begin
              for j := 0 to VisibleColumns.Count-1 do

                  ss.WriteString(StringTab(GetFooterValue(i,VisibleColumns[j]),
                     j,VisibleColumns.Count-1));
              ss.WriteString(#13#10);
            end;
         end;
       end;
       Result := ss.DataString;
     finally
       Bookmark := bm;
       EnableControls;
     end;
   finally
     ss.Free;
   end;
 end;
end;


Отредактировано olegenty — 10/07/2006, 15:05
Dimon.Ru
Отправлено: 21.07.2006, 14:18


Станционный диспетчер

Группа: Участник
Сообщений: 92



У меня через DBGrid как-то не всегда правильно все работало...
я делал через Query.

Вернуться в Работа с базами данных в C++Builder