??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲xxx大片,国模大尺度视频一区二区,国产一区二区久久久http://www.aygfsteel.com/dunkbird/category/30986.htmlzh-cnFri, 21 Aug 2009 13:10:01 GMTFri, 21 Aug 2009 13:10:01 GMT60Winsock控ghttp://www.aygfsteel.com/dunkbird/articles/292089.html大鸟大鸟Fri, 21 Aug 2009 05:57:00 GMThttp://www.aygfsteel.com/dunkbird/articles/292089.htmlhttp://www.aygfsteel.com/dunkbird/comments/292089.htmlhttp://www.aygfsteel.com/dunkbird/articles/292089.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/292089.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/292089.htmlWinsock控g
2008-11-03 15:24
Winsock控g对用h不可视的Q可以很Ҏ地访问TCP和UDP|络服务。其可以被Microsoft Access, Visual Basic ,Visual C++或Visual FoxPro开发h员用。要~写客户和服务器应用E序Q不需要了解TCP或调用底层Winsock API的具体细节。通过讄Winsock控g的属性和调用该控件的ҎQ可以很Ҏ地连接到q程计算机ƈq行双向的数据交换?br /> 属?br /> BytesReceived属性,LocalHostName属性,LocalIP属性,LocalPort属性,RemoteHost属性(ActiveX控gQ,SocketHandle属性,State属性(Winsock控gQ,Protocol属性(Winsock控gQ,Name属性,Parent属性,RemoteHost属性(ActiveX控gQ,RemotePort属性(ActiveX控gQ,Index属性(ActiveX控gQ,Tag属性(ActiveX控gQ,Object属性(ActiveX控gQ?br /> Ҏ
AcceptҎQBindҎQCloseҎQWinsock控gQ,ListenҎQPeerDataҎQSendDataҎQGetDataҎQWinSock控gQ,GetDataҎQActiveX控gQ?br /> 事g
Close事gQConnectionRequest事gQDataArrival事gQSendComplete事gQSendProgress事gQError事gQConnect事gQWinsock控gQ,Connect事g?br /> Winsock 控g对用h说是不可见的Q它提供了访?TCP ?UDP |络服务的方侉K径。Microsoft Access、Visual Basic、Visual C++ ?Visual FoxPro 的开发h员都可用它。ؓ~写客户或服务器应用E序Q不必了?TCP 的细节或调用低?Winsock APIs。通过讄控g的属性ƈ调用其方法就可轻易连接到一台远E机器上去,q且q可双向交换数据?br /> TCP 基础
数据传输协议允许创徏和维护与q程计算机的q接。连接两台计机可彼此q行数据传输?br /> 如果创徏客户应用E序Q就必须知道服务器计机名或?IP 地址QRemoteHost 属性)Q还要知道进?#8220;侦听”的端口(RemotePort 属性)Q然后调?Connect Ҏ?br /> 如果创徏服务器应用程序,应讄一个收听端口(LocalPort 属性)q调?Listen Ҏ。当客户计算机需要连接时׃发生 ConnectionRequest 事g。ؓ了完成连接,可调?ConnectionRequest 事g内的 Accept Ҏ?br /> 建立q接后,M一方计机都可以收发数据。ؓ了发送数据,可调?SendData Ҏ。当接收数据时会发生 DataArrival 事g。调?DataArrival 事g内的 GetData Ҏ可获取数据?br /> UDP 基础
用户数据文报协议 (UDP) 是一个无q接协议。跟 TCP 的操作不同,计算机ƈ不徏立连接。另?UDP 应用E序可以是客hQ也可以是服务器?br /> Z传输数据Q首先要讄客户计算机的 LocalPort 属性。然后,服务器计机只需?RemoteHost 讄为客戯机?Internet 地址Qƈ?RemotePort 属性设|ؓ跟客戯机?LocalPort 属性相同的端口Qƈ调用 SendData Ҏ来着手发送信息。于是,客户计算Z?DataArrival 事g内的 GetData Ҏ来获取已发送的信息?/font>


大鸟 2009-08-21 13:57 发表评论
]]>
VB Socket~程(WinSock控g~写|上聊天E序)http://www.aygfsteel.com/dunkbird/articles/292088.html大鸟大鸟Fri, 21 Aug 2009 05:54:00 GMThttp://www.aygfsteel.com/dunkbird/articles/292088.htmlhttp://www.aygfsteel.com/dunkbird/comments/292088.htmlhttp://www.aygfsteel.com/dunkbird/articles/292088.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/292088.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/292088.html用VB5中WinSock控g~写|上聊天E序



Sockets是在Unixpȝ上提出来的,一开始主要是用于本地通讯Q但很快应用到C/S体系上。MicroSoft公司在此基础上创Z WinSock控gQ专门用于Windows接口Q与Sockets完全兼容。Winsock控g对用h说是不可见的Q它提供了访?TCP ?UDP |络服务的方侉K径。Microsoft Access、Visual Basic、Visual C++ ?Visual FoxPro 的开发h员都可用它。ؓ~写客户或服务器应用E序Q不必了?TCP 的细节或调用低?Winsock APIs。通过讄控g的属性ƈ调用其方法就可轻易连接到一台远E机器上去,q且q可双向交换数据。下面就利用VB5中的WinSock控g~写一个网?聊天E序?


一Q网l通信协议的基和选择


1Q? TCPQ数据传输协议)基础

数据传输协议允许创徏和维护与q程计算机的q接。连接两台计机可彼此q行数据传输?
如果创徏客户应用E序Q就必须知道服务器计机名或?IP 地址QRemoteHost 属性)Q还要知道进?#8220;侦听”的端口(RemotePort 属性)Q然后调?Connect Ҏ?
如果创徏服务器应用程序,应讄一个收听端口(LocalPort 属性)q调?Listen Ҏ。当客户计算机需要连接时׃发生 ConnectionRequest 事g。ؓ了完成连接,可调?ConnectionRequest 事g内的 Accept Ҏ?
建立q接后,M一方计机都可以收发数据。ؓ了发送数据,可调?SendData Ҏ。当接收数据时会发生 DataArrival 事g。调?DataArrival 事g内的 GetData Ҏ可获取数据?

1Q? UDPQ用h据文报协议)基础

用户数据文报协议 (UDP) 是一个无q接协议。跟 TCP 的操作不同,计算机ƈ不徏立连接。另?UDP 应用E序可以是客hQ也可以是服务器?
Z传输数据Q首先要讄客户计算机的 LocalPort 属性。然后,服务器计机只需?RemoteHost 讄为客戯机?Internet 地址Qƈ?RemotePort 属性设|ؓ跟客戯机?LocalPort 属性相同的端口Qƈ调用 SendData Ҏ来着手发送信息。于是,客户计算Z?DataArrival 事g内的 GetData Ҏ来获取已发送的信息?

1Q? 选择通讯协议

在?WinSock 控gӞ首先需要考虑使用什么协议。可以用的协议包括 TCP ?UDP。两U协议之间的重要区别在于它们的连接状态:
TCP 协议是有q接的协议,可以它同电话系l相比。在开始数据传输之前,用户必须先徏立连接?
UDP 协议是一U无q接协议Q两台计机之间的传输类g传递邮Ӟ消息从一台计机发送到另一台计机Q但是两者之间没有明的q接。另外,单次传输的最大数据量取决于具体的|络?

到底选择哪一U协议通常是由需要创建的应用E序军_的。下面的几个问题有助于选择适宜的协议:

1. 在收发数据的时候,应用E序是否需要得到客L或者服务器的确认信息?如果需要,使用 TCP 协议Q在收发数据之前先徏立明的q接?

2. 数据量是否特别大Q例如图象与声音文gQ?在连接徏立之后,TCP 协议维护连接ƈ保数据的完整性。不q,q种q接需要更多的计算资源Q因而是比较“昂贵”的?

3. 数据发送是间歇的,q是在一个会话内Q例如,如果应用E序在某个Q务完成的时候需要通知某个计算机,UDP 协议是更适宜的。UDP 协议适合发送少量的数据?

通讯协议的选择是通过讄WinSock的Protocol属性来实现的。下面选择TCP通讯协议~写|上聊天E序Q在此之前必ȝ道一个极光要的参数---服务器端的IP地址或计机名?

二)定计算机的名字

1. 在计机的桌面上Q右键单?#8220;|上d”?

2. 选择“属?#8221;?

3. 单击“标识”选项卡?

4. ?#8220;计算机名U?#8221;框中可以扑ֈ计算机的名称?

定计算机的 IP地址

1. 单击“d?#8221;上的“启动”?

2. 选择“q行”?

3. 若服务器端操作系lؓwin95则在“打开”中填?#8220;winipcfg”Q若服务器端操作pȝ为winnt则在“打开”中填?#8220;ipconfig”?

4. 按下“定”键?

上面扑ֈ的计机名称或IP地址可以作ؓWinSock的RemoteHost 属性的倹{?

三) winsock控g的State属性?




state 属性的讄值是Q???
??q?

sckclosed 0 ~省的。关?
sckopen 1 打开
scklistening 2 侦听
sckconnectionpending 3 q接挂v
sckresolvinghost 4 识别L
sckhostresolved 5 已识别主?
sckconnecting 6 正在q接
sckconnected 7 已连?
sckclosing 8 同人员正在关闭q接
sckerror 9 错误


下面主要要用到sckClosed.sckConnected两个State属性的倹{?

四)|上聊天E序的编?

4Q? E序中服务器端所L作用?

从图CZ可以看到服务器端的两个winsock控g之间q不存在直接的通讯Q同时sckServer1和sckClient2?sckServer2和sckClient1之间是不能直接通讯的。这也即是说若sckClient1向sckClient2发出信息Q信息首先被 sckServer1接受QsckServer1再将信息传给E序的信息处理部分,信息处理部分再将处理好的信息传给sckServer2Q再?sckServer2传给sckClient2。反之亦然。那么服务器端的信息处理部分又进行什么工作呢Q?

1. 寚w讯的通道C一些限制?

2. 对用后已关闭的通道Q必能够重C用以节省资源?

3. 必须Ҏ传递的数据包信息作甑别Q从而作Z同的处理?

通过解开数据的包头就可区分不同的信息?

|上聊天有两U方式:W一U,以广播方式;W二U,以点对点的方式。广播方式即所有客户都能收到某一客户发出的信息。点对点的方式即惌“悄悄?”的一对客户专门开辟了一间谈话的“屋”Q别的客户不?#8220;?#8221;C们的谈话。在下面的程序中看到如何利用数据的不同包头来区分用h想以q播方式q是 以点对点的方式进行谈话的Q点对点方式数据的包头ؓ“PT”,q播方式则无包头Q?

4Q? 客户端的E序

1. 在客L创徏一个新的工E将其命名ؓ“ClientPrj”

2. 缺省窗体命名ؓ frmClient?

3. 窗体的标题改ؓ“Client”?

4. 在窗体中d一?WinSock 控gQƈ其命名?tcpClient?

5. ?frmClient 中添加一个ListBox 控g。将其命名ؓlstReceive?

6. ?frmClient 中添加一?TextBox 控g。将其命名ؓ txtSend?

7. 在窗体上放两?CommandButton 控gQƈ其命名?cmdConnect和cmdSent?

8. cmdConnect控g的标题改?Connect, cmdSent控g的标题改?Sent?

9. 在窗体中d如下的代码?

Private Sub cmdConnect_Click()

On Error GoTo ErrorPro

sckClient.Connect

Exit Sub

ErrorPro:

MsgBox "服务器未开或网l出错!"

End

End Sub

Private Sub cmdSent_Click()

sckClient.SendData txtSent.Text

End Sub

Private Sub Form_Load()

' RemoteComputerName为服务器端的计算机名或IP地址?

sckClient.RemoteHost = "RemoteComputerName"

sckClient.RemotePort = 1000

End Sub



Private Sub sckClient_Close()

MsgBox "服务器通道已关闭!"

End

End Sub



Private Sub sckClient_Connect()

MsgBox "q接成功Q?

cmdConnect.Enabled = False

End Sub



Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)

