2015年12月17日 星期四

New ADOX.Catalog - 使用者自訂型態尚未定義

加入NEW ADOX.Catalog 失敗的地方


















忘了設定引用項目了. Microsoft ADO Ext2.7 for DLL and Security
沒有Ext2.7 使用 Microsoft ADO Ext2.8 for DLL and Security 也可以的


2015年12月6日 星期日

綁架 病毒


受害者特徵

在巴哈姆特與Mobile01的網友通力合作、收集各方資訊下,終於有比較明確的應對方式:
1.該病毒為多語系–至少有英文、西班牙文、德文、日文、中文、韓文、泰文。
2.感染途徑確認為Drive-by download attack,會在瀏覽被改竄的惡意網站、或開啟郵件、甚至點選彈跳視窗時強制安裝病毒。
3.會被感染電腦的特徵都有下列四者其中之一–
 a.舊版Java。
 b.舊版Adobe Reader。
 c.舊版Adobe Flash Player。
 d.沒有將Windows Update更新到最新。
換言之、如果上述四者都有更新到最新版,那麼感染的機會微乎其微。
因XP已經不再更新/修補系統,所以XP無法從系統這部分抵禦病毒入侵。
4.2015/05/01現在目前除了映像檔還原外沒有任何有效的解法。
文章來源 :mobile01


對應方式
1.Windows系統更新:更新名稱有「安全性更新」的項目全裝。
snap0769

↑有標記「安全性更新」的更新檔,全部都要安裝。

2.以下五個軟體更新到最新
Adobe Flash Player:Flash Player更新網址
Silverlight:Silverlight下載處

3.Win XP使用者,因為系統已經停止支援更新。請盡速更換成Win7或是更高版本作業系統
文章來源 :https://www.kocpc.com.tw/archives/15385

以下文章  : 遇到 Silverlight 無法移除的方法

【茶包射手日記】暴力重裝Silverlight

[感謝小熊子提供本則KB]
使用者在Windows XP SP3上安裝Silverlight 4不成功,嘗試重新下載安裝一直出現無法安裝的訊息。
檢查結果,Program Files目錄下未出現Microsoft Silverlight目錄,但控制台的移除已安裝程式清單中卻已有Microsoft Silverlight選項,但點選會出現找不到msi安裝程式的訊息而無法移除。
由%Temp%\Silverlight0.log的安裝Log看到以下記錄
[18:01:48] Silverlight installer logging started.
[18:01:49] Install button clicked.
[18:01:49] Duplicate installation
[18:01:49] Rerun custom action RegisterAuthenticodeSIP...
[18:01:49]     LoadLibrary(C:\Program Files\Microsoft Silverlight\xapauthenticodesip.dll) failed: error code 126
[18:01:49] Beginning uninstall with following command line:
[18:01:49] /x {89F4137D-6C26-4A84-BDB8-2E5A4BB71E00} /qn /noreboot /norestart MSIRESTARTMANAGERCONTROL=Disable REBOOT=ReallySuppress
[18:01:49] Uninstall finished with following return code:
[18:01:49] 1605
[18:01:49] Finished the install.
[18:01:49] QueryServiceRegistration returned:
[18:01:49] 0
[18:01:49] Service returned:
[18:01:49] 0
[18:01:49] IsRegisteredWithAU returned:
[18:01:49] 0
[18:01:49] Already registered with MU
[18:01:49] Showing final page.
[18:01:49] Support link is:
[18:01:49] http://go2.microsoft.com/fwlink/?LinkID=87096&errorID=1516
[18:01:50] Cancel button clicked.
[18:01:50] Exiting due to destroy message
[18:01:50] Exiting due to destroy message
[18:01:50] Exiting due to destroy message
[18:01:50] Exiting due to destroy message
[18:01:50] Silverlight installer logging ended. 
研判這是傳說中的"裝一半"狀態,讓你移也移不掉,裝也裝不了的尷尬處境。而最簡單的解法應是手工將裝壞的殘缺遺跡清空,再重新安裝一次。爬文找到文章介紹如何手動清理裝壞的Silverlight,步驟如下:
  1. 刪除Registry: HKLM\Software\Microsoft\Silverlight
    reg delete HKLM\Software\Microsoft\Silverlight /f
  2. 刪除目錄: %ProgramFiles%\Microsoft Silverlight
    rmdir /s /q "%ProgramFiles%\Microsoft Silverlight
    rmdir /s /q "%ProgramFiles(x86)%\Microsoft Silverlight
     (for x64)
