none
請問 sql 語法的錯誤,運作必須使用更新查詢。 RRS feed

  • 問題

  • 各位前輩您好

    又要來麻煩前輩們解惑了

    以下語法我得到一個錯誤訊息,運作必須使用更新查詢

     

    語法如下

    A = "UPDATE  表單1 " & _
                " SET Field1 =( SELECT 表單2.Field2  FROM 表單2 WHERE (表單2.單據編號 =表單1.單據編號)   " & _
            " WHERE (表單1.Field2 <> '台北')"

     

    我希望把 表單2的 field2 指定給 表單1的 filed1 欄位,並且是相同單據編號且 表單1 的field2不等於 某值。

    如果我把子查詢拿掉如下,則可以運作。

     

    A = "UPDATE  表單1 " & _
                " SET Field1 =18 " & _
            " WHERE (表單1.Field2 <> '台北')"

     

    不知那個概念錯誤了,煩請前輩指教,謝謝

     

    2008年5月5日 上午 05:39

解答

  • Dear chih.ching

     

    我開了一個Access 2000格式的mdb檔來測試,將上面程式碼做了一下修改,是可以動作的,您可以參考看看

    Code Snippet

    UPDATE TB1   INNER JOIN TB2
    ON
             (TB2.[單據編號] = TB1.[單據編號] )
    SET
            TB1.Filed1 = TB2.Filed2
    Where
            (TB1.Filed2<>'台北');

     

     

    2008年5月7日 上午 02:31

所有回覆

  •  

    註: 表單1 的單據編號欄位是會有重複的,因為他是個明細表單。

    2008年5月5日 上午 05:43
  • Hi,

    應該是這樣子,你可以測試看看

    Update 表單一 Set 表單一.Field1 = 表單二.Field2 Where (表單一.單據編號 = 表單二.單據編號) AND (標單一.Field2 <> '台北')

     

    另外,這篇本身問題上跟VB比較沒關係,稍後會移往 "資料庫與程式開發" 板塊那邊
    2008年5月5日 上午 05:50
  •  

    謝謝

     

    我試試看

     

     

    2008年5月5日 上午 05:52
  •  

    請問 不需要加入 FROM嗎?

     

    我得到 無值提供給必要參數的訊息

     

    沒有 FROM 可以引用 表單2的欄位嗎?

     

    謝謝!

    2008年5月5日 上午 06:16
  •  

    我改成這樣

    Update 表單一,表單二  Set 表單一.Field1 = 表單二.Field2 Where (表單一.單據編號 = 表單二.單據編號) AND (標單一.Field2 <> '台北')

     

     

    得到的是 SQL陳敘式少結束的地方少了分隔符號 ;

     

     

    2008年5月5日 上午 06:26
  •  

    :::

    A = "UPDATE  表單1 " & _
        " SET Field1 =表單2.Field2 " & _
        " From 表單2 Inner Join 表單2.單據編號 =表單1.單據編號 " & _
        " WHERE (表單1.Field2 <> '台北')"


     

    2008年5月5日 上午 06:31
  •  

    謝謝

    但是加上 INNER JOIN 後 錯誤訊息為 語法錯誤 (少了運算元)

     

     

    2008年5月5日 上午 06:40
  •  

    :::抱歉,寫錯了

    A = "UPDATE  表單1 " & _
        " SET Field1 =表單2.Field2 " & _
        " From 表單1 Inner Join 表單2 On 表單2.單據編號 =表單1.單據編號 " & _
        " WHERE (表單1.Field2 <> '台北')"

    2008年5月5日 上午 06:42
  • 錯誤訊息

    查詢運算式,"表單2.Field2  From 表單1 Inner Join 表單2 On 表單2.單據編號 =表單1.單據編號" 中的語法錯誤(少了運算元)

     

    他指出的錯誤是 "表單2.Field2  From 表單1 Inner Join 表單2 On 表單2.單據編號 =表單1.單據編號" 這一段

     

    註, 我的資料庫是Access的mdb

     

    2008年5月5日 上午 06:51
  •  

    如果我把 set 後面的句子括弧起來

     

     " SET (Field1 =表單2.Field2 )" 

     

    會出現錯誤訊息 update 陳述式的語法錯誤

     


     

    2008年5月5日 上午 06:56
  • Hi,

    剛剛測了一下,我用下面的方式,是沒有錯誤發生,這樣的方式您那邊跑會有錯誤嗎?

    Code Snippet

    UPDATE    TB2
    SET       TB2.TB2_COL1 = TB1.TB1_COL2
    WHERE    (TB1.TB1_COL2 = TB2.TB2_COL1) AND (TB2.TB2_COL1 <> 'TEST')

     

     

     

    2008年5月5日 上午 07:23
  •  bauann 兄:

     

    會不會跟MDB 版本有關係

    我的MDB 資料庫是從 VB 早期的版本 一直延用至今

     

    可能是 ACCESS 95 或 97 格式

     

    SQL 語法 是下在 VB6 裡面

     

    不同的資料庫格式應該支援的 SQL 語法 或有不同

    若是這原因, 我要如何 更新MDB 格式 到 新版本

     

     

     

    2008年5月5日 上午 08:18
  •  

    我檢查過 依據

    UPDATE    TB2
    SET       TB2.TB2_COL1 = TB1.TB1_COL2
    WHERE    (TB1.TB1_COL2 = TB2.TB2_COL1) AND (TB2.TB2_COL1 <> 'TEST')

     

    這個方式 下命令. 會得到 無直提供一個或多個必要參數的訊息

    這個訊息 依據過去的經驗往往是欄位名稱打錯了。

     

    我現在開始懷疑是資料物版本老舊的問題

     

     

     

     

     

     

    2008年5月5日 上午 08:20
  • Hi,

    抱歉,是我弄錯了,是沒有錯誤發生,不過他會把TB1.TB1_COL2當成是要輸入的參數;所以應該是我的問題,我再測試看看,抱歉。

     

    2008年5月5日 上午 08:40
  • Hi,

    您測看看這樣是否能夠符合需求

    Code Snippet

    UPDATE TB2   INNER JOIN TB1
    ON
             (TB2.TB2_COL2 = TB1.TB1_COL2 )
    SET
            TB2.TB2_COL1 = TB1.TB1_COL2
    Where
             (TB1.TB1_COL2 = TB2.TB2_COL1) AND (TB2.TB2_COL1<>'TEST');

     

     

    不行的話就殘念了..

    2008年5月5日 上午 09:08
  •  

    沒辦法了 ,我先用do loop回圈來處理

    不過效率很差就是了

     

    2008年5月6日 上午 02:28
  •  

    回圈也不行,說太多資料列被更新

     

    用批次更新,跑完後 等他更新又掛了,沒反應

     

    2008年5月6日 上午 10:40
  • 錯誤訊息是 : 索引鍵資料行資訊不足或不正確,太多資料列被更新所影響。

    2008年5月6日 上午 10:44
  • Dear chih.ching

     

    我開了一個Access 2000格式的mdb檔來測試,將上面程式碼做了一下修改,是可以動作的,您可以參考看看

    Code Snippet

    UPDATE TB1   INNER JOIN TB2
    ON
             (TB2.[單據編號] = TB1.[單據編號] )
    SET
            TB1.Filed1 = TB2.Filed2
    Where
            (TB1.Filed2<>'台北');

     

     

    2008年5月7日 上午 02:31
  • 好極了

    我等下測試後 再把結果回報

     

    感謝再感謝

    2008年5月7日 上午 02:36
  •  

    搞定了

     

    大大,我該請您吃飯

     

    真是謝謝了

     

    2008年5月7日 上午 04:31