Dim s As String

sckClient.GetData s

lstReceive.AddItem s

End Sub



Private Sub sckClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

sckClient.Close

cmdConnect.Enabled = True

End Sub

4Q? 服务器端的程?

1. 在服务器端创Z个新的工E将其命名ؓ“ServerPrj”?

2. 缺省窗体命名ؓ“frmServer”?

3. 在窗体中d一个ListBox控gQ将其命名ؓ“lstReceive”?

4. 在窗体中d三个WinSock控gQ将其分别命名ؓ“sckListen”QsckBusy?#8220;sckServer”q将“sckServer”?#8220;Index”属性设|ؓ0?

5. 在窗体中d如下代码.?

'最大通道?

Private MaxChan As Integer



Private Sub Form_Load()

Dim i As Integer

MaxChan = 10

For i = 1 To MaxChan - 1

Load sckServer(i)

Next i

sckListen.LocalPort = 1000

sckListen.Listen

End Sub



Private Sub sckBusy_Close()

sckBusy.Close

End Sub



Private Sub sckBusy_DataArrival(ByVal bytesTotal As Long)

sckBusy.SendData "服务器忙Q请E后再连接!"

DoEvents

End Sub



Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)

Dim i As Integer

'军_由哪一Winsock接受h

For i = 0 To MaxChan - 1