照方煎藥,服用後就可順利安裝Silverlight了。
以下圖示 : 正常移除Silverlight 後的殘餘檔案

Silverlight 中的弱點可能會允許權限提高 (3058985)


不同網段 網路芳鄰互通的方式

設備實際的狀況

IP分享器:Vigor2110
WAN - 自行設定吧~
LAN - IP:192.168.0.1, 子網域遮罩:255.255.255.0

無線AP: ASUS RT-N18U (192.168.1.1)
運作模式 - 無線路由器
WAN - IP:192.168.0.8, 子網域遮罩:255.255.255.0, 預設閘道器 192.168.0.1 [手動固定IP]
LAN - IP:192.168.1.1, 子網域遮罩:255.255.255.0

無線AP: ASUS RT-N12HP_B1(192.168.2.1)
運作模式 - 無線路由器
WAN - IP:192.168.0.9, 子網域遮罩:255.255.255.0, 預設閘道器 192.168.0.1 [手動固定IP]
LAN - IP:192.168.2.1, 子網域遮罩:255.255.255.0

以上的狀況,總共有3個網段

主:192.168.0.1

主->附1:192.168.1.1
主->附2:192.168.2.1

輸入192.168.0.1進入Vigor 2110設定
區域網路 => 固定路由

針對ASUS RT-N18U設定:
目的IP位址 192.168.1.0
子網路遮罩 255.255.255.0
閘道IP位址 192.168.0.8
網路介面 LAN

針對ASUS RT-N12HP_B1設定:
目的IP位址 192.168.2.0
子網路遮罩 255.255.255.0
閘道IP位址 192.168.0.9
網路介面 LAN

設定固定路由之後,把無線AP的防火牆關掉

在192.168.0.xx網段內,輸入192.168.1.1 & 192.168.2.1進入管理兩台AP
這也意味著兩個不同網段通了....大功告成

搞定完3台 router後,接著就是設定網芳互通

假設有2台不同網段的電腦

Jack的電腦:192.168.0.50
Tom的電腦:192.168.1.20

Tom 公開分享了 shareA資料夾

那麼首先,Jack先打開檔案總管,輸入
\\192.168.1.20

先把網芳抓出來

接著修改lmhosts檔 (必需使用最高權限編輯)
C:\Windows\System32\drivers\etc\
lmhosts.sam ( or lmhosts)

加入
192.168.1.20 Tom

順利的話,再網芳輸入
\\Tom
即可讀到 Tom 公開分享的 shareA資料夾
這是我在目前設定時,發現不用透過架設Wins主機,跨不同網段使用網芳的方法

為何要如此大費周章,主要是因為在設定公司的進銷存程式,輸入IP連入會出現錯誤訊息,無法使用,必需改進網芳的電腦名稱才能使用

另外,為何IP分享器要不同網段,主要是為了解決IP分配穩定度的問題
華碩的IP分享器,總共有3~4種模式
01.無線路由器(預設)    02.中繼模式    03.Access Point(無線存取點)    04.Media bridge
假若把模式改成03,那麼3台IP分享器都會在同個網段,其實也就沒有上述網芳連線的問題

但是03的模式,若遇多人使用無線AP,很容易遇到IP配送不穩定的問題(主IP分享器DHCP配送不穩),所以才採用這種方式

以上若遇到不通順,建議先把電腦的防火牆及防毒軟體關掉,再依自己的條件設定開放原則



文章來源 :http://liaozi.blogspot.tw/2014/10/blog-post.html

win7 網路芳鄰安全性設定



Windows7 權限問題

windows7權限問題
今天重灌電腦,將系統升級成Windows7,一切重灌、安裝過程順利。但接著要去刪除舊資料,出現個超令人惱羞的錯誤訊息,如上,系統一直提示你權限不足問題、還給你一組神秘帳號S-1-5-21-3360281-973159817-1085559986-15986 (也可能是其他以S-1-5開頭的形式)...可是,明明就是用系統管理員身分登入啊!!

更詭異的是,當你去看資料夾的擁有者帳號時候,會出現個S-5-21-.....的鬼帳號,結果你明明權限為系統管理員,卻無法對該資料夾刪除、命名,或做任何動作!由於天使要刪除的舊資料高達數GB,因此這個問題非解決不可!上網找了一下,查到解決辦法,在此跟大家分享。


