'基础资料删除前判断是否已经被引用。条件是引用的列名必须相同。请问还能优化吗?
Dim bm1 As String = "表A" '删除行所在表
Dim lm As String = "第一列" '以该列为依据,判断是否被引用
Dim lm2,hhz As String
Dim bm2 As String = Tables(bm1).DataTable.name
For Each dt As DataTable In DataTables
If DataTables(dt.Name).DataCols.Contains(lm) Then
If Tables(bm1).current IsNot Nothing And Tables(bm1).current.isnull(lm) = False Then
For i As Integer = Tables(bm1).BottomPosition To Tables(bm1).TopPosition Step -1
Dim dr As Row = Tables(bm1).Rows(i)
Dim d As String = lm & " = '" & dr(lm) & "'"
Dim d2 As String = "count(" & lm & ")"
Dim d1 As String
Dim r As Integer = eval(dt.Compute(d2,d))
If bm2 = dt.name Then
If cdec(r) > 1 Then
d1 = dt.Find(d & " And " & lm & " Is not null")(lm)
hhz = """" & dr(lm) & """" & "已经被" & """" & dt.name & """引用,禁止删除!"
Return hhz
End If
Else
If cdec(r) > 0 Then
d1 = dt.Find(d & " And " & lm & " Is not null")(lm)
hhz = """" & dr(lm) & """" & "已经被" & """" & dt.name & """引用,禁止删除!"
Return hhz
End If
End If
Next
End If
End If
Next
Dim cmd As New SQLCommand
'cmd.C 指定数据源
For Each dt As DataTable In DataTables
bm2 = dt.name
If bm2 IsNot Nothing And DataTables(bm2).Type <> 4 And DataTables(bm2).Type <> 5 Then
If DataTables(bm2).DataCols.Contains(lm) Then
If Tables(bm1).TopPosition > -1 Then
For i As Integer = Tables(bm1).BottomPosition To Tables(bm1).TopPosition Step -1
Dim lz As String = Tables(bm1).Rows(i)(lm)
Dim nm As String = "Select Count(*) From {" & bm2 & "} Where " & lm & " = " & "'" & lz & "'"
cmd.CommandText = nm
If bm2 <> CurrentTable.DataTable.name
If cmd.ExecuteScalar > 0 Then
hhz = """" & Tables(bm1).Rows(i)(lm) & """已被""" & bm2 & """引用,禁止删除!" & vbcrlf & "如果你确认该条记录已经更改或删除,请先保存以便及时更新后台数据,再进行相应操作!"
Return hhz
Exit For
End If
Else
If cmd.ExecuteScalar > 1 Then
hhz = """" & Tables(bm1).Rows(i)(lm) & """已被""" & bm2 & """引用,禁止删除!" & vbcrlf & "如果你确认该条记录已经更改或删除,请先保存以便及时更新后台数据,再进行相应操作!"
Return hhz
Exit For
End If
End If
Next
End If
End If
End If
Next
[此贴子已经被作者于2013-1-3 17:46:27编辑过]