If sckServer(i).State = 0 Then

Exit For

End If

Next i

If sckServer(i).State = 0 Then

sckServer(i).Accept requestID

Exit Sub

End If

'如果所有Winsock都用完则׃门的“?#8221;Winsock接受hQ以免用戯求得不到响应

sckBusy.Close

sckBusy.Accept requestID

End Sub



Private Sub sckListen_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, _ ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

sckListen.Close

sckListen.LocalPort = 1000

sckListen.Listen

End Sub



Private Sub sckServer_Close(Index As Integer)

sckServer(Index).Close

End Sub



Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim s As String

Dim i As Integer

sckServer(Index).GetData s

If UCase(Left(Trim(s), 2)) = "PT" Then '判断是否为悄悄话Q点对点方式

If IsNumeric(Mid(Trim(s), 3, 1)) Then

i = Mid(Trim(s), 3, 1)

sckServer(i).SendData "Channel " & Index & " " & Right(Trim(s), Len(Trim(s)) - 3)

DoEvents

End If

Else 'q播方式

For i = 0 To MaxChan - 1

'利用winsock的State属性给所有连接在服务器上的客户发消息

If sckServer(i).State = 7 Then

sckServer(i).SendData "Channel " & Index & " " & Trim(s)

DoEvents

End If

Next i