問題敘述:

重灌電腦後,發現某些檔案或資料夾,當你要更改他時候會出現權限不足問題,結果既無法新增,也無法刪除、移動,成為浪費空間又礙眼的鬼東西。

在該檔案/資料夾按右鍵,點選「內容」->「安全性」頁籤,發現有一些無法辨識的使用者....如S-1-5-21,開頭的使用者帳號。

S-1-5-21-3360281-973159817-1085559986


發生原因:
重灌前有建立某些使用者帳號,並設定這些使用者帳號才有存取檔案的權限。重灌或升級作業系統後,這些帳號當然不見了,變成無法辨識的使用者帳戶,僅能用S-1-5-21....這些無意義的帳號表示。


Windows7竟沒這麼聰明的會將原來檔案的使用權限移交給新作業系統的系統管理員,偏偏他又顧慮"安全性"地不讓你動用這些資料,於是造成一堆鬼資料無法刪除或更改。

即使你想由的「內容」->「安全性」頁籤的「編輯」按鈕來新增目前使用者的權限,卻發現「新增」與「移除」按鈕,都是灰色的,完全無法使用!


解決辦法:
檔案「內容」->「安全性」頁籤->進階按鈕,接著會開一個新視窗,選擇「擁有者」頁籤,然後按下「編輯」按鈕。
windows7權限問題
選擇您要變更的擁有者帳戶名稱,這邊通常會指定到新的管理者帳號, 如果您變更的是資料夾,記得在取代子容器與物件的擁有者打勾,這樣所有下層的檔案及資料夾擁有者權限,才會同時變更。 
windows7權限問題
經過一段時間的變更,最後你就可以把超礙眼的S-1-5-xxxxxxx的鬼帳號移除掉了!

如果你刪除還是有問題,可以用系統管理員開cmd指令(附屬應用程式->命令提示自元,右鍵點下去選"以系統管理員身分執行"),然後打入以下指令更改權限即可:
Cacls {你要改變權限的資料夾名稱} /t /e /c /g Everyone:f
windows7權限問題dos視窗

最後你終於可以把討人厭的資料夾刪除掉了!(如果還是不行,試著更改檔案的屬性看看,基本上能改屬性,一定就能刪除了..)

文章來源 :http://dreamyeh.pixnet.net/blog/trackback/c64cbcd28e/29035271

2015年12月3日 星期四

ODBC OLEDB ADO ADOX 的關係

ODBC OLEDB ADO ADOX 的關係如下:

ODBC( Open Database Connectivity)
OLEDB(Object Linking and Embedding, Database ; OLE-DB)
ADO(ActiveX Data Objects) 
ADOX(ADO Ext 2.1)   

1.四者的關係:
ODBC:最早資料庫通信標準
OLEDB: 在一切物件化的趨勢下,ms打算用它取代ODBC
OLEDB分兩種:
    a. 直接的OLEDB
    b. 類似ODBC的OLEDB(架構在ODBC上),這樣沒有自己的OLEDB提供者的資料庫也可以使用OLEDB的特點了。

ADO:其實只是一個應用程式層次的介面,它用OLEDB來與資料庫交換資料。
ADOX:對ADO的安全性,維護性(如:創建一個資料庫)進行了擴展。

2.用ODBC連接資料庫:
ODBC中提供三種dsn,它們的區別很簡單:使用者dsn只能用於本使用者。系統dsn和檔dsn的區別只在於連接資訊的存放位置不同:系統dsn存放在ODBC儲存區裡,而檔dsn則放在一個文字檔中。
它們的創建方法就不說了。在asp中使用它們時,寫法如下:
A. SQL server:
用系統dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname"
用檔dsn: connstr="FILEDSN=xx;UID=xx; PWD=xxx;DATABASE=dbname"
還可以用連接字串(從而不用再建立dsn):
connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx"
B. access:
用系統dsn: connstr="DSN=dsnname"
(或者為:connstr="DSN=dsnname;UID=xx;PWD=xxx")
用檔dsn: connstr="FILEDSN=xx"
還可以用連接字串(從而不用再建立dsn):
connstr="DRIVER={Microsoft Access Driver};DBQ=d:\abc\abc.mdb"


