2.在DBgrid中我用
DBGrid.SelectedRows.Delete;
AdoCtmQry.UpdateBatch();
删除选择的多条记录!当我选择记录的时候,我用上面的语句怎么删除不了当前的记录呢?
我用:AdoCtmQry.delete;
AdoCtmQry.post;也不行?是那里没有控制好呢?谢谢指点.....
14 个解决方案
#1
先占个1楼
#2
1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
2.你试试行不:
...
for i := 0 to DBGrid.SelectedRows.Count - 1 do
begin
AdoCtmQry.GotoBookmark(Pointer(DBGrid.SelectedRows[i]));
AdoCtmQry.Delete;
end;
AdoCtmQry.UpdateBatch();
2.你试试行不:
...
for i := 0 to DBGrid.SelectedRows.Count - 1 do
begin
AdoCtmQry.GotoBookmark(Pointer(DBGrid.SelectedRows[i]));
AdoCtmQry.Delete;
end;
AdoCtmQry.UpdateBatch();
#3
1,在BeforeScroll事件中,记录当前记录
begin
inherited;
CBook:= CTable.GetBookmark;
end;
在 afterScroll事件中,记录当前记录
begin
inherited;
CBook与当前记录比较
end;
2,AdoCtmQry.delete;应该就删除了。
begin
inherited;
CBook:= CTable.GetBookmark;
end;
在 afterScroll事件中,记录当前记录
begin
inherited;
CBook与当前记录比较
end;
2,AdoCtmQry.delete;应该就删除了。
#4
1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
如果这样的话,我不是不能在DBGrid上修改数据?有没有办法提取DBgrid的行的索引值呢?
AdoCtmQry.delete;应该就删除了
还是删除不掉;哪怕post 后也删除不掉;只有我选择记录后才行!
如果这样的话,我不是不能在DBGrid上修改数据?有没有办法提取DBgrid的行的索引值呢?
AdoCtmQry.delete;应该就删除了
还是删除不掉;哪怕post 后也删除不掉;只有我选择记录后才行!
#5
问题2
procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
ADOQuery1.GotoBookmark(pointer(DBGrid1.SelectedRows[i]));
ADOQuery1.Delete;
end;
dbgrid1.SelectedRows.Clear;
//
end;
procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
ADOQuery1.GotoBookmark(pointer(DBGrid1.SelectedRows[i]));
ADOQuery1.Delete;
end;
dbgrid1.SelectedRows.Clear;
//
end;
#6
问题1
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if true then
abort;//不想post 时候使用,但是DBgrid1的多行选择时候生效的情况下不能阻止多行选择。
end;
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if true then
abort;//不想post 时候使用,但是DBgrid1的多行选择时候生效的情况下不能阻止多行选择。
end;
#7
呵呵,我回答错了,那是我常用的方法,不在DBGrid中编辑;你试试这个:
这里设ADOQuery1为DBGrid1.DataSource.DataSet
procedure TForm1.DBGrid1StoreKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ADOQuery1.State = dsEdit then
if Key in [38, 40] then Key := 0;
end;
这里设ADOQuery1为DBGrid1.DataSource.DataSet
procedure TForm1.DBGrid1StoreKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ADOQuery1.State = dsEdit then
if Key in [38, 40] then Key := 0;
end;
#8
我没说清楚,不好意思,浪费大家时间了;我的意思是:
我用以下的语句实现了在DBgrid中 DBGrid.SelectedRows.Delete;AdoCtmQry.UpdateBatch();删除选择的多条记录!(必须在选择的情况下)
现在我只想删除DBGrid中当前的一条记录.我用AdoCtmQry.delete,为什么不行? 我设置了Dbgrid的Selectrows属性;我删除的记录是在没有选择的情况下,想删除当前指针默认的记录;
简单点:就是怎么样判断DBgrid中没有记录被选中!
我用以下的语句实现了在DBgrid中 DBGrid.SelectedRows.Delete;AdoCtmQry.UpdateBatch();删除选择的多条记录!(必须在选择的情况下)
现在我只想删除DBGrid中当前的一条记录.我用AdoCtmQry.delete,为什么不行? 我设置了Dbgrid的Selectrows属性;我删除的记录是在没有选择的情况下,想删除当前指针默认的记录;
简单点:就是怎么样判断DBgrid中没有记录被选中!
#9
to: weizi2000(秋风啊-秋的叹息)
我的修改不确定.我可以对DBgrid中的多条记录修改.因为我在keydown 和colexit中写了修改代码;当我离开的clounm时候自动修改值;这个时候当我换为其他行的时候,数据修改出现错误,(该修改的本行数据没修改,而是把当前焦点所在行的数据)
我的修改不确定.我可以对DBgrid中的多条记录修改.因为我在keydown 和colexit中写了修改代码;当我离开的clounm时候自动修改值;这个时候当我换为其他行的时候,数据修改出现错误,(该修改的本行数据没修改,而是把当前焦点所在行的数据)
#10
在OnAfterInsert OnAfterEdit事件中:
DataSetName.Tag := 1;
在保存按钮事件中写:
Try
DataSetName.Tag := 0; //不可少,否则永远都提交不了数据
DataSetName.Post;
Except
DataSetName.Tag := 1
End;
在DataSet.OnBeforePost事件中写:
If DataSetName.tag=1 then Abort;
以上代码借用了DataSet.Tag作业互斥条件,因为移动记录的时候,如果数据集在编辑状态下会自动提交,而自动提交心然会调用BeforePost事件。
DataSetName.Tag := 1;
在保存按钮事件中写:
Try
DataSetName.Tag := 0; //不可少,否则永远都提交不了数据
DataSetName.Post;
Except
DataSetName.Tag := 1
End;
在DataSet.OnBeforePost事件中写:
If DataSetName.tag=1 then Abort;
以上代码借用了DataSet.Tag作业互斥条件,因为移动记录的时候,如果数据集在编辑状态下会自动提交,而自动提交心然会调用BeforePost事件。
#11
简单点:就是怎么样判断DBgrid中没有记录被选中!
DBGrid1.SelectedRows.Count
DBGrid1.SelectedRows.Count
#12
if DBGrid1.SelectedRows.Count>0 then //有记录选中
#13
TO: kaguo(▲) Guozhi(★★★★★)
你的方法解决了我的删除问题;谢谢你;
第一个问题我只要知道怎么捕捉到Dbgrid在不同的行就可以了;
比如:我现在在修改第一行的数据,
接着我又跳到第二行,我只想保存第一行,第二行不保存,怎么办?
Dbgrid中的每一行有没有唯一标识?
你的方法解决了我的删除问题;谢谢你;
第一个问题我只要知道怎么捕捉到Dbgrid在不同的行就可以了;
比如:我现在在修改第一行的数据,
接着我又跳到第二行,我只想保存第一行,第二行不保存,怎么办?
Dbgrid中的每一行有没有唯一标识?
#14
因为我在dbgrid的keydown中提取cell中的值,当cell离开时判断所改的值在不在要求的范围内,如果不在我要求的范围内,就用提取的值还原;在这个过程中,当我离开了所在行的话,此时还原的数据就会覆盖当前所在行对应的数据; 这个怎么控制?
#1
先占个1楼
#2
1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
2.你试试行不:
...
for i := 0 to DBGrid.SelectedRows.Count - 1 do
begin
AdoCtmQry.GotoBookmark(Pointer(DBGrid.SelectedRows[i]));
AdoCtmQry.Delete;
end;
AdoCtmQry.UpdateBatch();
2.你试试行不:
...
for i := 0 to DBGrid.SelectedRows.Count - 1 do
begin
AdoCtmQry.GotoBookmark(Pointer(DBGrid.SelectedRows[i]));
AdoCtmQry.Delete;
end;
AdoCtmQry.UpdateBatch();
#3
1,在BeforeScroll事件中,记录当前记录
begin
inherited;
CBook:= CTable.GetBookmark;
end;
在 afterScroll事件中,记录当前记录
begin
inherited;
CBook与当前记录比较
end;
2,AdoCtmQry.delete;应该就删除了。
begin
inherited;
CBook:= CTable.GetBookmark;
end;
在 afterScroll事件中,记录当前记录
begin
inherited;
CBook与当前记录比较
end;
2,AdoCtmQry.delete;应该就删除了。
#4
1.编辑时设DBGrid.Enabled := false;编辑完成再设其为true;
如果这样的话,我不是不能在DBGrid上修改数据?有没有办法提取DBgrid的行的索引值呢?
AdoCtmQry.delete;应该就删除了
还是删除不掉;哪怕post 后也删除不掉;只有我选择记录后才行!
如果这样的话,我不是不能在DBGrid上修改数据?有没有办法提取DBgrid的行的索引值呢?
AdoCtmQry.delete;应该就删除了
还是删除不掉;哪怕post 后也删除不掉;只有我选择记录后才行!
#5
问题2
procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
ADOQuery1.GotoBookmark(pointer(DBGrid1.SelectedRows[i]));
ADOQuery1.Delete;
end;
dbgrid1.SelectedRows.Clear;
//
end;
procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to DBGrid1.SelectedRows.Count - 1 do
begin
ADOQuery1.GotoBookmark(pointer(DBGrid1.SelectedRows[i]));
ADOQuery1.Delete;
end;
dbgrid1.SelectedRows.Clear;
//
end;
#6
问题1
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if true then
abort;//不想post 时候使用,但是DBgrid1的多行选择时候生效的情况下不能阻止多行选择。
end;
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if true then
abort;//不想post 时候使用,但是DBgrid1的多行选择时候生效的情况下不能阻止多行选择。
end;
#7
呵呵,我回答错了,那是我常用的方法,不在DBGrid中编辑;你试试这个:
这里设ADOQuery1为DBGrid1.DataSource.DataSet
procedure TForm1.DBGrid1StoreKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ADOQuery1.State = dsEdit then
if Key in [38, 40] then Key := 0;
end;
这里设ADOQuery1为DBGrid1.DataSource.DataSet
procedure TForm1.DBGrid1StoreKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ADOQuery1.State = dsEdit then
if Key in [38, 40] then Key := 0;
end;
#8
我没说清楚,不好意思,浪费大家时间了;我的意思是:
我用以下的语句实现了在DBgrid中 DBGrid.SelectedRows.Delete;AdoCtmQry.UpdateBatch();删除选择的多条记录!(必须在选择的情况下)
现在我只想删除DBGrid中当前的一条记录.我用AdoCtmQry.delete,为什么不行? 我设置了Dbgrid的Selectrows属性;我删除的记录是在没有选择的情况下,想删除当前指针默认的记录;
简单点:就是怎么样判断DBgrid中没有记录被选中!
我用以下的语句实现了在DBgrid中 DBGrid.SelectedRows.Delete;AdoCtmQry.UpdateBatch();删除选择的多条记录!(必须在选择的情况下)
现在我只想删除DBGrid中当前的一条记录.我用AdoCtmQry.delete,为什么不行? 我设置了Dbgrid的Selectrows属性;我删除的记录是在没有选择的情况下,想删除当前指针默认的记录;
简单点:就是怎么样判断DBgrid中没有记录被选中!
#9
to: weizi2000(秋风啊-秋的叹息)
我的修改不确定.我可以对DBgrid中的多条记录修改.因为我在keydown 和colexit中写了修改代码;当我离开的clounm时候自动修改值;这个时候当我换为其他行的时候,数据修改出现错误,(该修改的本行数据没修改,而是把当前焦点所在行的数据)
我的修改不确定.我可以对DBgrid中的多条记录修改.因为我在keydown 和colexit中写了修改代码;当我离开的clounm时候自动修改值;这个时候当我换为其他行的时候,数据修改出现错误,(该修改的本行数据没修改,而是把当前焦点所在行的数据)
#10
在OnAfterInsert OnAfterEdit事件中:
DataSetName.Tag := 1;
在保存按钮事件中写:
Try
DataSetName.Tag := 0; //不可少,否则永远都提交不了数据
DataSetName.Post;
Except
DataSetName.Tag := 1
End;
在DataSet.OnBeforePost事件中写:
If DataSetName.tag=1 then Abort;
以上代码借用了DataSet.Tag作业互斥条件,因为移动记录的时候,如果数据集在编辑状态下会自动提交,而自动提交心然会调用BeforePost事件。
DataSetName.Tag := 1;
在保存按钮事件中写:
Try
DataSetName.Tag := 0; //不可少,否则永远都提交不了数据
DataSetName.Post;
Except
DataSetName.Tag := 1
End;
在DataSet.OnBeforePost事件中写:
If DataSetName.tag=1 then Abort;
以上代码借用了DataSet.Tag作业互斥条件,因为移动记录的时候,如果数据集在编辑状态下会自动提交,而自动提交心然会调用BeforePost事件。
#11
简单点:就是怎么样判断DBgrid中没有记录被选中!
DBGrid1.SelectedRows.Count
DBGrid1.SelectedRows.Count
#12
if DBGrid1.SelectedRows.Count>0 then //有记录选中
#13
TO: kaguo(▲) Guozhi(★★★★★)
你的方法解决了我的删除问题;谢谢你;
第一个问题我只要知道怎么捕捉到Dbgrid在不同的行就可以了;
比如:我现在在修改第一行的数据,
接着我又跳到第二行,我只想保存第一行,第二行不保存,怎么办?
Dbgrid中的每一行有没有唯一标识?
你的方法解决了我的删除问题;谢谢你;
第一个问题我只要知道怎么捕捉到Dbgrid在不同的行就可以了;
比如:我现在在修改第一行的数据,
接着我又跳到第二行,我只想保存第一行,第二行不保存,怎么办?
Dbgrid中的每一行有没有唯一标识?
#14
因为我在dbgrid的keydown中提取cell中的值,当cell离开时判断所改的值在不在要求的范围内,如果不在我要求的范围内,就用提取的值还原;在这个过程中,当我离开了所在行的话,此时还原的数据就会覆盖当前所在行对应的数据; 这个怎么控制?