End If

lstReceive.AddItem "Channel " & Index & " " & Trim(s)

End Sub



Private Sub sckServer_Error(Index As Integer, ByVal Number As Integer, Description As String, _

ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As _

Long, CancelDisplay As Boolean)

sckServer(Index).Close

End Sub

从程序中可以看到Q第一Q程序中限制了通道敎ͼ10路)。第二,通过判断WinSock控g的State属性是否ؓ0Q关闭状态)Q来重新使用?关闭的WinSock控g。第三,通过lWinSock控g传递的信息加上包头Q来对信息进行不同的处理Q程序中若信息前加上?#8220;PT"QPrivate TalkQ?"通道?#8221;的包_由此q道客h要同拥有?#8220;通道?#8221;的另一客户q行“悄悄?#8221;Q否则就以广播方式将信息发给所有客P?


五) l束?

WinSock控g不仅仅是用来~制|上聊天E序Q而且可以用来~制各种|络游戏或网l通信E序。实际上WinSock控g是编制各UC/SE序 的利器。在实际使用中通常是将WinSock控g装在Activex DLLQ进E内Q、Activex EXEQ进E外Q部件的cMQ类中引用)来用的。通过区分所传信息前的不同的包头Q用RaiseEvent命o引发不同 的事Ӟ再对事g分别q行处理。这样不仅增加了E序的可调试性和安全性,而且更符合事仉动编E方法的特点?/font>