3.用OLEDB連接資料庫:
A. sql server:
connstr="PROVIDER=SQLOLEDB;
DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"
B. access:
connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\abc\abc.mdb"
4.使用UDL檔:
UDL檔是用來存放資料庫連接資訊的一個文字檔,有點象檔DSN,不過UDL是針對OLEDB(直接的和面向ODBC的)的。
UDL的創建方法:
右擊桌面或資源管理器-》新建-》microsoft資料連線, 其中的設置工作應該比較清楚了。
UDL的用法:
connstr="file name=e:\abc\abc.udl"
OLEDB的性能比較
有許多種辦法可以連上一個資料庫. 你可以用System DSN, DSN-less連接或是本地的OLEDB provider. OLEDB? 這是什麼什麼玩藝兒? 也許你們中的許多人以前沒有聽說過. 要回答這個問題,我們先得回顧一下資料庫連接的歷史.
早期的資料庫連接是非常困難的. 每個資料庫的格式都不一樣,開發者得對他們所開發的每種資料庫的底層API有深刻的瞭解. 因此,能處理各種各樣資料庫的通用的API就應運而生了. 也就是現在的ODBC(Open Database Connectivity), ODBC是人們在創建通用API的早期產物. 有許多種資料庫遵從了這種標準,被稱為ODBC相容的資料庫.
ODBC相容的資料庫包括Access, MS-SQL Server, Oracle, Informix等.
但ODBC並不是無瑕疵地的,它仍然含有大量的低級的調用,開發ODBC應用程式仍較困難. 開發者不得不將大量的精力花在底層的資料庫通信中,而不能專注于他們所要處理的資料. 後來微軟提出了一個解決方案: DAO(Data Access Objects). DAO的代碼看起來象這樣:
objItem.AddNew
objItem.Name = "Chair"
objItem.Price = 10
objItem.Update
你也許看過DAO的代碼. 後來DAO演變為RDO(Remote Data Objects, 為分散式資料庫體系設計), 再後來是ADO. 儘管它們都有各自的不足之處. 根據微軟的說法,"ODBC提供了本地SQL資料的存取,DAO提供了高級的資料物件". DAO和RDO都需要資料以SQL(Structured Query Language)的格式存儲. 針對這些缺陷,微軟提出了OLEDB,一個基於COM的資料存儲物件,能提供對所有類型的資料的操作,甚至能在離線的情況下存取資料(比方說,你使用的是你的便攜機,你可以毫不費力地看到最後一次資料同步時的資料映射).

OLEDB位於ODBC層與應用程式之間. 在你的ASP頁面裡,ADO是位於OLEDB之上的"應用程式". 你的ADO調用先被送到OLEDB,然後再交由ODBC處理. 你可以直接連接到OLEDB層,如果你這麼做了,你將看到伺服器端游標(recordset的游標)性能的提升. 那我們該如何直接連接到OLEDB呢?

要想直接連到OLEDB層,你必須改變你的connection物件連接字串. 先用老辦法創建一個connectiong物件:
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")

接下去,我們不用常規的類似
  DSN=pubs or DRIVER={MS SQL-Server};
  UID=sa;
  PWD=;
  DATABASE=pubs;
  SERVER=myMachine的連接語法,

而採用下面的連接語法:

  objConn.ConnectionString = "Provider=ProviderName; 
  DataSource=DatabaseSource; 
  Initial Catalog=DatabaseName; 
  User ID=UserID;
  Password=Password"

對於SQL:
ProviderName = SQLOLEDB
Data Source = Server Name
Initial Catalog = Database Name

