以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  全局代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=133381)

--  作者:giulioli
--  发布时间:2019/4/13 10:10:00
--  全局代码
老师,我问下全局代码我写了
PUBLIC RECORD AS DATAROW

然后我从一个窗口给这个RECORD赋值,到另一个窗口调用RECORD(列名)好像不行,报错,不知道为何?

.NET Framework 版本:2.0.50727.8937
Foxtable 版本:2018.3.9.1
错误所在事件:窗口,learning,AfterLoad
详细错误信息:
未将对象引用设置到对象的实例。

[此贴子已经被作者于2019/4/13 10:15:32编辑过]

--  作者:有点蓝
--  发布时间:2019/4/13 10:46:00
--  
错误所在事件:窗口,learning,AfterLoad

写了什么代码?贴出来看看

--  作者:giulioli
--  发布时间:2019/4/13 10:53:00
--  
Dim cbx As WinForm.ComboBox = e.Form.controls("ComboBox1")
Dim binfo As WinForm.Label = e.Form.controls("label5")
Dim lbldate As WinForm.Label = e.Form.controls("datelabel")
Dim a As String
cbx.AllowEditValue = False
cbx.combolist = DataTables("client").GetComboListString("name")
leibie = 1

messagebox.show(riqi) \'全局代码riqi,是一个列名赋值给riqi这个string,这里调试没有问题
a = record(riqi) ‘估计这一行出错,record找不到

messagebox.show(a)
lbldate.text = "日期" & a

If shoufu = True Then
    binfo.text = "收款"
Else
    binfo.text = "付款"


--  作者:有点蓝
--  发布时间:2019/4/13 11:20:00
--  
全局代码只是定义了record这么一个变量,有什么地方给这个变量赋值了吗?赋值了才能使用
--  作者:giulioli
--  发布时间:2019/4/13 11:23:00
--  
有赋值,在主窗口里面有段代码, for each record as datarow in crecords 循环,这样算赋值吗?

   For Each record As DataRow In crecords
        shoufu = True
        dr = DataTables("receipt").addnew()
        acode = DataTables("infolearn").Find("[baccount] = \'" & record(counteracc) & "\' And [inout] = True")
        
        If acode Is Nothing Then
            newdr = DataTables("infolearn").AddNew()
            newdr("baccount") = record(counteracc)
            newdr("bbank") = record(counterbnk)
            newdr("bname") = record(counter)
            
            dr("counterparty") = newdr("bname")
            dr("payercategory") = newdr("type")
            
        Else
            
            dr("counterparty") = acode("code")
            dr("payercategory") = acode("type")
            
        End If
        
        dr("date") = CDate(record(riqi))
        dr("amount") = val(record(credit))
        dr("ouraccountID") = accdr("accountID")
        dr("note") = record(zhaiyao)
        
    Next


--  作者:有点蓝
--  发布时间:2019/4/13 11:39:00
--  
不算。这个是在循环里重新定义了一个局部变量,和全局变量没有半毛钱的关系
--  作者:giulioli
--  发布时间:2019/4/13 12:06:00
--  
我在全局代码里写了 PUBLIC RECORD AS DATAROW 呀
--  作者:有点蓝
--  发布时间:2019/4/13 13:43:00
--  
代码块里重新定义的变量名会覆盖全局的变量名。这个是代码作用域的问题。

这样改改就可以了

For Each record  In crecords

但是这样的用法看不出使用全局变量的意义在哪里

--  作者:giulioli
--  发布时间:2019/4/13 16:18:00
--  
明白了,谢谢