大鸟 2009-08-21 13:54 发表评论
]]>
VB Socket~程(Winsock控g创徏TCP/IP客户?服务器程?http://www.aygfsteel.com/dunkbird/articles/292087.html大鸟大鸟Fri, 21 Aug 2009 05:53:00 GMThttp://www.aygfsteel.com/dunkbird/articles/292087.htmlhttp://www.aygfsteel.com/dunkbird/comments/292087.htmlhttp://www.aygfsteel.com/dunkbird/articles/292087.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/292087.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/292087.htmlWinsock控g建立在TCP、UDP协议的基上,完成与远E计机的通信。即使对TCP/IP不太熟悉的用P使用该控件也可以在十几分钟内创徏一 个简单的客户?服务器程序。下面我们对Winsock控g的事件、方法、属性按其在E序中出现的序分别作详l的介绍Q以便更好地理解E序源代码?
下面是Winsock控g的相兛_性,Ҏ和事件?略去一些暂用不到的)
*属?
-------------------------------------------------------------------------
LocalHostName | 本地机器?
LocalIP | 本地机器IP地址
LocalPort | 本地机器通信E序的端?0 <端口 <65536)
RemoteHost | q程机器?
RemotePort | q程机器的通信E序端口
state | q接的当前状?文后有详l说?
Protocal | 使用TCP或UDP协议(q里我们?#8216;0-sckTCPProtocal’)
--------------------------------------------------------------------------

--------------------------------------------------------------------------
Listen
ListenҎ用于服务器程序,{待客户讉K?
格式QWinsock对象.listen
Connect
ConnectҎ用于向远E主机发接请?
格式QWinsock对象.connect [q程LIP,q程端口]
Accept
AcceptҎ用于接受一个连接请?
格式QWinsock对象.accept Request ID
Senddata
此方法用于发送数?
格式QWinsock对象.senddata 数据
Getdata
用来取得接收到的数据
格式QWinsock对象.getdata 变量 [,数据cd [,最大长度]]
Close
关闭当前q接
格式QWinsock对象.close
*事g
----------------------------------------------------------------------------
Close | q程机器关闭q接时触?
Connect | q接建立好,可以q行通信时触?客户?
ConnectRequest | 有请求连接到达时产生(服务器端)
DataArrival | 有数据到达时触发
Error | 发生错误时发?
SendProgress | 数据传送进?
-----------------------------------------------------------------------------

服务器程序的实现q程是:
Q?Q服务器E序必须讄好LocalPort属性,作ؓ侦听端口Q该gؓ一个整敎ͼ只要是一个其它TCP/IP应用E序没有使用q的值即可)?
Q?Q用ListenҎq入侦听状态,{待客户机程序的q接h?
Q?Q客hE序发出q接hQ服务器程序生ConnectionRequest事gQ该事g得到一个参数requestID?
Q?Q服务器E序用AcceptҎ接受客户机程序的requestIDh。这P服务器程序就可以用SendDataҎ发送数据了。AcceptҎ必须用上一步得到的requestID作ؓ其参数?
Q?Q当服务器程序接收到数据Ӟ产生DataArrival事gQ参数BytesTotal包含接收到的数据字节数。在该事件中Q可以用GetDataҎ接收数据?
Q?Q如果接受到Close事gQ则用CloseҎ关闭TCP/IPq接?
客户机程序的实现q程是:
Q?Q?客户E序讄Remotehost属性,以便指定q行服务器程序的L 名,该字W串可在“控制面板||络|标识|计算机名”中查到?
Q?Q?讄RemotePort属?以便指定服务器程序的侦听端口?
Q?Q用ConnectҎQ向服务器提接请求?
Q?Q服务器接受客户机程序的hQ客hE序产生Connect事gQ就可以用SendDataҎ发送数据了?
Q?Q当客户机程序接收到数据Ӟ产生DataArrival事gQ参数BytesTotal包含接收到的数据字节数。在该事件中Q可以用GetDataҎ接收数据?
Q?Q如果接受到Close事gQ则用CloseҎ关闭q接?
Winsock控gq有两个重要的属性,即Protocol和State。Protocol讑֮使用的协议是TCPq是UDPQ取?sckTCPProtocol表示TCP, 取值sckUDPProtocol则表CUDP。因为Winsock控g的缺省设|是sckTCPProtocolQ所以程序中q没有?Protocol属性。State属性反映的是当前TCP/IP的连接状态,取值如?所C?
? Winsock控g的State属性及其描q?
常数 ?描述
SckClosed 0 ~省|关闭
SckOpen 1 打开
SckListening 2 侦听
SckConnectionPending 3 q接挂v
SckResolvingHost 4 识别L
SckHostResolved 5 已识别主?
SckConnecting 6 正在q接
SckConnected 7 已连?
SckClosing 8 同人员正在关闭q接
SckError 9 错误
先在一台计机上运行服务器E序Q此时窗口上只有一?#8220;退?#8221;按钮?再在另一台计机上运行客hE序Q在“q接”按钮双的文本框中输入服务器的主机名后单?#8220;q接”按钮。如果连接成功,则服务器和客hE序H口都会?C个文本框。这Ӟ两端都可以在上面的文本框中输入文字,q些文字会立卛_下面的文本框中出现?
服务器程序用的控g如下Q?
Q?QCommand1Q退出按钮;
Q?QtextsendQ发送数据文本框Q?
Q?QWinsockserverQ?服务器WinsockQ?
Q?Qtextget Q接收数据文本框?
服务器程序的界面如图所C?
服务器程序的源代码如下:
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockserver.LocalPort = 1001
Winsockserver.Listen
End Sub

Private Sub textsend_Change()
Winsockserver.SendData textsend.Text
End Sub
Private Sub Winsockserver_Close()
Winsockserver.Close
End
End Sub

Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
textsend.Visible = True
textget.Visible = True
If Winsockserver.State <> sckClosed Then Winsockserver.Close
Winsockserver.Accept requestID
End Sub

Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String

Winsockserver.GetData tmpstr
textget.Text = tmpstr
End Sub

客户机程序用的控g如下Q?
Q?QCommand1Q退出按钮;
Q?QCommand2Q连接按钮;
Q?QWinsockclientQ客户WinsockQ?
Q?QText1Q主机名文本框;
Q?QTextsendQ发送数据文本框Q?
Q?QTextgetQ接收数据文本框Q?  
客户机程序的源代码如下:
Private Sub Command1_Click()
End
End Sub
Private Sub Command2_Click()
Winsockclient.Connect
End Sub
Private Sub Form_Load()
textsend.Visible = False
textget.Visible = False
Winsockclient.RemotePort = 1001
Winsockclient.RemoteHost = "sccdsz"
End Sub
Private Sub Text1_Change()
Winsockclient.RemoteHost = Text1.Text
End Sub
Private Sub textsend_Change()
Winsockclient.SendData textsend.Text
End Sub
Private Sub Winsockclient_Close()
Winsockclient.Close
End
End Sub
Private Sub winsockclient_Connect()
textsend.Visible = True
textget.Visible = True
Command2.Visible = False
End Sub
Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)
Dim tmpstr As String
Winsockclient.GetData tmpstr
textget.Text = tmpstr
End Sub

我试q了Q可以用



大鸟 2009-08-21 13:53 发表评论
]]>
excel 自定义菜?/title><link>http://www.aygfsteel.com/dunkbird/articles/291016.html</link><dc:creator>大鸟</dc:creator><author>大鸟</author><pubDate>Thu, 13 Aug 2009 07:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/dunkbird/articles/291016.html</guid><wfw:comment>http://www.aygfsteel.com/dunkbird/comments/291016.html</wfw:comment><comments>http://www.aygfsteel.com/dunkbird/articles/291016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dunkbird/comments/commentRss/291016.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dunkbird/services/trackbacks/291016.html</trackback:ping><description><![CDATA[<p> </p> <p>Private Sub Workbook_Open()</p> <p>    Dim cbr As CommandBar<br />     Dim ctrMenu As CommandBarControl<br />     Dim ctr As CommandBarControl<br />     <br />     Set cbr = Application.CommandBars("Worksheet Menu Bar")<br />     <br />     For Each ctr In cbr.Controls<br />     <br />         If ctr.Caption = "custom" Then<br />             Exit Sub<br />         End If<br />     <br />     Next<br />     <br />     <br />     Set ctlMenu = cbr.Controls.Add(Type:=msoControlPopup)<br />     <br />     With ctlMenu<br />            .Caption = "custom"<br />             With .Controls.Add(Type:=msoControlButton)<br />                 .Caption = "aa"<br />                 .OnAction = "action1"<br />             End With<br />             With .Controls.Add(Type:=msoControlButton)<br />                 .Caption = "bb"<br />                <br />                 .OnAction = "action2"<br />             End With<br />     End With<br />     <br /> End Sub<br /> </p> <img src ="http://www.aygfsteel.com/dunkbird/aggbug/291016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dunkbird/" target="_blank">大鸟</a> 2009-08-13 15:25 <a href="http://www.aygfsteel.com/dunkbird/articles/291016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VB COM基础讲之ActiveX EXEshttp://www.aygfsteel.com/dunkbird/articles/245232.html大鸟大鸟Tue, 09 Dec 2008 05:23:00 GMThttp://www.aygfsteel.com/dunkbird/articles/245232.htmlhttp://www.aygfsteel.com/dunkbird/comments/245232.htmlhttp://www.aygfsteel.com/dunkbird/articles/245232.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/245232.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/245232.html
   所以,惛_q里实际~写一个activex exe工程。事实上Q它和activex dll没有太大的区别,甚至没有区别。在启动visual basic后选择\"activex exe\"可创徏Q然后像以前一h造自qcR?

   但这里不惛_作更详细的讨论,因ؓactivex exe和activex dll除了在运行时有一些微区别外Q其他都相同?

   它们的区别首先表现在它们的\"q程I间\"的不同。所谓\"q程I间\"是用于运行、处理和存取的一块计机内存。Q何windowsE序Q如microsoft word{,都有自己的\"q程I间\"Q它很像E序的桌面那栗?

   当用activex dlls工程q行Ӟdll是在使用它的E序的进E空间中q行的,而activex exe是在q程I间外面工作的。但是,activex exeq有自己的\"桌面\"。这I竟如何理解呢?

   假如Qactivex dll变得不稳定或意外受损Ӟ使用它的应用E序常常出现蓝屏的死机现象,而在exes中却不会发生Q因为它有自q\"q程I间\"Q即使被破坏Q也仅仅是桌面受损,当然用户E序应该很好地去修复它?

   其次Q它们的区别q表现在装蝲的速度上。由于dll是直接装载到已存在的q程I间Q所以它的速度非常快。而exes׃q要分配自己的进E空_所以速度上相Ҏ一炏V?

   上述两点区别可以说是它们真正的区别?

   MQ如果用不同的windows工具来实现相应的activexlgQ那么相应的工程cd应该有所不同。例如,若用mtsQ则应创建dll工程Q若使用dcomQ则应创建exe工程。当Ӟ即现在不理解这此羃写字母的含义Q我们也不必担心。因为它们是针对高用户的,q用于comq程的工L件。以后有Z再来l出相应的教E?

   q里再来分析W二点的区别?

   如果现在需要创L一个程序,它不断地一个数据库是否有什么改变。那么我们想到的是在E序中用一些\"timer\"(计时?Q每?0分钟Ȁ发一ơƈ该数据库。但问题来了Q在该进E空间的其他所有代码都要被停止q行直至数据库检完毕?

   而activex exes伟大之处Q就在于它有自己的进E空间。所以在其中d的计时器也只会工作在自己的进E空间中而不会媄响其他用它的程序。也是_对于前面的工E来_若用activex exe来检数据库Q则不会停止其他使用它的E序的运行;即需要从其他E序中返回一个消息,也可以通过其他事g而获得?

   需要说明的是,q行代码q离正规E序而通过事g与用的应用E序会话的方法称为\"异步处理\"。通常当需要对e-mail或数据库作定期检查时Q或当运行一个长的报表以及计大的统计数据时Q我们就需使用q种异步处理方式?

   不怕你惊讶的话Q我们可以将前面的内Ҏȝ成这L一句话Q?

   \"activex dlls是在q程内运行,而activex exes是在q程外运行\"?

   好了Q下一节将创徏q测试一个自qactivex exe工程Qƈ使用大家q不太熟悉的\"异步处理\"技巧。然后,提出一个称为\"实例\"的有意义的概念,最后指明怎样获得更多的com知识使自pC个新的水q?

