文章編號: 194653 - 上次校閱: 2005年3月14日 - 版次: 1.2

FIX: MSHFLexGrid 並不會顯示多個 2048年的資料列

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

徵狀

階層式 FlexGrid 控制項永遠會顯示最多 2048年橫列時並不考慮的記錄筆數個資料來源中。

解決方案

雖然 mshflexgrid 的記錄計數正確但只有第一個 2048年記錄會顯示。如果需要顯示超過 2048年您需要開啟資料錄集填入方格中使用的 ADO GetString 方法和 [MSHFlexGrid] 的 [多媒體] 屬性。

下列程式碼可用 Command1_Click 事件 更多資訊資訊 一節中程式碼的位置來解決這個問題:
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset
   Dim rsVar As Variant
   Dim i As Integer
   cn.Open "Testing"  '<-- Your DSN

   rs.Open "select * from Cies", cn, adOpenStatic, adLockOptimistic
   rs.MoveLast

   rs.MoveFirst
   ' Assuming that rs is your ADO recordset
   MSHFlexGrid1.Rows = rs.RecordCount + 1

   rsVar = rs.GetString(adClipString, rs.RecordCount)

   MSHFlexGrid1.Cols = rs.Fields.Count

   ' Set column names in the grid
   For i = 0 To rs.Fields.Count - 1

       MSHFlexGrid1.TextMatrix(0, i) = rs.Fields(i).Name

   Next

   MSHFlexGrid1.Row = 1
   MSHFlexGrid1.Col = 0

   ' Set range of cells in the grid
   MSHFlexGrid1.RowSel = MSHFlexGrid1.Rows - 1
   MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1
   MSHFlexGrid1.Clip = rsVar

   ' Reset the grid's selected range of cells
   MSHFlexGrid1.RowSel = MSHFlexGrid1.Row
   MSHFlexGrid1.ColSel = MSHFlexGrid1.Col

   rs.Close
   Set rs = Nothing
   cn.Close
   Set cn = Nothing
				

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。

這個 Bug 已經在 Visual Studio 6.0 Service Pack 3 中獲得修正。

如需有關 Visual Studio Service Pack 的詳細資訊,請參閱下列文件 「 Microsoft 知識庫 」 中:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why? (http://support.microsoft.com/kb/194022/EN-US/ )

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed? (http://support.microsoft.com/kb/194295/EN-US/ )

其他相關資訊

這個行為的 「 MSHFlexGrid 示範如何針對各種後端 SQL Server 包括存取等。

重製行為的步驟

測試資料表

  1. 建立簡單的資料表下列欄位:
         Name         Data Type (SQL Server)       Data Type(Access) 
      ------------------------------------------------------------------
    
         PartID          Integer                      Integer
         PartName        VarChar (10)                 Text (10)
    					
  2. 插入關於 3000 10000 您資料表中的資料列。為了簡單起見,您可以建立迴圈,並在 3000 至 10000 的計數器中插入相同的資料錄。
  3. 將您的資料表儲存為 「 測試]。

    注意:您可以選擇任何其他後端執行測試。

Visual Basic 用戶端

  1. 在 Visual Basic 中啟動新的標準 EXE 專案。預設會建立 Form1。
  2. 在 [專案] 功能表上選取元件 」,然後選擇下列元件:
    • Microsoft ADO 資料控制 6.0 (OLE DB)。
    • Microsoft 階層式 FlexGrid 控制 6.0。

  3. 在 [專案] 功能表上選取參考,然後按一下 「 Microsoft ActiveX 資料物件 2.0 程式庫"
  4. 將下列物件放在表單上:
        Control             Name                  Caption
       -------------------------------------------------------------------
    
       CommandButton       Command1           Using ADO Recordset
       CommandButton       Command2           Using ADODC
       CommandButton       Command3           Free MSHFlexGrid
       MSHFlexGrid         MSHFlexGrid1       Testing MSHFlexGrid Display
       ADODC               Adodc1
    					
  5. (如果存在的話),繫結 ADODC 透過您資料來源名稱,或透過原生的 OLEDB 提供者。在 [記錄來源] 屬性中寫入: 選取 * 從測試。
  6. 在 Form1 的一般宣告區段中放置下列程式碼:
           Option Explicit
    
           Private Sub Command1_Click()
    
              Dim cn As New ADODB.Connection
              Dim rs As New ADODB.Recordset
    
              cn.Open "Testing"               '<-- Your DSN
    
              rs.Open "select * from Test", cn, adOpenStatic, adLockOptimistic
              rs.MoveLast
    
              ' Check the number records in your ADO recordset
              ' The RecordCount property of the ADO recordset reflects the
              ' actual number of records
    
              Debug.Print "ADO recordset record-count: " & vbTab & _
                  rs.RecordCount
    
              Form1.Caption = "Loading grid... please wait..."
    
              Set MSHFlexGrid1.Recordset = rs
    
              ' Check the number of rows that the Hierarchical FlexGrid
              ' contains The RecordCount property of the Hierarchical
              ' FlexGrid also reflects the actual number of records
    
              Debug.Print "MSHFlexGrid1 Recordset record-count: " & vbTab &  _
                 MSHFlexGrid1.Recordset.RecordCount
    
              Form1.Caption = "MSHFlexGrid Display Sample"
    
              ' Free resources
              rs.Close
              Set rs = Nothing
              cn.Close
              Set cn = Nothing
    
           End Sub
    
           Private Sub Command2_Click()
    
              Form1.Caption = "Loading data... please wait..."
    
              ' Set the Grid's source to be ADODC
              Set MSHFlexGrid1.DataSource = Adodc1
    
              ' Check the number of records in ADODC recordset
              Debug.Print "ADO data control record-count: " & vbTab &  _
                 Adodc1.Recordset.RecordCount
              Form1.Caption = "MSHFlexGrid Display Sample"
           End Sub
    
           Private Sub Command3_Click()
              MSHFlexGrid1.Clear
              Form1.Caption = "Grid is clear now..."
           End Sub
    					
  7. 按下 F5 鍵以執行程式碼,並注意只有 2048年記錄會顯示在 [MSHFlexGrid。

    注意:連接到資料來源的 ODBC 使用 OLEDB 提供者,或使用原生的 OLEDB 提供者並不會影響階層式 FlexGrid 行為。

這篇文章中的資訊適用於:
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbbug kbfix kbvs600sp3fix KB194653 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:194653? (http://support.microsoft.com/kb/194653/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。