添加数据时的错误Error:由于将在索引、主关键字、或关系中创建重复的值,请求对表的改变没有成功
Error:由于将在索引、主关键字、或关系中创建重复的值,请求对表的改变没有成功。改变该字段中的或包含重复的数据的字段中的数据,删除索引或重新定义索引以允许重复的只并再试一次。
我在listbox中添加删除数据并将数据保存在一个list中,list的结构(TAype)中有编号、名称、操作类型(枚举:dtAdd添加、dtDelete删除、dtChange改变名称),等所有操作都完成后根据list中的操作类型将数据保存到数据库中。问题是如果每次添加一个数据或删除一个数据或改变一个数据就将其保存到数据库中没有问题,但是如果在listbox中进行多条数据操作后再将其保存到数据库中就会出现如上错误。那位高人知道答案啊?能否给解释一下?
源代码:
for( int i = 0; i < List->Count; i++ )
{
TAType * record = ( TAType * )List->Items[i];
if( record->caozuoleixing == dtAdd)
{
TADOQuery * query = DataBaseUnit->ADOOpenSQL( "SELECT * FROM NameTable order by Type" );
query->Append();
query->FieldValues["Type"] = record->Type;
query->FieldValues["TypeName"] = record->TypeName;
query->Post();
}
if( record->caozuoleixing == dtDelete )
{
AnsiString sql = "Delete from NameTable where Type = " + record->Type + " And TypeName = '" + record->TypeName + "'";
DataBaseUnit->ADOExecSQL( sql );
}
if( record->caozuoleixing == dtChange)
{
AnsiString sql = "update NameTable set TypeName = '" + record->TypeName + "'"+" where Type = " + record->Type;
DataBaseUnit->ADOExecSQL( sql );
}
}
void __fastcall TDataBaseUnit::ADOOpenSQL( TADOQuery *query, AnsiString SQL )
{
query->Close();
query->SQL->Text = SQL;
query->Open();
}
void __fastcall TDataBaseUnit::ADOExecSQL( TADOQuery *query, AnsiString SQL )
{
query->Close();
query->SQL->Text = SQL;
query->ExecSQL();
}