Public Function GetSystemDate() As Date
Dim aD As Date
Dim cmd1 As New SQLCommand
'设置数据源名称
cmd1.C
cmd1.commandText = "Select getdate()"
ad = cmd1.ExecuteScalar
Return ad
End Function
'编码规范类型名 前缀 日期格式 数据位数
Public Function GetSystemBM(bmType As String,byval PF As String,byval DFormat As String ,byval sNum As Integer) As String
Dim bm As String
Dim dt As DataTable
Dim Key As Integer
Dim Adate As String
Dim aWhere As String
Dim Astr As new String("0",snum)
Dim sDate As Date
Dim cmd1 As New SQLCommand
Dim cmd2 As New SQLCommand
sdate=GetSystemDate()
'设置数据源名称
cmd1.C
cmd2.C
'检查是否存在此编码规范 如果不存在 则添加
cmd1.commandText = "Select Count(*) From [系统编码] Where [前缀] = '" & PF & "'"
If cmd1.ExecuteScalar = 0 Then '如果编号表不存在前缀的行,那么增加一行
cmd1.commandtext = "Insert Into 系统编码(前缀, 顺序号,日期,日期格式) Values('" & PF & "',1,'" & format(sdate,DFormat) & "','" & DFormat & "')"
cmd1.ExecuteNonQuery
End If
'获取并更新编码规范
cmd1.commandText = "Select [顺序号][日期][日期格式] From [系统编码] Where [前缀] = '" & PF & "'"
Do
dt = cmd1.ExecuteReader()'从后台获得顺序号,日期,日期格式
MessageBox.SHOW (“下面出错啦”)
If format(sDate,dt.DataRows(0)("日期格式"))<>dt.DataRows(0)("日期") Then
key=1
Adate=dt.DataRows(0)("日期")
Else
key=dt.DataRows(0)("顺序号") +1
Adate= format(sDate, dt.DataRows(0)("日期格式"))
End If
aWhere= "[顺序号] = " & dt.DataRows(0)("顺序号") & " And [日期] = '" & dt.DataRows(0)("日期") & "' And [前缀] = '" & pf & "'"
cmd2.commandText = "Update [系统编码] Set [顺序号] = " & Key & ",[日期] = " & Adate & " Where " & aWhere
If cmd2.ExecuteNonQuery() > 0 Then '更新顺序号
Exit Do '更新成功则退出循环
End If
Loop
'返回编码
bm = PF & Adate & Format(Key,Astr)
Return bm
End Function
请教专家怎么解决
将:
MessageBox.SHOW (“下面出错啦”)
改为三个:
MessgeBox.Show(format(sDate,dt.DataRows(0)("日期格式")))
MessageBox.show(dt.DataRows(0)("日期"))
MessageBos.show(format(sDate,dt.DataRows(0)("日期格式"))<>dt.DataRows(0)("日期"))
看看你比较的值和比较的结果是什么。
MessageBox.SHOW ("0")
dt = cmd1.ExecuteReader()'从后台获得顺序号,日期,日期格式
MessageBox.SHOW ("1")
dt.AddNew
MessageBox.SHOW ("2") 没出现,出现错误消息
你四楼贴的代码,一楼都找不到啊,例如一楼哪有dt.AddNew这一行啊?
另dt.AddNew执行的时候,错误提示是很么?
我建议在:
dt = cmd1.ExecuteReader()
后面来一行:
MessageBox.show(dt Is Nothing)
我怀疑dt是Nothing,所以出错。
'获取并更新编码规范
cmd1.commandText = "Select [顺序号][日期][日期格式] From [系统编码] Where [前缀] = '" & PF & "'"
Dim dt As DataTable
Do
MessageBox.SHOW ("0")
dt = cmd1.ExecuteReader()'从后台获得顺序号,日期,日期格式
MessageBox.SHOW ("1")
MessageBox.Show(format(sDate,dt.DataRows(0)("日期格式")))
MessageBox.SHOW ("2") 这个消息框没出现,出现错误 未将对象引用设置到对象的实例
MessageBox.show(dt.DataRows(0)("日期"))
MessageBox.SHOW ("3")
MessageBox.show(format(sDate,dt.DataRows(0)("日期格式"))<>dt.DataRows(0)("日期"))
dt.AddNew
出现这个错误,说明dt是Nothing,也就是说问题出在这里:
dt = cmd1.ExecuteReader() '从后台获得顺序号,日期,日期格式
cmd1并没有返回一个表给dt,也许Select语句有误。
为了验证这个判断,你可以在加一行:
dt = cmd1.ExecuteReader() '从后台获得顺序号,日期,日期格式
MessageBox.show(dt Is Nothing)
如果显示的是True,说明dt确实为空。
如果dt为空,为了找出原因,再加一行:
dt = cmd1.ExecuteReader() '从后台获得顺序号,日期,日期格式
Output.show(cmd1.commandText)
执行前打开命令窗口,这样执行时命令窗口会显示你合成的SQl语句,将这个SQl语句复制到SQL执行窗口执行,看看能得到什么。
[此贴子已经被作者于2011-5-17 16:36:28编辑过]
dt = cmd1.ExecuteReader()'
应该是这个代码出错,没有返回结果,
'获取并更新编码规范
cmd1.commandText = "Select [顺序号] From [系统编码] Where [前缀] = '" & PF & "'"
MessageBox.SHOW (cmd1.ExecuteScalar )
Dim dt As DataTable
Do
MessageBox.SHOW ("00")
dt = cmd1.ExecuteReader()'从后台获得顺序号,日期,日期格式
MessageBox.SHOW ("01")
MessageBox.Show(dt.DataRows(0)("顺序号"))
成功返回值
不好意思,找到错误了,忘记了两个逗号
Select [顺序号][日期][日期格式]
正确 Select [顺序号],[日期],[日期格式]