大鸟 2008-12-09 13:23 发表评论
]]>
VBd文本文ghttp://www.aygfsteel.com/dunkbird/articles/195794.html大鸟大鸟Fri, 25 Apr 2008 01:02:00 GMThttp://www.aygfsteel.com/dunkbird/articles/195794.htmlhttp://www.aygfsteel.com/dunkbird/comments/195794.htmlhttp://www.aygfsteel.com/dunkbird/articles/195794.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/195794.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/195794.html阅读全文

大鸟 2008-04-25 09:02 发表评论
]]>
VBA DB 操作ȝ(代码调试OKQ?/title><link>http://www.aygfsteel.com/dunkbird/articles/195359.html</link><dc:creator>大鸟</dc:creator><author>大鸟</author><pubDate>Thu, 24 Apr 2008 00:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/dunkbird/articles/195359.html</guid><wfw:comment>http://www.aygfsteel.com/dunkbird/comments/195359.html</wfw:comment><comments>http://www.aygfsteel.com/dunkbird/articles/195359.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dunkbird/comments/commentRss/195359.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dunkbird/services/trackbacks/195359.html</trackback:ping><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.aygfsteel.com/dunkbird/articles/195359.html'>阅读全文</a><img src ="http://www.aygfsteel.com/dunkbird/aggbug/195359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dunkbird/" target="_blank">大鸟</a> 2008-04-24 08:44 <a href="http://www.aygfsteel.com/dunkbird/articles/195359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLServer和Access、Excel数据传输单ȝhttp://www.aygfsteel.com/dunkbird/articles/195179.html大鸟大鸟Wed, 23 Apr 2008 09:31:00 GMThttp://www.aygfsteel.com/dunkbird/articles/195179.htmlhttp://www.aygfsteel.com/dunkbird/comments/195179.htmlhttp://www.aygfsteel.com/dunkbird/articles/195179.html#Feedback0http://www.aygfsteel.com/dunkbird/comments/commentRss/195179.htmlhttp://www.aygfsteel.com/dunkbird/services/trackbacks/195179.html所谓的数据传输Q其实是指SQLServer讉KAccess、Excel间的数据?/p>

Z么要考虑到这个问题呢Q?/p>

׃历史的原因,客户以前的数据很多都是在存入在文本数据库中,如Acess、Excel、Foxpro。现在系l升U及数据库服务器如SQLServer、ORACLE后,l常需要访问文本数据库中的数据Q所以就会生这L需求。前D|间出差的目Q就是面临这L一个问题:SQLServer和VFP之间的数据交换?/p>

要完成标题的需要,在SQLServer中是一仉常简单的事情?/p>

通常的可以有3U方式:1、DTS工具 2、BCP 3、分布式查询

DTS׃需要说了,因ؓ那是囑Ş化操作界面,很容易上手?/p>

q里主要讲下后面两们Q分别以查、增、删、改作ؓ单的例子Q?/p>

下面废话׃说了Q直接以T-SQL的Ş式表现出来?/p>


一、SQLServer和Access

1、查询Access中数据的ҎQ?/p>

select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')

?/p>

select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\DB2.mdb";User ID=Admin;Password=')...serv_user

2、从SQLServer向Access写数据:

insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee?)
select * from SQLServer?br /> 或用BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out  "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

