2017-10-11 139 views
-1

在我的excel VBA函數中,'strSQL'幫助我在所有數據字段中的所有記錄的長度爲255 char的情況下獲得完美的結果,否則該函數返回所有記錄的空值,該特定字段包含超過255個字符。Excel VBA的SQL

strSQL = "SELECT [Company Name], [ProfileType], [DataField0],[DataField1], 
      [DataField2],[DataField3],[DataField4],[DataField5],[DataField6],[DataField7] 
      FROM [Data$] WHERE [Company Name] = 'XYZ' ORDER BY [Heading_Order];" 

我使用ADODB建立連接。

+3

你有問題要問? – braX

+0

有沒有問題,並沒有上下文使這很難回覆 –

+0

對不起,混淆。問題是,如果源位置中的單個單元格的文本值長度大於255 char,爲什麼Recordset將爲所有記錄返回空字段值,並且如何解決該問題? –

回答

1

你對查詢結果做了什麼?

如果您嘗試將它們插入到Access表中,請檢查該表的數據類型以確保它不是Text字段。這有255個字符的限制。 對於較大的文本字段使用Memo(或Long Text

比這個數據可能會被截斷爲255個字符,如果其他的前8個的記錄包含255個或更少的字符。默認情況下,Microsoft Excel ODBC驅動程序將掃描數據的前8行以確定每列中的數據類型。嘗試將列的數據類型轉換爲文本(或者甚至將具有超過255個字符的行移動到第一行)

+0

數據存儲在Excel中,我正在獲取記錄以發送某些預定義PowerPoint形狀中的每個單元格值。 –

+0

這可能是由於Excel中列的數據類型,我已經更新了我的答案。我同意其他意見,可能值得更清楚地說出你的問題 – Leroy

0

以下是將SQL字符串轉換爲VBA代碼的好方法。

創建表單

表單只需要兩個文本框和一個命令按鈕。 SQL語句可能很長,因此您將文本框放在選項卡控件的不同頁面上。

Create a new form (in design view.) 
    Add a tab control. 
    In the first page of the tab control, add a unbound text box. 
    Set its Name property to txtSql. 
    Increase its Height and Width so you can see many long lines at once. 
    In the second page of the tab control, add another unbound text box. 
    Name it txtVBA, and increase its height and width. 
    Above the tab control, add a command button. 
    Name it cmdSql2Vba. 
    Set its On Click property to [Event Procedure]. 
    Click the Build button (...) beside this property. 
    When Access opens the code window, set up the code like this: 

Private Sub cmdSql2Vba_Click() 
    Dim strSql As String 
    'Purpose: Convert a SQL statement into a string to paste into VBA code. 
    Const strcLineEnd = " "" & vbCrLf & _" & vbCrLf & """" 

    If IsNull(Me.txtSQL) Then 
     Beep 
    Else 
     strSql = Me.txtSQL 
     strSql = Replace(strSql, """", """""") 'Double up any quotes. 
     strSql = Replace(strSql, vbCrLf, strcLineEnd) 
     strSql = "strSql = """ & strSql & """" 
     Me.txtVBA = strSql 
     Me.txtVBA.SetFocus 
     RunCommand acCmdCopy 
    End If 
End Sub 


http://allenbrowne.com/ser-71.html