Foxtable(狐表)用户栏目专家坐堂 → 获取编号的方法中的错误


  共有10982人关注过本帖树形打印复制链接

主题:获取编号的方法中的错误

帅哥哟,离线,有人找我吗?
kgd815
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:724 威望:0 精华:0 注册:2011/4/30 11:55:00
获取编号的方法中的错误  发帖心情 Post By:2011/5/17 16:06:00 [只看该作者]

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

请教专家怎么解决


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/17 16:11:00 [只看该作者]

执行到哪里出错,错图提示是什么?


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/17 16:18:00 [只看该作者]

将:

MessageBox.SHOW (“下面出错啦”)

 

改为三个:

 

MessgeBox.Show(format(sDate,dt.DataRows(0)("日期格式")))

MessageBox.show(dt.DataRows(0)("日期"))

MessageBos.show(format(sDate,dt.DataRows(0)("日期格式"))<>dt.DataRows(0)("日期"))

 

看看你比较的值和比较的结果是什么。


 回到顶部
帅哥哟,离线,有人找我吗?
kgd815
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:724 威望:0 精华:0 注册:2011/4/30 11:55:00
统计表设计思路请教  发帖心情 Post By:2011/5/17 16:21:00 [只看该作者]

    MessageBox.SHOW ("0") 
    dt = cmd1.ExecuteReader()'从后台获得顺序号,日期,日期格式  
    MessageBox.SHOW ("1")  
    dt.AddNew 
    MessageBox.SHOW ("2") 没出现,出现错误消息

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/17 16:24:00 [只看该作者]

你四楼贴的代码,一楼都找不到啊,例如一楼哪有dt.AddNew这一行啊?

另dt.AddNew执行的时候,错误提示是很么?

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/17 16:26:00 [只看该作者]

我建议在:

 

dt = cmd1.ExecuteReader()

 

后面来一行:

 

MessageBox.show(dt Is Nothing)

 

我怀疑dt是Nothing,所以出错。


 回到顶部
帅哥哟,离线,有人找我吗?
kgd815
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:724 威望:0 精华:0 注册:2011/4/30 11:55:00
  发帖心情 Post By:2011/5/17 16:30:00 [只看该作者]


'获取并更新编码规范

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    




 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/5/17 16:34:00 [只看该作者]

出现这个错误,说明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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
kgd815
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:724 威望:0 精华:0 注册:2011/4/30 11:55:00
  发帖心情 Post By:2011/5/17 16:37:00 [只看该作者]

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)("顺序号"))
成功返回值



 回到顶部
帅哥哟,离线,有人找我吗?
kgd815
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:49 积分:724 威望:0 精华:0 注册:2011/4/30 11:55:00
  发帖心情 Post By:2011/5/17 16:42:00 [只看该作者]

不好意思,找到错误了,忘记了两个逗号
Select [顺序号][日期][日期格式] 

正确 Select [顺序号],[日期],[日期格式]

 回到顶部