以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]insert into 出错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9876)

--  作者:huntkey
--  发布时间:2011/5/11 21:59:00
--  [求助]insert into 出错

SQL中3个表,TRole,TDepart,TDepart_Roles,三个表中各有一个字段“ID”作为主键,同时TRole,TDepart表的“ID”又作为TDepart_Roles表的外键,在对TDepart_Roles表进行insert into操作时报错:

 


图片点击可在新窗口打开查看此主题相关图片如下:错误提示.jpg
图片点击可在新窗口打开查看

--  作者:lxl
--  发布时间:2011/5/11 23:24:00
--  

先插入TRole  TDepart 这两个表的数据

然后插入 TDepart_Roles表的数据。

 

你这里出错是因为 插入部门_角色这个中间表数据的时候, 引用的角色根本不存在。


--  作者:huntkey
--  发布时间:2011/5/13 21:29:00
--  

我就是这样做的啊,今天也检查了在TRole表中是存在我要引用的角色的,但是还是出错,我把代码放上来,大侠帮我看看,谢谢

 

\'===============================取得机构ID===========================

Dim DID As Integer                 \'机构ID

Dim cmd As new sqlcommand

Dim dt As DataTable

Dim txt As winform.textbox=e.Form.controls("textbox1")

 

cmd.c

cmd.commandtext="select * from {TDepart}"

dt=cmd.executereader()

Dim dr As DataRow=dt.find("[FullName]=\'"& txt.value &"\'")

DID=dr("ID")

 

[此贴子已经被作者于2011-5-13 21:30:20编辑过]

--  作者:huntkey
--  发布时间:2011/5/13 21:31:00
--  
 

\'=============================添加机构角色=================================

Dim RID As Integer                 \'角色ID

Dim STR As String                 \'机构角色

Dim cmd1 As new sqlcommand           \'连接角色表

Dim cmd2 As new sqlcommand           \'连接机构_角色表

Dim cmd3 As new sqlcommand           \'连接机构_角色表

Dim dt1 As DataTable

Dim lstR As winform.Listbox=e.Form.controls("listbox1")       \'已选角色列表

Dim lstDR As winform.Listbox=e.Form.controls("listbox2")       \'预览

 

cmd1.c

cmd2.c

cmd1.commandtext="select * from {TRole}"

cmd2.commandtext="insert {TDepart_Roles} ([DepartID],[RoleID],[Remark],[CreaterID],[CreateTime]) Values(\'"& DID &"\',\'"& RID &"\',\'"& STR &"\',\'"& CurrentUserID &"\',\'"& date.today() &"\')"

dt1=cmd1.executereader()

cmd3.c

cmd3.commandtext="select * from {TDepart_Roles} where [Remark]=\'"& STR &"\'"

 

 

For i As Integer =0 To lstR.items.count-1

    Dim dr1 As DataRow=dt1.find("[name]=\'"& lstR.items(i).trim() &"\'")

    RID=dr1("ID")

    STR=TXT.value.trim() & "\\" & lstR.items(i)

    lstDR.items.add(STR)

    If cmd3.executenonquery()=1 Then

        Messagebox.show(""& STR &"已存在!","提示")

        Exit For

    ElseIf cmd2.executenonquery()=0 Then

        messagebox.show("添加失败!","提示")

        goto h

    End If

Next

If messagebox.show("添加成功!","提示") Then

    txt.value=""

    lstR.items.clear

End If

h:

[此贴子已经被作者于2011-5-13 21:31:52编辑过]

--  作者:e-png
--  发布时间:2011/5/13 23:15:00
--  
你这Values(\'"& DID &"\',\'"& RID &"\',\'"& STR &"\',\'"& CurrentUserID &"\',\'"& date.today() &"\')里面如果有数字类型的就不要加引号了吧(\'、"、& 都不要了) 。
--  作者:huntkey
--  发布时间:2011/5/14 11:47:00
--  

DID 、RID、CurrentUserID都是整型,不加引号行吗?我试试看

 

不过我在其它地方的代码中都加了的,也没有提示错误,而且也得到了我想要的结果,这是怎么回事呢?


--  作者:huntkey
--  发布时间:2011/5/14 11:49:00
--  
还有就是为什么只提示RoleID冲突而不提示DepartID冲突呢?
--  作者:huntkey
--  发布时间:2011/5/16 22:05:00
--  

哪位大侠指点一下嘛,解决不了,郁闷死了


--  作者:狐狸爸爸
--  发布时间:2011/5/16 22:26:00
--  

执行前打开命令窗口。

代码中output.show(cmd2.commandtext)

看看生成的Insert语句是什么。

 

将这个语句复制到SQL执行窗口执行,看看能否通过。


--  作者:huntkey
--  发布时间:2011/5/17 21:19:00
--  
我试试,谢谢狐爸