我在做一个"课程设置"模块时,用到了数据集缓存技术,在提交到数据库按钮的运行中出现以下错误提示:
Key violation.
[Microsoft][ODBC SQL Server Driver][SQL Server]当IDENTITY_INSERT设置为OFF时,不能向表course中的标识列插入显式值.
可是我根本就找不到IDENTITY_INSERT这个值啊,这个提示应该如何解决啊?
其中用到的部分代码如下:
procedure TF_course.FormCreate(Sender: TObject);
begin
Tabcourse.CachedUpdates :=true;
end;procedure TF_course.BtnsavtosrvClick(Sender: TObject);
begin
Tabcourse.ApplyUpdates ; //提交到数据库
end;
其他诸如修改、删除之类的代码在此就略去了。
Key violation.
[Microsoft][ODBC SQL Server Driver][SQL Server]当IDENTITY_INSERT设置为OFF时,不能向表course中的标识列插入显式值.
可是我根本就找不到IDENTITY_INSERT这个值啊,这个提示应该如何解决啊?
其中用到的部分代码如下:
procedure TF_course.FormCreate(Sender: TObject);
begin
Tabcourse.CachedUpdates :=true;
end;procedure TF_course.BtnsavtosrvClick(Sender: TObject);
begin
Tabcourse.ApplyUpdates ; //提交到数据库
end;
其他诸如修改、删除之类的代码在此就略去了。
解决方法:
1.删除表主键
2.检查输入数据(不能插入主键相同的记录)
例如你的主键是userId,表名是tablename,那么可以这么作,
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from tablename where userid=:#userid');
Parameters.ParamByName('#userid').value := edit1.text;
open;
if recordcount = 0 then
begin
//添加操作。
end else showmessage('此记录已存在');
end;
字段名称 数据类型 字段属性
字段大小 作用 必填字段 索引 是否主键
ID INT 4 自增长 是 有(无重复) 是
COURSENO CHAR 6 课程代码 是 有(无重复)
NAME VARCHAR 30 课程名称 是 无
TEACHERNO CHAR 4 教师代码 是 无
CREDIT INT 学分 是 无
SELECTNUM INT 30 选课人数 否 无
NOTE VARCHAR 50 备注信息 否 无
我在添加记录后,点保存时,提示我ID必须要输入,输入ID后,“提交到数据库”,就报出上述错误了。整个模块的代码如下:
unit course;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, DB, DBTables, ExtCtrls, DBCtrls, StdCtrls, Mask,
Grids, DBGrids, ADODB;type
TF_course = class(TForm)
TreeView1: TTreeView;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
DBGrid1: TDBGrid;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DataSource1: TDataSource;
Label1: TLabel;
DBEdit1: TDBEdit;
Tabcourse: TTable;
TabcourseID: TIntegerField;
Tabcoursecourseno: TStringField;
Tabcoursename: TStringField;
Tabcourseteacherno: TStringField;
Tabcoursecredit: TIntegerField;
Tabcourseselectnum: TIntegerField;
Btnadd: TButton;
Btndlt: TButton;
Btnedt: TButton;
Btnsav: TButton;
Btnsavtosrv: TButton;
ADOQuery1: TADOQuery;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeView1DblClick(Sender: TObject);
procedure BtnaddClick(Sender: TObject);
procedure BtndltClick(Sender: TObject);
procedure BtnedtClick(Sender: TObject);
procedure BtnsavClick(Sender: TObject);
procedure BtnsavtosrvClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
F_course: TF_course;implementation{$R *.dfm}procedure TF_course.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;procedure TF_course.TreeView1DblClick(Sender: TObject);
begin if TreeView1.Selected.Text='信息系' then
begin
Tabcourse.Filter :='courseno = ''xin*''';
Tabcourse.Filtered :=true;
end
else if TreeView1.Selected.Text='计算机系' then
begin
Tabcourse.Filter :='courseno = ''jsj*''';
Tabcourse.Filtered :=true;
end
else if TreeView1.Selected.Text='管理系' then
begin
Tabcourse.Filter :='courseno = ''gli*''';
Tabcourse.Filtered :=true;
end
else
Tabcourse.Filtered :=false; // table1.Active :=false ;
//table1.Active :=true ;
end;procedure TF_course.BtnaddClick(Sender: TObject);
begin
Tabcourse.Append ;
end;procedure TF_course.BtndltClick(Sender: TObject);
begin
if MessageDlg('是否确定要删除信息?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Tabcourse.Delete ;
end;procedure TF_course.BtnedtClick(Sender: TObject);
begin
Tabcourse.edit ;
end;procedure TF_course.BtnsavClick(Sender: TObject);
begin
Tabcourse.post ;
end;procedure TF_course.BtnsavtosrvClick(Sender: TObject);
begin
Tabcourse.ApplyUpdates //提交到数据库
end;procedure TF_course.FormCreate(Sender: TObject);
begin Tabcourse.CachedUpdates :=true;
end;end.
求高手指教!谢谢了!
检测到错误类EDatabaseError,错误信息:'Field'ID" must have a value'. 进程中止