MySQL<-->MyODBC<-->ADO<-->Recordset<-->VB6
我想, 在 VB.NET 裡應該也可以, 只是 VB.NET內建是用 ADO.NET
可能 connection string 不太一樣! ..
step 1.
安裝MyODBC, 我是安裝 MyODBC-standard-3.51.9-win.msi
sure, 到 http://www.mysql.com 抓
安裝好後, 我完全沒有做設定! …只是在控制台的ODBC裡看到多一項driver:
MySQL ODBC 3.51 Driver
step 2.
建立 connection
及透過 ADO 把資料撈進 Recordset …
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim rs_result As Recordset
Private Sub Form_Load()
connstr = \"Driver={MySQL ODBC 3.51 Driver};server=localhost;\" & _
\"UID=username;PWD=password;database=phpbb2;Option=4;\"
conn.Open connstr
rs.CursorLocation = adUseClient
End Sub
Private Sub Command1_Click()
Dim strSQL as String
strSQL=\"Select * from phpbb2_posts\"
rs.Open strSQL, conn, adOpenDynamic, adLockReadOnly
set rs_result = rs.clone
rs.close
End Sub
大大您好:
我目前正碰到VB存取Mysql的問題,
我看過您的程式碼,也嘗試過!!
可是我一直沒有辦法成功!!
可以請您有詳細一點的步驟嗎!?
謝謝!!
您好 ,
小弟的 blog 中寫得已經夠詳細了ㄚ ? 只差沒寫安裝時要按”下一步” … 請問上述的 step 您都有做過了嗎 ? 而您沒辦法連線成功總是會有錯誤訊息吧 ~?… 提供一下相關資訊 , 看小弟我是否可以幫你確認一下嚕…
感謝您對我的問題有所回應,
小弟我又來打擾您了!!
您說的以上step我都有完成,
您的程式碼部分,我貼上之後!!
有connstr未宣告(我想只要宣告字串給他就好了),
Recordset未定義,adUseClient未宣告,
adOpenDynamic未宣告,adLockReadOnly未宣告,
等等我不知如何解決….
不好意思,打擾^^
您好 ,
從您的訊息看來, 您對於 VB vs ODBC 這塊並沒有進一步瞭解過 .小弟的文章中有提到
MySQL <->MyODBC<->ADO<->Recordset<->VB6
請參考下列step 以達到上述的 link . (最好還是瞭解一下各層關係, 不然還是很容易卡在其中)
1.安裝 MDAC ver.2.5 版以上 , 目前最新為 2.8 (但我目前只找得到 2.7版的 link )
http://ftp.isu.edu.tw/pub/MsDownload/mdac/2.7/tw/
2.於 VB IDE 中選 “專案”->”設定引用項目”->”Microsoft ActiveX Data Object 2.7 Libray”
這樣就能解決下述 issue :
有connstr未宣告(我想只要宣告字串給他就好了),
Recordset未定義,adUseClient未宣告,
adOpenDynamic未宣告,adLockReadOnly未宣告
至於connstr 的內容”MySQL ODBC 3.51 Driver” , 請參考您所安裝MyODBC的版本對應於 ODBC 管理員中所程現的字串 .
您所說的加入參考”Microsoft ActiveX Data Object 2.7 Libray”
我先前已有加入,可是它依舊沒有解決我所提到的問題。
不好意思,對於 VB vs ODBC 這塊我真的很不了解,
所以才產生這些問題。
我在其他地方找到另外的程式碼,
也連結成功,讀到mysql的資料,
但是它卻是字串我不知道如何處理。
程式碼如下↓
Imports System.Data.Odbc
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim myd As DataSet = New DataSet
Dim db_host As String = “localhost”
Dim db_user As String = “root”
Dim db_pass As String = “19871122”
Dim db_data As String = “mytest”
Dim sql As String
Dim strCn As String = “DRIVER={MySQL ODBC 3.51 Driver};” & _
“SERVER=” & db_host & “;” & _
“DATABASE=” & db_data & “;” & _
“UID=” & db_user & “;PWD=” & db_pass & “;” & _
“OPTION=3;stmt=SET NAMES GB2312″”
cn.Open(strCn)
cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
sql = “select * from member”
rs.Open(sql, cn)
TextBox1.Text = rs.GetString
End Sub
End Class
您好 ,
您所貼上的 code 不就是將此功能類別化嚕 ~ …並把小弟的 connstr 的一整串參數分開處理罷了 ~ … 您說可以連上並可以讀得到 mysql 的資料 , 是否可以將您整個 code 提出給我參考 , (請從建立 Obj到呼叫新物建之method及其參數完整提出;) 再依據您寫入的參數修改 connstr , 效果應該會是一樣的 ! … 或者是您是怎樣使用小弟的 code 的 ? 亦一並提出 , 讓我判讀一下差異在哪ㄦ ? 若真不行… ha ~.. forget it , 反正您已經可以用別人的 code 來跑您所要的 function 啦 ! …
我這段 connstr 確定是 ok 的, 照以前小弟在補習班教學的經驗 , 通常上學員會有問題的部份 :
connstr = “Driver={MySQL ODBC 3.51 Driver};server=localhost;” & _
“UID=username;PWD=password;database=phpbb2;Option=4;”
1.”MySQL ODBC 3.51 Driver” 與系統 ODBC Driver 管理員中程現的不符
2.MySQL 未啟動
3. UID/PWD 未改成該主機的設定
4. database 指定錯誤 .(ex : 有的學員仍是寫 database=phpbb2 … ~”~ )
您所說的Code,我想就只有那些了!!
如何使用我也說不上….。
為什麼您有adOpenDynamic, adLockReadOnly,
而我可執行的程式碼卻沒有?有什麼功用嗎?
可執行的程式,我卻又不知道如何往下做!!
因為我最主要是要存入mysql,現在只有讀取而已!!
或者是否可教導我如何存取mysql。
您所提到的1.要如何判別不符?
而2.3.4.都有正確指定。
依舊是先前所提到的,五個未定義未宣告。
這方面是否有書籍可以參考呢?
方便提供書名嘛!?
adOpenDynamic, adLockReadOnly 是 ADO 的常數 . 若是引用到 MDAC 2.7 以上的版本 , 應該就有這些常數了.
照您所述 , 就把 connstr 改成
“Driver={MySQL ODBC 3.51 Driver};server=localhost;” & _
“UID=root;PWD=19871122;database=mytest;Option=4;”
應該也會有一樣的效果 .
我指的 item1 , 判別符不符合都沒差了 , 因為您提供的 code 也是寫 : DRIVER={MySQL ODBC 3.51 Driver} , 這個 string 是從 ODBC 管理員中所程現的字串來 . (之前的 comment 有提到)
如何存取 mysql , 請參考 sql 語法用書 . 在市面上應該一堆吧 !?…入門請參考 ANSI-SQL . 不過每種資料庫的語法多少會有些不同 , 詳細部份請看 mysql 手冊 ,會很詳細地告訴你如何下這語法 ~… 若要配合 VB來使用, 請參考 ADO vs VB 這部份文件 …
通常上我若是要讀資料, 會用 recordset 來讀(你提供的 code 和我的ex都是用這個將 select 出來的東西放到 recordset中) . 若是要寫資料, 會直接以sql 語法來 update . ex :
strSQL = “update testdb field1=’hahaha’ , field2=’yayaya'”
objConn.Execute strSQL
有興趣的話 , 請參考小弟早期練習用的做品 , 有附上 src code
http://worren.net/works/index.php?main=prg/win/vb/account
以上 , 希望有幫到你.
五個未宣告未定義解決了!!修改之後如下↓
Dim rs_result As ADODB.Recordset
Dim connstr As String
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open(strSQL, conn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockReadOnly)
=============================================================================================
我現在該學習的是,如何以VB的語法存入mysql,您所說的sql語法我知道!!
我想知道的是,VB要寫些什麼?
您上述的objConn.Execute strSQL,objConn未宣告,
我猜測它是我的rs但似乎沒有,猜測錯誤….
修改成conn.Execute(strSQL)之後沒有錯誤,這樣是對的嘛!?
objconn.Execute(strSQL)是做什麼樣的動作呢?
還有rs_result = rs.Clone存放了什麼到rs_result?
code 中的 “objConn” 是 Adodb的 connection , 要為它 creat 一新 obj
Dim objConn As New ADODB.Connection . 請參考小弟的原文件 !原文件是用 “conn” 當做 connection 變數 .
請先參考 ADO 的文件(msdn.microsoft.com 就有啦!) ~…. 這樣就能看得懂小弟我在寫什麼了! 對於 ADODB.Recordset & ADODB.Connection 的屬性/方法 以及用法就不在這兒多加描述了.
直接在 msdn 查詢 “ADODB” 應該可以查到您所需要的信息 .
大致上是 Database <--> ODBC <--> ADODB.Connection <--> ADODB.Recordset .
而 Connection 可以做 execute 來執行 SQL 語法 . 查獲的結果可丟到 Recordset 來做 maintain (新增/移除/修改/讀取 都可) . 不過 Recordset 我多只會拿用做讀取 . 其它有寫入的動做 , 我大多會透過 SQL 語法來完成 .
以上 ….
感謝您,問題OK^^