存档

2010年12月 的存档

在SQL Server中监控Navision用户会话数

2010年12月13日 没有评论

首先, 基于SQL Server数据库的Navision客户端,登录后就会建立到SQL Server的会话,会话在Master.dbo.sysprocesses中有详细的记录。

通过下面的T-SQL Script首先建立Nav_UserList数据库,数据库中包含3个字段,分别是数据库名称,监控时间,用户数。
IF Not(Exists(select * from sysobjects where xtype=’U’ and name=’Nav_UserList’))
create table Nav_UserList
(
databseName varchar(50),
MonitorDate datetime,
UserCount integer
)
GO

然后通过下面的Insert into语句记录目前数据库的用户数。
insert into Nav_UserList (databseName,MonitorDate,UserCount)
(
select SD.name as databaseName,GETDATE() as MonitorDate,COUNT(*) as UserCount
from [master].dbo.[sysprocesses] SP Inner Join [master].dbo.[sysdatabases] SD
ON SP.dbid =SD.dbid
where SP.[program_name] <>”
and SP.dbid>4
group by SD.name)
GO

将上面的T-SQL Script保存为Job. 自动设定为每隔1段时间运行,如每隔1分钟运行,就可以得到一个汇总报表。

通过对Nav_UserList的分析,可以得到本月/每天最高用户数量的时点,最低用户数量的时点这样的分析数据。

分类: Installation 标签: , ,

如何得到系统中DataPerCompany属性=No的表

2010年12月3日 没有评论

通过下面的SQL语句,可以查询到 所有DataPerCompany属性等于No的表。
select * from sysobjects where xtype=’u’ AND name not Like ‘%$%’

在Navision中,也可以通过引用系统表 Table Information,做过滤Company Name=” 后取得的数据结果,就是DataPerCompany属性=No的表。

Table Information系统表也可用于查询现在系统中每个Table的总记录集。

DateFormula字段在SQL Script中的处理

2010年12月3日 没有评论

在Navision中的DateFormula字段,在SQL Server中存储时,并不存储D/W/M/Q/Y等数据,而是一个特殊字符。

通过下面的SQL Script可以辨别出DateFormula字段表示的具体类型。
假定DateFormula字段是 DateFormula field.

则进行读取的SQL Script是ASCII(SUBSTRING([DateFormula field],LEN([DateFormula field]),1))

再通过SQL Script的Case When判断。判断原则:
Ascii = Navision 日期公式类型
2 = D
3 = WD
4 = W
5 = M
6 = Q
7 = Y

得到这个表以后,就可以进行日期+/-处理了,下面的VBA代码可以模拟Navision的日期计算方式:

Function ReturnDateFormula(startD As String, AddD As String) As String
Dim startDate As Date
Dim Period As Integer
Dim Types As String
If startD <> “” Then startDate = CDate(startD)

If AddD <> “” Then
Period = CInt(Mid(AddD, 1, Len(AddD) – 1))
Types = Right(AddD, 1)
If Types = “Y” Then Types = “yyyy”
End If

If startD <> “” And AddD <> “” Then
ReturnDateFormula = CStr(DateAdd(Types, Period, startDate) – 1)
End If

End Function

这时的ReturnDateFormula就是返回的日期。

通过VBA编写NAV函数创建Dataport格式数据源

2010年12月2日 没有评论

通过VBA 写的NAV函数创建Dataport的导入数据源。

Function NAV(Optional R1 As Range, Optional R2 As Range, Optional r3 As Range, Optional R4 As Range, Optional R5 As Range, Optional R6 As Range, Optional R7 As Range, Optional R8 As Range, Optional R9 As Range, Optional R10 As Range, Optional R11 As Range, Optional R12 As Range, Optional R13 As Range, Optional R14 As Range, Optional R15 As Range, Optional R16 As Range, Optional R17 As Range, Optional R18 As Range, Optional R19 As Range, Optional R20 As Range) As String
If AddRange(R1) <> “” Then NAV = AddRange(R1)
If AddRange(R2) <> “” Then NAV = NAV + “,” + AddRange(R2)
If AddRange(r3) <> “” Then NAV = NAV + “,” + AddRange(r3)
If AddRange(R4) <> “” Then NAV = NAV + “,” + AddRange(R4)
If AddRange(R5) <> “” Then NAV = NAV + “,” + AddRange(R5)
If AddRange(R6) <> “” Then NAV = NAV + “,” + AddRange(R6)
If AddRange(R7) <> “” Then NAV = NAV + “,” + AddRange(R7)
If AddRange(R8) <> “” Then NAV = NAV + “,” + AddRange(R8)
If AddRange(R9) <> “” Then NAV = NAV + “,” + AddRange(R9)
If AddRange(R10) <> “” Then NAV = NAV + “,” + AddRange(R10)
If AddRange(R11) <> “” Then NAV = NAV + “,” + AddRange(R11)
If AddRange(R12) <> “” Then NAV = NAV + “,” + AddRange(R12)
If AddRange(R13) <> “” Then NAV = NAV + “,” + AddRange(R13)
If AddRange(R14) <> “” Then NAV = NAV + “,” + AddRange(R14)
If AddRange(R15) <> “” Then NAV = NAV + “,” + AddRange(R15)
If AddRange(R16) <> “” Then NAV = NAV + “,” + AddRange(R16)
If AddRange(R17) <> “” Then NAV = NAV + “,” + AddRange(R17)
If AddRange(R18) <> “” Then NAV = NAV + “,” + AddRange(R18)
If AddRange(R19) <> “” Then NAV = NAV + “,” + AddRange(R19)
If AddRange(R20) <> “” Then NAV = NAV + “,” + AddRange(R20)

End Function

Function AddRange(R1 As Range) As String

Dim tempStr As String
If R1 Is Nothing Then
AddRange = “”
Else
Dim rN As Range
For Each rN In R1
tempStr = CStr(rN.Text)
If tempStr = “0” Then tempStr = “”
tempStr = Replace(tempStr, Chr(13), ” “)
tempStr = Replace(tempStr, ChrB(13), ” “)
tempStr = Replace(tempStr, “”””, “‘”)
tempStr = Trim(tempStr)

If AddRange = “” Then
AddRange = “””” + tempStr + “”””
Else
AddRange = AddRange + “,” + “””” + tempStr + “”””
End If
Next
End If
End Function

函数用法是:
在Excel中,直接执行 =NAV(选择单元格) 就可以得到以””,””进行分隔的Dataport格式,然后直接复制到新建的txt中,就可以执行Dataport导入操作了。

分类: Office 标签: ,