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. |
|
|