那就请你们给看看代码:第1个过程的是想修改某字段;其他过程是想先生成checkbox,再选择记录delete;procedure Tcjxg_fr.modify_btClick(Sender: TObject); begin with stuxinxi_Dm do begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('update chengjibiao set grade=strtofloat(jg_dbg.Columns[3].text) where t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no'); //这里有语法错误 adoquery1.Open; adoquery1.CanModify; adoquery1.Edit; jg_dbg.Columns[3].ReadOnly:=false; adoquery1.Post; messagedlg('修改成绩成功!',mtconfirmation,[mbyes],0); end; end;//从这里起的代码都是来生成checkbox并delete记录,为啥没反应呢? procedure Tcjxg_fr.jg_dbgCellClick(Column: TColumn); begin application.MessageBox('您可以修改成绩!','给您的提示',mb_ok+MB_ICONEXCLAMATION );if jg_dbg.SelectedField.DataType = ftBoolean then SaveBoolean();end; procedure Tcjxg_fr.SaveBoolean; begin jg_dbg.SelectedField.DataSet.Edit; jg_dbg.SelectedField.AsBoolean := not jg_dbg.SelectedField.AsBoolean; jg_dbg.SelectedField.Dataset.Post; end;procedure Tcjxg_fr.jg_dbgDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);Const CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var CheckBoxRectangle : TRect; begin if Column.Field.DataType = ftBoolean then begin jg_dbg.Canvas.FillRect(Rect); CheckBoxRectangle.Left := Rect.Left + 2; CheckBoxRectangle.Right := Rect.Right - 2; CheckBoxRectangle.Top := Rect.Top + 2; CheckBoxRectangle.Bottom := Rect.Bottom - 2; DrawFrameControl(jg_dbg.Canvas.Handle, CheckBoxRectangle, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]); end; end;procedure Tcjxg_fr.jg_dbgColEnter(Sender: TObject); begin if jg_dbg.SelectedField.DataType = ftBoolean then begin FOriginalOptions := jg_dbg.Options; jg_dbg.Options := jg_dbg.Options - [dgEditing]; end;end;procedure Tcjxg_fr.jg_dbgColExit(Sender: TObject); begin if jg_dbg.SelectedField.DataType = ftBoolean then jg_dbg.Options := FOriginalOptions;end;procedure Tcjxg_fr.del_btClick(Sender: TObject); begin if jg_dbg.SelectedField.DataType = ftBoolean then SaveBoolean();end;
adoquery1.SQL.Add('update chengjibiao set grade=strtofloat(jg_dbg.Columns[3].text) where t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no'); //这里有语法错误 adoquery1.Open; ======================== t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no 你这是什么? adoquery1.Open; 不能用Open,Open只能用在有返回数据集时(如:select); 修改,删除,插入用:ExecSQL 改成: adoquery1.ExecSQL;
t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no 这是2个外键条件
在delphi里能用select语句查到表里自定义 的列吗? 如select 0 as flag from 表 报错:can not access field 'flag' as type boolean 那到底怎么写呢?
begin
with stuxinxi_Dm do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update chengjibiao set grade=strtofloat(jg_dbg.Columns[3].text) where t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no');
//这里有语法错误
adoquery1.Open;
adoquery1.CanModify;
adoquery1.Edit;
jg_dbg.Columns[3].ReadOnly:=false;
adoquery1.Post;
messagedlg('修改成绩成功!',mtconfirmation,[mbyes],0);
end;
end;//从这里起的代码都是来生成checkbox并delete记录,为啥没反应呢?
procedure Tcjxg_fr.jg_dbgCellClick(Column: TColumn);
begin
application.MessageBox('您可以修改成绩!','给您的提示',mb_ok+MB_ICONEXCLAMATION );if jg_dbg.SelectedField.DataType = ftBoolean then
SaveBoolean();end;
procedure Tcjxg_fr.SaveBoolean;
begin
jg_dbg.SelectedField.DataSet.Edit;
jg_dbg.SelectedField.AsBoolean := not jg_dbg.SelectedField.AsBoolean;
jg_dbg.SelectedField.Dataset.Post;
end;procedure Tcjxg_fr.jg_dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);Const
CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
DFCS_BUTTONCHECK or DFCS_CHECKED);
var
CheckBoxRectangle : TRect;
begin
if Column.Field.DataType = ftBoolean then
begin
jg_dbg.Canvas.FillRect(Rect);
CheckBoxRectangle.Left := Rect.Left + 2;
CheckBoxRectangle.Right := Rect.Right - 2;
CheckBoxRectangle.Top := Rect.Top + 2;
CheckBoxRectangle.Bottom := Rect.Bottom - 2;
DrawFrameControl(jg_dbg.Canvas.Handle,
CheckBoxRectangle,
DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]);
end;
end;procedure Tcjxg_fr.jg_dbgColEnter(Sender: TObject);
begin
if jg_dbg.SelectedField.DataType = ftBoolean then
begin
FOriginalOptions := jg_dbg.Options;
jg_dbg.Options := jg_dbg.Options - [dgEditing];
end;end;procedure Tcjxg_fr.jg_dbgColExit(Sender: TObject);
begin
if jg_dbg.SelectedField.DataType = ftBoolean then
jg_dbg.Options := FOriginalOptions;end;procedure Tcjxg_fr.del_btClick(Sender: TObject);
begin
if jg_dbg.SelectedField.DataType = ftBoolean then
SaveBoolean();end;
//这里有语法错误
adoquery1.Open;
========================
t_cj.stu_no=t_xj.stu_no and t_cj.kecheng_no=t_kc.kecheng_no
你这是什么? adoquery1.Open;
不能用Open,Open只能用在有返回数据集时(如:select);
修改,删除,插入用:ExecSQL
改成:
adoquery1.ExecSQL;
这是2个外键条件
如select 0 as flag from 表
报错:can not access field 'flag' as type boolean
那到底怎么写呢?