TABLE和DBGRID的问题!!!!!!!!!!!!!!!!!!(0分)

  • 主题发起人 主题发起人 啊啊啊啊啊
  • 开始时间 开始时间

啊啊啊啊啊

Unregistered / Unconfirmed
GUEST, unregistred user!
我用dbgrig和table连access数据库,想实现dbgrid的多项选择删除功能,可我虽然可以选多个但用table1.delete只能一次删一个,怎么办?

在我数据输入数据库时要进行判断,如果包含a这个字母输入A,如果包含b这个字母输入B,如果不包含着两个字母,出现对话框提示“检查输入数据”,且输入过程到此打住,改过后继续输入,这样该怎么实现?

DELPHI连ACCESS时的自动生成ID,会从1往上加,如果中间删除几条数据,再输入,ID会从删除的地方开始加,中间空出删除的那几个ID号,用TABLE的刷新也不行,该怎么办?
 
1、用一个Tbookmarklist(记得不太清楚了,就是类似于一个bookmark数组类型)记录下
你选择的记录,然后自己用SQL语句删除
2、if (pos('a',yourstring)<>0 or pos('b',yourstring)<>0) then
upcase(....)//大小写转换
else
begin
showmessage(检查输入数据);
exit;
end;
3、有必要这么做吗,如果实在要的话,做一下数据库的压缩,不过每删一条压缩一次
太夸张了吧。。。。
 
我觉得是你的表的主键没弄好,我曾经遇到这样的问题,后来把主键搞清楚之后就ok了![:)]
 
你说的主键在哪设?access还是delphi里?怎么设啊?那东西是自动生成的阿
 
找了一段代码,改一下应该可以用于第一个问题:
procedure TfrmMain.btnShowSelectionsClick(Sender: TObject);
var
Index: Integer;
s: string;
begin
if not (dgMultiSelect in grid.Options) then
raise Exception.Create('dgMultiSelect not set');

if grid.SelectedRows.Count = 0 then
raise Exception.Create('No rows selected');

for Index := 0 to grid.SelectedRows.Count - 1 do begin
//关键是这一行!
ClientDataSet1.Bookmark := grid.SelectedRows[Index];
showmessage(clientdataset1.bookmark);
if s <> '' then
s := s + #13;
s := s + Format('%d: %s', [ClientDataSet1.FieldByName('ID').AsInteger,
ClientDataSet1.FieldByName('Name').AsString]);
end;
ShowMessage(s);
end;
 
access里面设定主键就好了。这个特简单不用编代码
 
请问怎么设才可以呢?access自动设的id不行吗?
 
自动设定的主键就会出现你说的问题。怎么设定的问题:你打开表table(你的表名)右击鼠标
选择‘设计视图’进入表的设计。然后就可以改了,你可以使用帮助。
 
我试过了,怎么改都不行啊,我把索引的3种情况都试过了,不行,而且还引起其它错误,难道是改自动编号?那改成数字的话,岂不要用语句实现id的增长?
 
谢谢大家的回答!
 
后退
顶部