上面的区别主要是QOpenRowSet需要mdb和表存在QBCP会在不存在的时候生成该mdb

3、从Access向SQLServer写数据:有了上面的基Q这个就很简单了

insert into SQLServer?select * from
OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from Accee?)

或用BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" in  "c:\db3.mdb" -c -q -S"." -U"sa" -P"sa"'

4、删除Access数据Q?/p>

delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
where lock=0

5、修改Access数据Q?/p>

update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\db2.mdb','select * from serv_user')
set lock=1

SQLServer和Access大致p么多?/p>


二、SQLServer和Excel


1、向Excel查询

select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]') where c like '%f%'

select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\book1.xls',[sheet1$])

1)hdr=yes时可以把xls的第1行作为字D늜待,如第1个中hdr=no的话Qwhere时就会报?br /> 2)[]和美?必须要,否则M$可不认这个̎

2、修改Execl

update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet1$]')
set a='erquan' where c like '%f%'

3、导入导?/p>


insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\book1.xls;','select * from [Sheet2$]')(id,name)
select id,name from serv_user

或BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out  "c:\book2.xls" -c -q -S"." -U"sa" -P"sa"'

从Excel向SQLServer导入Q?/p>

select * into serv_user_bak
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\book1.xls;','select * from [Sheet1$]')

如果表serv_user_bak不存在,则创?/p>

有关BCP和分布式查询的详l解{,查SQLServer自带的帮助吧?br /> SQLServer和txt文g、HTML文g、VFP文g的数据交换都昑־非常Ҏ了。。。?/p>

其实q些内容在帮助里都有Q偶只不q是ȝ了一下,方便大家参考,呵呵~~

以上内容都经q测试~~

转自Q动态网制作指南 www.knowsky.com


大鸟 2008-04-23 17:31 发表评论
]]>
վ֩ģ壺 | ӻ| | ʡ| | ˮ| | Ϫ| ɽ| | | | | | ũ| | | ͷ| | | ̨| | | ̫| | | ɽ| ɽ| Զ| | ŷ| | | | ɽ| ӳ| ɳ| Ӣ| Ҷ| | |