VB6連 MySQL

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
Share your vote!


Do you like this post?
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid

11 thoughts on “VB6連 MySQL”

  1. 大大您好:
    我目前正碰到VB存取Mysql的問題,
    我看過您的程式碼,也嘗試過!!
    可是我一直沒有辦法成功!!
    可以請您有詳細一點的步驟嗎!?
    謝謝!!

  2. 您好 ,
    小弟的 blog 中寫得已經夠詳細了ㄚ ? 只差沒寫安裝時要按”下一步” … 請問上述的 step 您都有做過了嗎 ? 而您沒辦法連線成功總是會有錯誤訊息吧 ~?… 提供一下相關資訊 , 看小弟我是否可以幫你確認一下嚕…

  3. 感謝您對我的問題有所回應,
    小弟我又來打擾您了!!
    您說的以上step我都有完成,
    您的程式碼部分,我貼上之後!!
    有connstr未宣告(我想只要宣告字串給他就好了),
    Recordset未定義,adUseClient未宣告,
    adOpenDynamic未宣告,adLockReadOnly未宣告,
    等等我不知如何解決….
    不好意思,打擾^^

  4. 您好 ,
    從您的訊息看來, 您對於 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 管理員中所程現的字串 .

  5. 您所說的加入參考”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

  6. 您好 ,

    您所貼上的 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 … ~”~ )

  7. 您所說的Code,我想就只有那些了!!
    如何使用我也說不上….。
    為什麼您有adOpenDynamic, adLockReadOnly,
    而我可執行的程式碼卻沒有?有什麼功用嗎?

    可執行的程式,我卻又不知道如何往下做!!
    因為我最主要是要存入mysql,現在只有讀取而已!!
    或者是否可教導我如何存取mysql。

    您所提到的1.要如何判別不符?
    而2.3.4.都有正確指定。
    依舊是先前所提到的,五個未定義未宣告。

    這方面是否有書籍可以參考呢?
    方便提供書名嘛!?

  8. 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

    以上 , 希望有幫到你.

  9. 五個未宣告未定義解決了!!修改之後如下↓
    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?

  10. 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 語法來完成 .

    以上 ….

Leave a Reply

Your email address will not be published. Required fields are marked *


Please help to input verification code