我想请求你的帮助。问题是我试图关联两个表,所以我需要在每个“id”列的表上创建主键,但是我在这一行上收到错误
class MyClass {
public:
void playMahJam() {
if (!music.openFromFile("data/sounds/music.wav")){
std::cout << "Error..." << std::endl;
}
else{
music.setLoop(true);
music.setVolume(50);
music.play();
}
} // end playMahJam()
private:
sf::Music jam;
};
错误:
无法启用此约束,因为并非所有值都具有相应的父值。
(原版错误的西班牙文= No se puede habilitarestalimitciónyque que todos los valores no tienen los valores primarios correspondenceientes。)
我做错了什么?
ds.Relations.Add(dr);
提前致谢。
答案 0 :(得分:0)
这里的问题是你的数据。您正在为每个表添加主键,然后尝试使用外键将它们链接。
但是,从您收到的错误消息中,听起来您试图将dtbl链接到dtbl2中不存在的id。
我会尝试执行SQL查询以找出问题记录所在的位置,然后选择添加&#34; parent&#34;,更改父级或删除记录。
SELECT * FROM componentes WHERE id_prov_comp NOT IN (SELECT ID FROM proveedores )
答案 1 :(得分:0)
主键是可以的 - 您已经使用以下行成功创建了它们:
dtbl.PrimaryKey = new DataColumn[] { dtbl.Columns["id"] };
dtbl2.PrimaryKey = new DataColumn[] { dtbl2.Columns["id"] };
DataRelation
中的问题(如异常所示)。 DataRelation
相当于数据库FK(外键)。使用的构造函数的签名如下所示:
public DataRelation(
string relationName,
DataColumn parentColumn,
DataColumn childColumn
)
我认为你做错了是指定了错误的列 - parentColumn
应指向被引用的表childColumn
- 引用它的表。
简单地将其改为:
DataRelation dr = new DataRelation("provcomp",
ds.Tables["dtbl2"].Columns["id"],
ds.Tables["dtbl"].Columns["id_prov_comp"]);
如果它们确实正确相关,那么问题就应该解决了。
编辑:如果父表不包含子表中的所有键,您可以考虑使用此构造函数overload并传递createConstraints = false
,这将阻止例外,但请注意,某些子记录不会找到他们的父记录。
DataRelation dr = new DataRelation("provcomp",
ds.Tables["dtbl2"].Columns["id"],
ds.Tables["dtbl"].Columns["id_prov_comp"],
false);
答案 2 :(得分:0)
父列(即主键)必须位于子列(即外键)之前。试试这个:
function createFromJSON(JSONText){
console.log("In Create Function");
dojo.disconnect(handle);
var jsontext = JSON.parse(JSONText);
var polygon = new esri.geometry.Polygon(jsontext);
console.log("Here is the polygon object:");
console.log(polygon);
console.log("Now drawing polygon");
map.graphics.add(new Graphic(polygon, new SimpleFillSymbol()));
console.log("Polygon should be there");
}