设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

tag 标签: SQLServer

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

分享 判断 SQL Server 的版本
zhuyiwen 2013-5-30 16:49
平日有许多朋友会询问有关 SQL Server 使用上的一些问题,笔者的第一步骤便是先了解基本环境的况状,故以往都会请大家使用 SELECT @@VERSION 的指令,执行这个指令会回传一长串的字符串,再依这一长串的字符串来判断 SQL Server 的版本。 笔者建议也可以使用 SERVERPROPERTY 的方法,取出想要的信息,指令如下: SELECT SERVERPROPERTY ( 'ProductVersion' ) AS , SERVERPROPERTY ( 'ProductLevel' ) AS , SERVERPROPERTY ( 'Edition' ) AS Product Version Product Level Edition 8.00.2039 SP4 Desktop Engine 详见: http://msdn.microsoft.com/zh-cn/library/ms174396.aspx
个人分类: TSQL|1098 次阅读|0 个评论
分享 Winsock API 检测 SQL Server 实例
热度 3 zhuyiwen 2013-5-11 10:56
模块部分: Option Explicit Public Const SOCKET_ERROR = -1 Public Const AF_INET = 2 Public Const PF_INET = AF_INET Public Const MAXGETHOSTSTRUCT = 1024 Public Const SOCK_STREAM = 1 Public Const MSG_PEEK = 2 Private Type SockAddr sin_family As Integer sin_port As Integer sin_addr As Long sin_zero(7) As Byte End Type Private Type T_WSA wVersion As Integer wHighVersion As Integer szDescription(0 To 255) As Byte szSystemStatus(0 To 128) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Dim WSAData As T_WSA Type Inet_Address Byte4 As String * 1 Byte3 As String * 1 Byte2 As String * 1 Byte1 As String * 1 End Type Public IPStruct As Inet_Address Public Type T_Host h_name As Long h_aliases As Long h_addrtype As Integer h_length As Integer h_addr_list As Long End Type ' KERNEL32.DLL funtions Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb) ' WSOCK32.DLL functions Declare Function gethostbyaddr Lib "wsock32.dll" (addr As Long, ByVal addr_len As Long, ByVal addr_type As Long) As Long Declare Function inet_addr Lib "wsock32.dll" (ByVal addr As String) As Long Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long Declare Function GetHostName Lib "wsock32.dll" Alias "gethostname" (ByVal HostName As String, HostLen As Long) As Long Declare Function WSAStartup Lib "wsock32.dll" (ByVal a As Long, b As T_WSA) As Long Declare Function WSACleanUp Lib "wsock32.dll" Alias "WSACleanup" () As Integer Declare Function Socket Lib "wsock32.dll" Alias "socket" (ByVal afinet As Integer, ByVal socktype As Integer, ByVal protocol As Integer) As Long Declare Function ConnectWinsock Lib "wsock32.dll" Alias "connect" (ByVal sock As Long, sockstruct As SockAddr, ByVal structlen As Integer) As Integer Declare Function send Lib "wsock32.dll" (ByVal sock As Long, ByVal msg As String, ByVal msglen As Integer, ByVal flag As Integer) As Integer Declare Function recv Lib "wsock32.dll" (ByVal sock As Long, ByVal msg As String, ByVal msglen As Integer, ByVal flag As Integer) As Integer Declare Function htonl Lib "wsock32.dll" (ByVal a As Long) As Long Declare Function ntohl Lib "wsock32.dll" (ByVal a As Long) As Long Declare Function htons Lib "wsock32.dll" (ByVal a As Integer) As Integer Declare Function ntohs Lib "wsock32.dll" (ByVal a As Integer) As Integer Declare Function closesocket Lib "wsock32.dll" (ByVal sn As Long) As Integer Function HostByName(sHost As String) As String Dim s As String Dim p As Long Dim Host As T_Host Dim ListAddress As Long Dim ListAddr As Long Dim Address As Long s = String(64, 0) sHost = sHost + Right(s, 64 - Len(sHost)) p = GetHostByName(sHost) If p = SOCKET_ERROR Then Exit Function Else If p 0 Then CopyMemory Host.h_name, ByVal p, Len(Host) ListAddress = Host.h_addr_list CopyMemory ListAddr, ByVal ListAddress, 4 CopyMemory Address, ByVal ListAddr, 4 HostByName = InetAddrLongToString(Address) Else HostByName = "No DNS Entry" End If End If End Function Private Function InetAddrStringToLong(Address As String) As Long InetAddrStringToLong = inet_addr(Address) End Function Private Function InetAddrLongToString(Address As Long) As String CopyMemory IPStruct, Address, 4 InetAddrLongToString = CStr(Asc(IPStruct.Byte4)) + "." + _ CStr(Asc(IPStruct.Byte3)) + "." + CStr(Asc(IPStruct.Byte2)) + "." + _ CStr(Asc(IPStruct.Byte1)) End Function Function HostByAddress(ByVal sAddress As String) As String Dim lAddress As Long Dim p As Long Dim HostName As String Dim Host As T_Host lAddress = inet_addr(sAddress) p = gethostbyaddr(lAddress, 4, PF_INET) If p 0 Then CopyMemory Host, ByVal p, Len(Host) HostName = String(256, 0) CopyMemory ByVal HostName, ByVal Host.h_name, 256 If HostName = "" Then HostByAddress = "Unable to Resolve Address" HostByAddress = Left(HostName, InStr(HostName, Chr(0)) - 1) Else HostByAddress = "No DNS Entry" End If End Function Private Function ResolveHost(sHost As String) As Long Dim lAddress As Long lAddress = InetAddrStringToLong(sHost) If lAddress = SOCKET_ERROR Then ResolveHost = inet_addr(HostByName(sHost)) Else ResolveHost = lAddress End If End Function Public Function WinsockConnect(ByVal m_RemoteHost As String, m_RemotePort As Long, iSocket As Long) As Boolean '这个iSocket参数,现在是没用的,以后扩展的话,创建Socket一般是放在函数之外,这统治有用了。 Dim sock As SockAddr iSocket = Socket(AF_INET, SOCK_STREAM, 6) '6是TCP协议,原来的0,我也不知是什么,你自己查查资料,好像在这也能用,不过还是明确点好。 ' If iSocket -1 Then If iSocket = -1 Then 'Socket的handle可能是负值,不能用1来判断,返回INVALID_SOCKET = -1才是失败 WinsockConnect = False Exit Function End If sock.sin_family = AF_INET sock.sin_addr = ResolveHost(m_RemoteHost) sock.sin_port = htons(m_RemotePort) If ConnectWinsock(iSocket, sock, Len(sock)) = SOCKET_ERROR Then '返回值不是SOCKET_ERROR才是成功,不能用bool判断,因为0也是成功 WinsockConnect = False Exit Function End If WinsockConnect = True End Function Public Sub WinsockInit() WSAStartup H101, WSAData End Sub 调用: Private Sub Command1_Click() Dim iID As Long WinsockInit If WinsockConnect("192.168.33.137", 1433, iID) = True Then MsgBox "连接成功" Else MsgBox "连接失败" End If WSACleanUp End Sub
个人分类: VBA|2094 次阅读|3 个评论
分享 为 SQL Server 添加链接服务器
zhuyiwen 2012-5-16 20:59
比如,将 192.168.1.87的SQL Server 默认实例添加到当前的 SQL Server 实例中,设访问192.168.1.87的登录ID 为 sa, 密码为 use_link_svr,执行如下步骤: use master GO exec master.dbo.sp_addlinkedserver @server = N' 192.168.1.87 ', @srvproduct = N' SQL Server ' GO exec master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N' 192.168.1.87 ', @locallogin = NULL, @useself = N' False ', @rmtuser = N' sa ', @rmtpassword = N' use_link_svr ' GO 要使用链接服务器数据,可以类似如下方式: SELECT * FROM . TestDB . dbo . TestTable 192.168.1.87 为服务器名 TestDB 为该服务器中的数据库名 TestTable 为要访问的数据表
个人分类: TSQL|1264 次阅读|0 个评论
分享 通过 SQL Server 视图访问另一个数据库服务器表的方法
zhuyiwen 2012-5-16 18:41
有的时候,我们要访问其它 SQL Server的数据库,我们可以通过一个视图使用 OPENDATASOURCE ( SQL Server 2000 以上版本支持 ) 来完成。 例如: CREATE VIEW . AS SELECT * FROM OPENDATASOURCE( 'SQLOLEDB', 'PWD= loginPassword ;UID= otherServerUserID ;Initial Catalog= databaseName ;SERVER= dataServer ' ).databaseName.dbo. GO 通过UID、PWD的身份访问另一个数据库服务器。 其中 : PWD : 是指另一个数据库服务器的登录密码 UID : 是指另一个数据库服务器的登录ID(用户名) Initial Catalog : 指明数据库 SERVER : 指明服务器 我们可以如下方法读取数据: SELECT * FROM .
个人分类: TSQL|957 次阅读|0 个评论
分享 ADP SQL Server 数据库开发随想
热度 2 zhuyiwen 2012-1-11 23:05
Access 2000 开始就有了 ADP 项目,它是一个非常不错的 SQL Server 7.0 的前端开发工具,对于初涉 SQL Server 数据库的开发人员来说非常容易入手,不需要使用企业管理器和查询分析器就能直接创建数据库及其数据库对象,不需要使用使用复杂的 SQL 命令就能象使用 Access 数据库那样使用 SQL Server 数据库。 但是,这样也带来了一些问题,比如,初学者很难理解客户/服务器的运作方式,如何分配客户和服务器的工作任务,服务器端应如何开发、客户端应如何开发,它与 Access mdb 数据库到底有何不同,等等。另外,ADP 是通过一个 SQL Server ADO 连接来进行开发和使用数据库的,那么这样一来也很难象 VB、Dephi 那样进行三层式开发,而只能进行 C/S 方式开发,使得其应用、部署没有多层式灵活。尽管是样,我个人认为 ADP 仍然是中小型企业级或部门级 SQL Server 数据库前端应用的最佳工具。 目前大多数数据库开发都是采用多层式方式,典型的是三层式,即表示层、业务逻辑层和数据存储。这样的好处在于,修改某一层时而不影响其它层,这样一来,无疑变得很灵活。而 Access ADP 是 C/S 方式,它只有两层,即由 Access ADP 实现的表示层和SQL Server 实现的数据存储层,这两层之间是通过一个 ADO 连接实现的。大家都知道 SQL Server 有自己的语言 T-SQL 来处理数据,有一定的编程能力,这样一来,数据库应用的业务逻辑的实现就只能由 Access ADP 实现的表示层和 SQL Server 实现的数据存储层来共同分担,很有可能出现任何一个地方的更改引起两层同时产生变化,这样就会造成部署的麻烦,甚至由于前端 Access ADP 的版本不同而造成冲突或系统崩溃。 因此,业务逻辑的开发直接影响数据库应用的成败。处理好业务逻辑的开发在 Access ADP 开发中就变得很重要。从实际应用可以看到,如果在 Access ADP 中实现业务逻辑,无疑会带来两个问题,一是增加网络流量,同时增加客户端和服务器端的开销;二是当变更业务逻辑时,必须同时更新所有的应用的客户端。如果在 SQL Server 中用 T-SQL 来实现业务逻辑,由于 T-SQL 语言能力有限,会带来很多开发的困难。虽然,在 SQL Server 2000 以前版本中,SQL Server 允许使用 C 语言编写扩展的存储过程来弥补 T-SQL 的不足,但这并不是我们这些初学者所需要的。 SQL Server 2005 是一个 SQL Server 划时代的版本,它依托 .NET Framewok,允许开发人员使用 .NET 下的高级语言如 VB.NET、C# 来开发 SQL Server 数据库的存储过程、函数,这样就降低开发人员开发难度,因此,我们完全可以把业务逻辑封装数据库中。 总结,建议使用 Access 2007 以上版本的 ADP 来开发 SQL Server 2005 以上版本的数据库,并将业务逻辑封装到数据库中,这样的好处,一是表示层彻底独立出来,便于部署;二是团队开发时,更方便人员分工。
个人分类: Access|2221 次阅读|3 个评论

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-4-2 18:27 , Processed in 0.079020 second(s), 17 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部