Board logo

標題: [發問] 如何在SQL語法中引用REPLACE 取代雙引號呢? [打印本頁]

作者: dechiuan999    時間: 2011-6-21 07:18     標題: 如何在SQL語法中引用REPLACE 取代雙引號呢?

各位大大好:

   小弟有一陣列轉換的問題,
一直百思不解。特請敎各位大大。
小弟是想直接利用Transpose轉置方式來逹成
陣列的轉換。但因資料庫內部份字串會在雙引號內。
如此,影響到TRANSPOSE陣列的轉換。
請問在SQL語法中如何引用REPLACE將
雙引號更改為單引號呢?

語法如下:
Sub AA()   
    Dim myCon     As New ADODB.Connection
    Dim myRst     As New ADODB.Recordset
    Dim myCnc     As String
    Dim myCmd     As String
    Dim myFileName As String
    Dim s1%, s2%
    Dim mPath$
    Dim mData, mData1
    Dim mSht As Worksheet   

    mPath = "D:\TEMP"   
    myFileName = "TEMP-A.xls"   '測試檔
    myCnc = "Driver={Microsoft Excel Driver (*.xls)};" & _
    "DBQ=" & mPath & "\" & myFileName & ";"
   
    myCmd = "SELECT 編號,分類,名字,國文,數學,合計 FROM [F_Data01$]"  '如何在此語法內引用REPLACE來取代編號、分類、名字內的雙引號呢?
   
    myCon.Open "Provider=MSDASQL;" & myCnc

    myRst.Open Source:=myCmd, ActiveConnection:=myCon
   
    mData = myRst.GetRows  'A欄因部份字串有雙引號因而無法取出資料
   
    s1 = UBound(mData, 1)
    s2 = UBound(mData, 2)
   
    Set mSht = Worksheets(1)
   
    mData1 = Application.Transpose(mData)  '無法轉置 執行階段錯誤13 ,型態不符合。
    With mSht
        .Range("a1").Resize(s2, s1) = mData1 '無法轉置 執行階段錯誤13 ,型態不符合。
   
    End With
    myRst.Close
    myCon.Close
    Set myRst = Nothing
    Set myCon = Nothing
End Sub

備註:雙引號在字串內並非有一定規則

感恩各位大大!
作者: luhpro    時間: 2011-6-23 00:42

回復 1# dechiuan999
我不確定對 SQL 語法來說是否可行,
不過對於 ExcelVba 中的字串來說 "  是可以用 chr(34) 來代替的.
例如 :
要設定 Test$ 的內容為 abc"CD"se 時可用
Test = "abc" & chr(34) & "CD" & chr(34) & "se"
來指定
作者: dechiuan999    時間: 2011-6-23 06:19

謝謝你的回覆。
小弟因資料庫為access資料庫,
無法直接在excel資料表內先行改變。
所以希望可在sql語法中對access資料庫內能將此雙引號
變更為單引號。如此可避免影響到陣列的轉換
。如果無法突破此問題時;
則又要去須改原始程式了。

感恩大大!
作者: kimbal    時間: 2011-6-23 20:25

本帖最後由 kimbal 於 2011-6-23 20:28 編輯

ACCESS的話可以試試這樣,前8個雙引號, 後4個
SELECT
replace(編號,"""""""","""") ,
分類,名字,國文,數學,合計 FROM [F_Data01$]"
作者: dechiuan999    時間: 2011-6-24 06:40

本帖最後由 dechiuan999 於 2011-6-24 07:04 編輯

謝謝版主大大。
小弟依版主大大的指示,
測試結果仍有Error出現。
其內容如下:
執行階段錯誤'-2147217900 (80040e14)'
運算式中未定義的'replace'函數

另小弟突然想到直接在access資料庫
先將員工資料表的姓名加雙引號之後
利用查詢及replace取消雙引號就可
取得正確資料。其語法如下:

SELECT 員工.記錄編號, 員工.員工編號, 員工.部門, 員工.職稱, Replace(員工.姓名,"""","") AS Expr1, 員工.性別
FROM 員工;
因此表示引用 replace 是可行的

感恩版主大大!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)