對於Access:
ProviderName = Microsoft.Jet.OLEDB.3.51
Data Source = Full path to .MDB file
下面讓我們來看兩個例子,一個是針對Access的,還有一個是針對SQL的. 如果你的連接SQL的DSN-less連接串是這樣的:
DRIVER={MS SQL-Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine

那麼直接連接到OLEDB的連接字串應該是這樣的:
Provider=SQLOLEDB; 
Data Source=myMachine; 
Initial Catalog=pubs; User
ID=sa; 
Password=

讓我們來看看Access,如果你的Access的連接字串是:
DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\inetpub\wwwroot\users.mdb

那麼直接連接到OLEDB的連接字串應該是這樣的:
Provider=Microsoft.Jet.OLEDB.3.51; Data
Source=c:\inetpub\wwwroot\users.mdb

就是這麼簡單,挺棒的吧?
這很重要嗎?
現在你也許對為什麼要學習這種新的資料庫連接方法感到有些兒迷惑,為什麼不走標準的DSN-less/System DSN路子呢? 讓我來告訴你為什麼. 據Wrox出的ADO 2.0
Programmer's Reference一書中的測試,用OLEDB連接而不是DSN或DSN-less的連接會得到的性能提升如下:
性能比較
SQL Access
OLEDB DSN OLEDB DSN
Connection Times: 18 82 Connection Times: 62 99
Iterating through 1,000 Records Times: 2900 5400 Iterating through
1,000 Records Times: 100 950
一、ADO 和 RDO、DAO 的比較
ADO 並不是自動和您現存的資料訪問應用程式代碼相容的。當 ADO 封裝 DAO 和 RDO 的功能性的時候,就必須將許多語言要素轉換為 ADO 語法。在某些情況下,您可以將現存代碼的某些功能做一個簡單轉換。在其他情況下,最好是用 ADO 的新功能重寫該應用程式。

DAO (Data Access Objects) 資料訪問物件是第一個物件導向的介面,它顯露了 Microsoft Jet 資料庫引擎(由 Microsoft Access 所使用),並允許 Visual Basic 開發者通過 ODBC 象直接連接到其他資料庫一樣,直接連接到 Access 表。DAO 最適用於單機系統應用程式或小範圍本地分佈使用。
RDO (Remote Data Objects) 遠端資料物件是一個到 ODBC 的、物件導向的資料訪問介面,它同便於使用的 DAO style組合在一起,提供了一個介面,形式上展示出所有 ODBC 的底層功能和靈活性。儘管 RDO 在很好地訪問 Jet 或 ISAM 資料庫方面受到限制,而且它只能通過現存的 ODBC 驅動程式來訪問關係資料庫。但是,RDO 已被證明是許多 SQL Server、Oracle 以及其他大型關係資料庫開發者經常選用的最佳介面。RDO 提供了用來訪問預存程序和複雜結果集的更多和更複雜的物件、屬性,以及方法。
ADO 是 DAO/RDO 的後繼產物。ADO 2.0在功能上與 RDO 更相似,而且一般來說,在這兩種模型之間有一種相似的映射關係。ADO "擴展"了 DAO 和 RDO 所使用的物件模型,這意味著它包含較少的物件、更多的屬性、方法(和參數),以及事件。例如,ADO 沒有與 rdoEngine 和 rdoEnvironment 物件相等同的物件,可以顯露 ODBC 驅動程式管理器和 hEnv 介面。雖然您的介面可能是通過 ODBC OLE DB 服務提供程式實現的,但您當前也不能從 ADO 中創建 ODBC 資料來源。
包含在 DAO 和 RDO 模型中的許多功能被合併為單個物件,這樣就生成了一個簡單得多的物件模型。然而,由於這個原因,起初您可能會覺得找到合適的 ADO 物件、集合、屬性、方法,或事件非常困難。與 DAO 和 RDO不同的是,雖然 ADO 物件是分層結構的,但在分層結構範圍之外也是可以創建的。
不過,也應當注意,ADO 當前並不支援 DAO 的所有功能。ADO 主要包括 RDO 風格的功能性,以便和 OLE DB 資料來源交互,另外還包括遠端和 DHTML 技術。
一般說來,在 ADO 的演化過程中,馬上把大多數 DAO 應用程式移植到 ADO 上可能為時太早,因為當前的 ADO 並不支援資料定義 (DDL)、使用者、組,等等。不過,如果您只將 DAO 用於客戶-伺服器應用程式,而並不依賴于 Jet 資料庫引擎或不使用 DDL,那麼現在就可能移植到 ADO。最終,Microsoft 將提供一個 ADO DDL 部件來説明進行 DAO 到 ADO 的移植,並為 OLE DB 供應商提供一般的 DDL 支援。
二、ADO 2.0 物件模型
ADO 2.0 物件模型由八個物件組成的,它們中的大多數在功能上和 RDO 物件相似,只不過具有更強的功能性而已。需要花一些時間在 Object Browser (F2) 中流覽物件模型,以便於熟悉各種不同屬性、方法、事件、集合等等所在的位置。
注意 所有後面帶有星號 (*) 的物件都是同時應用於 ADO Recordset 型別程式庫 (ADOR) 的物件。
· Command 物件 包含關於某個命令,例如查詢字串、參數定義等的資訊。Command 物件在功能上和 RDO 的 rdoQuery 物件是相似的。
· Connection 物件 包含關於某個資料提供程式的資訊。Connection 物件在功能上和 RDO 的 rdoConnection 物件是相似的,並且包含了關於結構描述的資訊。它還包含某些 RDOEnvironment 物件的功能,例如 transaction 控制項。
· Error 物件 包含資料提供程式出錯時的擴展資訊。Error 物件在功能上和 RDO 的 rdoError 物件是相似的。
· Field 物件* 包含記錄集中資料的某單個列的資訊。Field 物件在功能上和 RDO 的 rdoColumn 物件是相似的。
· Parameter 物件 包含參數化的 Command 物件的某單個參數的資訊。該 Command 物件有一個包含其所有 Parameter 物件的 Parameters 集合。Parameter 物件在功能上和 RDO 的 rdoParameter 物件是相似的。
· Property 物件* 包含某個 ADO 物件的提供程式定義的特徵。沒有任何等同于該物件的 RDO,但 DAO 有一個相似的物件。ADO 物件可以具有兩種屬性:
· Built-In 屬性:ADO 的"本地"屬性。也就是說,任何使用熟悉的 MyObject.Property 語法的新物件都可以立即使用的 ADO 中的屬性。Built-in 屬性並不在某個物件的 Properties 集合中以 Property 物件的形式出現,因此儘管您可以修改它們的值,您卻不能修改它們的特性或將它們刪除。
· Dynamic 屬性:ADO 的非本地屬性,它們是由下一級資料提供程式定義的。它們出現在合適的 ADO 物件的 Properties 集合中。
例如,一個資料提供程式特有的屬性可能指明某個 Recordset 物件是支援事務還是支援更新。這些附加的屬性在 Recordset 的 Properties 集合中以 Property 物件的形式出現。Dynamic 屬性只能用 MyObject.Properties(0) 或 MyObject.Properties("Name") 語法通過集合來引用。不同的資料提供程式可能提供一個或多個特殊的屬性,來處理提供程式特有的操作。
· Recordset 物件* Recordset 物件包含某個查詢返回的記錄,以及那些記錄中的游標。Recordset 物件在功能上和 RDO 的 rdoResultset 物件相似。您可以在不用顯式地打開 Connection 物件的情況下,打開一個 Recordset(例如,執行一個查詢)。不過,如果您選擇創建一個 Connection 物件,您就可以在同一個連接上打開多個 Recordset 物件。
三、一般資料訪問的移植
下面列出了兩個基本的資料訪問方案,每個方案都在後面的主題中進行了討論。在每種方案中,都介紹了一種 RDO 解決方案和一種 ADO 解決方案。
· 建立到某個資料庫的連接
· 運行一個基本查詢
注意 部分示例引用了某個表單上的附加控制項,例如一個 MSHFlexGrid 控制項或 TextBox 控制項。為使自己的工程能夠正常工作,請把這些控制項添加到工程中。
1。建立到某個資料庫的連接
1.> RDO
要打開一個連接,必須提供一個帶參數的連接字串。注意當 RDO 要創建一個 rdoQuery 物件時,是不需要連接的,但當最初創建一個 rdoResultset 物件時,則是需要的:
Dim cn As New rdoConnection
Dim cnB As New rdoConnection
Const ConnectionString = "uid=myname;pwd=mypw;driver={SQLServer}; _
server=myserver;database=pubs;dsn=''"
該連接字串訪問一個特定的 SQL Server,並允許 ODBC 在沒有 DSN 的情況下打開一個連接。這是一個帶有所有標準參數的典型 ODBC 連接字串。
下一節代碼,在表單的 Load 事件中,建立了游標驅動程式的類型以及登錄超時。缺省情況下,RDO 使用 rdUseIfNeeded 游標類型,該類型調用 SQL Server 上伺服器端的游標。下面的示例中指定了 rdUseNone,從而使這種缺省規定不被遵守。rdDriverNoPrompt 標誌意味著如果使用者ID 和密碼不匹配,應用程式將產生一個錯誤。
Private Sub Form_Load()
With cn
cn.Connect = ConnectString
cn.LoginTimeout = 10
cn.CursorDriver = rdUseNone
cn.EstablishConnection rdDriverNoPrompt
End With
第二個連接執行任何客戶批次處理更新:
With cnB
cnB.Connect = ConnectString
cnB.CursorDriver = rdUseClientBatch
cnB.EstablishConnection
End With
End Sub
當連接操作完成時最後一個事件發生,並且它能夠對連接打開時所出現的任何錯誤進行處理。可以用該事件來測試連接是否正常工作,如果能正常工作,則使任何依賴于打開連接的按鈕都成為有效的。
Private Sub cn_Connect(ByVal ErrorOccurred As Boolean)
If ErrorOccurred Then
MsgBox "Could not open connection", vbCritical
Else
RunOKFrame.Enabled = True
End If
End Sub
2.>ADO
要在 ADO 中建立一個資料庫連接,首先創建一組可被 ADODB 物件引用的對象 ADO 物件。這些物件將在以後用於設置打開連接和generate結果集的特定屬性:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cnB As New ADODB.Connection
Dim Qy As New ADODB.Command
下一行創建了一個連接字串,正如您在前一個 RDO 示例中所創建的那樣。在兩種情況下,您都使用 ODBC 的 "非-DSN" 連接策略以節省時間,並提高性能:
Const ConnectionString = "uid=myname;pwd=mypw;driver={SQL Server}; _
server=myserver;database=pubs;dsn=",,connection=adConnectAsync"
下面的聲明對本示例中用到的變數進行初始化。(注意一個保存結果集的變數陣列的創建):
Dim sql As String
Dim rc As Integer
Dim i As Integer
Dim Changes As Integer
Dim bms() As Variant

下一步,打開一個到 Form_Load 事件中某個資料庫的 ADO 連接。注意該代碼和 RDO 代碼是很相似的,只不過常數是以 "ad" 開始的,而不是 "rd"。如果要看到所有可以使用的常數,請查看 ADODB 型別程式庫。
注意 不需要指定提示行為,因為 ADO 的default設置為"無提示"。不過,如果您選擇對之進行更改,則可以使用 ADO Properties 集合來處理希望的提示行為。在 RDO 中,您可以用 OpenConnection 參數來設置行為。在 ADO 中,您必須設置 Properties ("Prompt") 屬性。
同時,如果您不想使用游標驅動程式,則不必對其進行指定(象在 RDO 中的CursorDriver = rdUseNone),因為 ADO 的default規定是無游標驅動程式。
Private Sub Form_Load()
With cn
' 建立非 DSN 連接
.ConnectionString = ConnectString
.ConnectionTimeout = 10
'.Properties("Prompt") = adPromptNever
' This is the default prompting mode in ADO.
.Open
End With
With cnB
.ConnectionString = ConnectString
.CursorLocation = adUseClient
.Open
End With
End Sub
2。運行一個基本查詢
1.>RDO
該事件程序返回一個基於 SQL 語句的結果集。它執行一個受限查詢,並將結果集傳遞到一個控制項,該控制項將結果資料插入到某個 MSHFlexGrid 控制項中。注意,建立結果集需要一個打開的連接。
Private Sub RunButton_Click()
Dim rs As rdoResultset
Set rs = cn.OpenResultset("select * from titles where title _
like '%h'")
rdoGrid1.ShowData rs
rs.Close
End Sub
2.>ADO
一旦打開了資料庫連接,您就可以對其運行一個查詢。下面的事件程序和先前的 RDO 代碼是非常相似的。不過,在這種情況下,您用進行 SQL 查詢的新 ADO Open 方法和 ADO Connection 物件作為參數,而不是使用 rdoConnection 物件的 OpenResultset 方法。您也可以選擇使用 ADO Connection 物件的 Execute 方法,就象您可以在 RDO 中所做的那樣(只要它不返回一個行集合)。
ADO2 和 RDO2 相比,一個主要的不同之處在于 ADO2 允許您創建一個記錄集,並在打開該記錄集之前對其屬性進行設置。
        Private Sub RunButton_Click()
            Dim rs As New ADODB.Recordset
            rs.Open "select * from titles where title like '%h'", cn
                ADOGrid1.ShowData rs
            rs.Close
        End Sub

您可以運行該查詢,並在 ADO 中非同步地處理其結果集。也就是說,you specify the adFetchAsynch option on rs.Open,ADO 導致游標驅動程式自動充填背景中的結果集。