各位是怎么使用dbgrid这个东西的.请帮帮我.(100分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
(D4+Access+ODBC Express)
我有1数据库(Access),里面有一字段ID是自动增加字段,大家知道这个字段是
不能赋值的,他会自动产生.
我用一个tquery+dbgrid显示这个数据库(requestlive:=true),ID这个字段
我没有显示,当我添加记录时(在dbgrid上添加),我以为Dbgird会自动给这个
ID字段赋一个新值,没想到不成, 错误提示(ODBC给的)说"ID这个字段必须有值",就是说
他没有自动赋值, 可我也不能手动去给它赋值呀!
 
在Your_Query.OnNewRecord 那里想办法处理一下吧,
我没做过的说.
 
用DBGrid离不开DBNavigater.若使用Delphi的DBNavigater则不能按自己的意愿行
事!我的办法是用自己的DBNavigater,只有这样,才能淋漓尽致地发挥DBGrid的
功能!
 
这不是DBGrid的错,只要把Table中相应的字段(Field)属性Required
设为false就行乐。
Oracle, Paradox等主键也有相同的问题。
 
to jams: 什么意思?
to xixi: 能说的详细一点吗? 是修改数据库还是...? 我用的是tquery, not
table.
 
Query不行,Table就可以.
如果是单用户,改成Table算了,如果是多用户,那么更无法实现.
还有一个办法,麻烦点,不要requestlive:=true,自己处理Query的提交.
 
to wgzhang:用tquery或Ttable和网络用户/单机用户没什么关系吧?
我的程序要求根据不同情况显示同一个表里面的部分记
录,用Ttable不能满足.
"自己处理Query的提交"-->能说的详细些吗? 因为我是
直接在DBGrid上添加记录,如何自己处理呢?
 
用Table也可以显示部分记录,filter一下就可以.
许多大虾都有这样的建议,不要用自增型字段,自己处理.单机处理简单,网络处理就复杂了
DBGrid也有dataset,
对Query1建立一个计算型字段,放此记录的状态,就可以根据此状态处理数据集.
procedure TForm1.FormActivate(Sender: TObject);
var UpdRecTypes : TUpdateRecordTypes;
begin
UpdRecTypes := [rtModified, rtInserted, rtDeleted, rtUnmodified];
Query1.Open;
Query1.UpdateRecordTypes := UpdRecTypes;
end;

procedure TForm1.Query1CalcFields(DataSet: TDataSet);
const
UpdateStatusStr: array[TUpdateStatus] of string = ('Unmodified', 'Modified', 'Inserted', 'Deleted');
begin
Query1Status.Value:=UpdateStatusStr[Query1.UpdateStatus];
end;


 
to wgzhang: 还是不懂,数据集状态和我的问题有什么关系?
能不能说的在详细一点? 我很笨的.
 
用自增字段在server型DB中麻烦更多。
delphi经常会因为字段值在服务器端被改变而
找不到刚刚变动的记录。
 
知道了每一条纪录的状态,就可以遍历一遍Query,不用updatesql,可以根据状态再用SQL语句处理是删除原纪录还是插入或修改.此时的自增型字段处理就方便了.
如果是单用户环境,建议用table,要方便的多.什么都不用改.
 
这不是DBGRID的错.SQL EXPLOR就是用DELPHI写的,用到了DBGRID.一切OK!
对于ACCESS和MS SQL SERVER来说,自动增长字段是可以方便使用的.关键是在数据库的约束中定义好,并且为主键/索引.
不知道你的SQL语句用到了几个表.如果是多个表,那么TQuery要和TUpdataSql配合使用才行.
 
后退
顶部