DELPHI中,用ADOQUERY作数据源,用DBGRID呈现数据,如何感应到DBGRID中的数据已经改变?
比如说字段 A,B,C
在A字段为 X 的情况下,如果修改了B字段,则自动取消修改
如何实现?
请帮忙,谢谢
比如说字段 A,B,C
在A字段为 X 的情况下,如果修改了B字段,则自动取消修改
如何实现?
请帮忙,谢谢
解决方案 »
- ADOQuery查询出的数据集用TGrid的单元合并问题(FlexCell插件)
- 能将memorystream存入array fo char?如何操作?
- 职业是应该做自己最想做的还是做自己最适合做的还是做自己不得不做的?
- 为什么老是出错,
- 取得网页地址的问题!
- 不明白的东西...望高手指教下!!!
- 求助:关于DELPHI6的安装问题
- 工程里有个主窗体,我做了菜单,怎么在菜单调用其他的窗体呢?用什么命令啊?(真难为情)
- 在DELPHI中同PB的RETURN语句功能相同的语句是什么?即不再执行下面语句
- 能不能把oracle数据源和mysql数据源打包到delphi应用程序的安装程序里面?
- delphi初学者的迷惑
- 大家好一个菜鸟问题!!还请路过的朋友指点
adoquery1.close;
adoquery.open;
unit Main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Menus, StdCtrls, Buttons, Grids, DBGrids, ADODB,
ExcelXP, OleServer;type
TMainForm = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
BitBtn2: TBitBtn;
BitBtn4: TBitBtn;
Label3: TLabel;
BitBtn6: TBitBtn;
BitBtn5: TBitBtn;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
BitBtn7: TBitBtn;
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation{$R *.dfm}//刷新数据
procedure TMainForm.BitBtn1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select id as 学号,userid as 学生姓名,username as 课程代号,');
SQL.Add('logindate as 卷面成绩,logintime as 平时成绩,quittime as 实验参加次数,');
SQL.Add('rights as 总实验次数,number as 综合成绩 from userlogin');
Open;
end;
end;//连接后台数据库
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
MainForm.ADOConnection1.Connected:=True;//连接后台数据库
if MainForm.ADOConnection1.Connected=False then //如果连接失败
begin
MessageDlg('系统连接后台数据库失败。请'+#13+#10+
''+#13+#10+'检查数据库网络配置是否完好!',
mtWarning,[mbYes],0);
Application.Terminate;//应用程序退出
end
else
begin
MessageDlg('系统已成功连接后台数据库!',mtInformation,[mbYes],0);
end;
BitBtn2.Enabled:=False;//设置组件的使能状态
BitBtn3.Enabled:=True;
end;//断开数据库连接
procedure TMainForm.BitBtn3Click(Sender: TObject);
begin
ADOConnection1.Connected:=False;
BitBtn2.Enabled:=True;
BitBtn3.Enabled:=False;
end;//连接数据库时显示登陆提示
procedure TMainForm.BitBtn4Click(Sender: TObject);
begin
ADOConnection1.LoginPrompt:=True;
BitBtn4.Enabled:=False;
BitBtn5.Enabled:=True;
end;//连接数据库时不显示登陆提示
procedure TMainForm.BitBtn5Click(Sender: TObject);
begin
ADOConnection1.LoginPrompt:=False;
BitBtn4.Enabled:=True;
BitBtn5.Enabled:=False;
end;//退出
procedure TMainForm.BitBtn6Click(Sender: TObject);
begin
Close;
end;
不过个人建议,如果不好控制还是不要在DBGRID中直接修改数据比较好。
if filedByName['A'].value = 'X' then
Dbgird.Options = dbgrid1.Options - [dgEditing]
else Dbgird.Options = dbgrid1.Options + [dgEditing];
原理就是判断值等不等于'X' 然后就把Dbgrid的可编辑属性开或关 就行了 楼主明白了吧
给分吧!!! 穷啊!
那么在数据源state in [dsinsert,dsedit]可以修改bdgrid中字段对应的值
if adoquery1.filedByName('A')value = 'X' then Abort;