本人用VB+SQL SERVER2000制作了一个类似于通讯录得个人信息管理系统,制作过程当中出现了两个问题:
1:当数据库的表为空时,与服务器建立连接之后总是出现这样的错误:“28:堆栈空间溢出“。
点调试后,程序停止在:
Public Sub UpdateNameCombo()
Dim RSNames As ADODB.Recordset '定义一记录集变量
'通过连接变量执行存储过程
Combo1.Clear ‘程序停止在这里!!!!!!!!!!!!!!!!!!!!!
Set RSNames = MyConnection.Execute("Exec contactlist")
Combo1.Clear
Do Until RSNames.EOF
Combo1.AddItem RSNames("Name")
Combo1.ItemData(Combo1.NewIndex) = RSNames("ContactID")
RSNames.MoveNext
Loop
End Sub
而如果表中已经有记录时,则可以正常运行。当点击删除按钮将所有记录删除之后,程序自动就退出了。再进时,就出现了错误28。我估计是由于程序中产生了死循环。
2:当表不为空时,点击添加按钮向表中添加记录时,总是出现这样的错误:”实时错误 ’3265‘在对应所需名称或序数的集合中,未找到项目。“ 但实际上,当再次打软件时,记录已经添加到表中了。调试时,程序停止在:
Private Sub Command3_Click()
Dim RSAddNew As ADODB.Recordset
Set RSAddNew = MyConnection.Execute("Exec contactadd " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
currentID = RSAddNew("TheNewID") '停止在这里!!!!!!!!!!!!!!!!!
Combo1.AddItem Text1.Text
Combo1.ItemData(Combo1.NewIndex) = RSAddNew("TheNewID")
End Sub还有:T-sql语言是不是严格区分大小写啊???????????????
1:当数据库的表为空时,与服务器建立连接之后总是出现这样的错误:“28:堆栈空间溢出“。
点调试后,程序停止在:
Public Sub UpdateNameCombo()
Dim RSNames As ADODB.Recordset '定义一记录集变量
'通过连接变量执行存储过程
Combo1.Clear ‘程序停止在这里!!!!!!!!!!!!!!!!!!!!!
Set RSNames = MyConnection.Execute("Exec contactlist")
Combo1.Clear
Do Until RSNames.EOF
Combo1.AddItem RSNames("Name")
Combo1.ItemData(Combo1.NewIndex) = RSNames("ContactID")
RSNames.MoveNext
Loop
End Sub
而如果表中已经有记录时,则可以正常运行。当点击删除按钮将所有记录删除之后,程序自动就退出了。再进时,就出现了错误28。我估计是由于程序中产生了死循环。
2:当表不为空时,点击添加按钮向表中添加记录时,总是出现这样的错误:”实时错误 ’3265‘在对应所需名称或序数的集合中,未找到项目。“ 但实际上,当再次打软件时,记录已经添加到表中了。调试时,程序停止在:
Private Sub Command3_Click()
Dim RSAddNew As ADODB.Recordset
Set RSAddNew = MyConnection.Execute("Exec contactadd " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
currentID = RSAddNew("TheNewID") '停止在这里!!!!!!!!!!!!!!!!!
Combo1.AddItem Text1.Text
Combo1.ItemData(Combo1.NewIndex) = RSAddNew("TheNewID")
End Sub还有:T-sql语言是不是严格区分大小写啊???????????????
A:调用DisPlayContact子程序来显示combo1下拉表中被选项目的对应记录
Private Sub Combo1_Click()
DisPlayContact Combo1.ItemData(Combo1.ListIndex)
End SubB:调用contacAdd存储过程,添加一条记录至contacts表中,同时记录联系人编号和联系人姓名加入combo1下拉表中。
问题主要存在地!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Private Sub Command3_Click()
’联系人添加按钮的驱动程序
Dim RSAddNew As ADODB.Recordset
Set RSAddNew = MyConnection.Execute("Exec contactadd " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
currentID = RSAddNew("TheNewID")
Combo1.AddItem Text1.Text
Combo1.ItemData(Combo1.NewIndex) = RSAddNew("TheNewID")
End SubC:联系人按钮的驱动程序
Private Sub Command8_Click()
If currentID = 0 Then
Command3_Click '联系人添加按钮
Else
MyConnection.Execute ("Exec contactupdate " & currentID & ", " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
End If
UpdateNameCombo
End SubD:联系人删除按钮的事件驱动程序
Private Sub Command4_Click()
If currentID = 0 Then
Command5_Click ‘联系人清除按钮
Else
MyConnection.Execute "Exec deletecontact " & currentID
UpdateNameCombo
DisPlayContact 0
End If
End SubE:清除当前窗口信息
Private Sub Command5_Click()
currentID = 0
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text6.Text = ""
End SubF:退出按钮
Private Sub Command7_Click() '退出程序
Unload Me
End SubG:调用子程序DiaPlayContact显示contacts表中第一条记录,然后调用UpdateNameCombo将contacts表中记录联系人编号和联系人姓名加入combo1下拉表
Private Sub Form_Load()
DisPlayContact 0
UpdateNameCombo
End Sub
//T-sql本身并不区分,要看数据库是不是区分大小写的,这个跟数据库设置有关系!
调试时,程序就停在这里,
currentID = RSAddNew("TheNewID")
RSAddNew的定义为,
Dim RSAddNew As ADODB.Recordset
Set RSAddNew = MyConnection.Execute("Exec contactadd " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
在调用contactadd存储过程后:有select @@identity as TheNewID
为什么会没有TheNewId这个字段呢? @@identity是标识列的值嘛,他是随系统自动增加的阿!
搞不明白!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CREATE Procedure contactadd
@name varchar(50),@Address varchar(100),
@ZipCode varchar(20),@EmailAddress varchar(50),
@ContactNote varchar(50)
AS
begin
insert into contacts
(name,Address,ZipCode,EmailAddress,ContactNote)values
(@name,@Address,@ZipCode,@EmailAddress,@contactNote)
select @@identity as TheNewID
end
return
但是不知道到底是为什么~~~哪位高人知道?Private Sub Command3_Click()
On Error Resume Next '在添加了该句之后问题解决!!!!!!!!!!!!!!!!!!
Dim RSAddNew As ADODB.Recordset
Set RSAddNew = MyConnection.Execute("Exec contactadd " & "'" & Text1.Text & "'," & "'" & Text2.Text & "'," & "'" & Text3.Text & "'," & "'" & Text4.Text & "'," & "'" & Text6.Text & "'")
currentID = RSAddNew("TheNewID") '停止在这里!!!!!!!!!!!!!!!!!
Combo1.AddItem Text1.Text
Combo1.ItemData(Combo1.NewIndex) = RSAddNew("TheNewID")
End Sub那第一个问题怎么解决呢?~~~~~~~~~
是不是表中至少要有一个记录啊?!!!!!!!!!
我在程序停止的地方加了On error Resume Next,但是没有用啊!!!!
怎么加入限制啊?还有Public Sub UpdateNameCombo()
On Error Resume Next '我在这里添加了,但是没有用啊!!!!
Dim RSNames As ADODB.Recordset '定义一记录集变量
'通过连接变量执行存储过程
Combo1.Clear ‘程序停止在这里!!如果把这一行去掉,form就被卸载了~~~~郁闷
Set RSNames = MyConnection.Execute("Exec contactlist")
Combo1.Clear
Do Until RSNames.EOF
Combo1.AddItem RSNames("Name")
Combo1.ItemData(Combo1.NewIndex) = RSNames("ContactID")
RSNames.MoveNext
Loop
End Sub
只用ACCESS做过类似的东东。