2017-01-26 11 views
0

私はAccessデータベースでAllen Browne's concatenation macroを使用しています。私の主キーの中には一重引用符が含まれていることを除いて、うまくいきます。この二重引用符は、マクロに渡されるSQL文字列をスローし、引用符を含む行にアクセスエラー3075(演算子がありません)を取得します。ここでは出力の例です:。。アクセス連結マクロ内の二重引用符を置換する

route    cables 
1769    P006, P007 
1769    P008, P009 
4" DRILL   [blank] 

エラーが4" DRILLライン上で発生

私のマクロは、アレンの私のSQLと同じです:

SELECT tblVia_Routing.[route], 
ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """") AS cables 
FROM tblVia_Routing; 

上の任意のアドバイス私はSQLでREPLACEを試しましたが、動作させることができませんでした。

+0

を"、" tblVia_Routing "、" [route] = '"&[route]&"' ") –

+0

これは機能しました!素晴らしい、ありがとう。 –

+0

キーに一重引用符がある場合は、後で同じ問題が発生する可能性があります。 –

答えて

0

私はこのSQLを試すことができると思います:

SELECT tblVia_Routing.[route], 
replace(ConcatRelated("[cable]","tblVia_Routing","[route] = """ & [route] & """"),"""","""""") as cables 
FROM tblVia_Routing; 

Accessで、あなたが重複することによって、それらを逃れることができるので、あなたは、2重引用符で二重引用符を置き換えることができます。

+0

動作していないようです...クエリにデフォルトのExpr1001という特別なフィールドを追加します。 Expr1001の値は、二重引用符で囲まれた値を除くすべての値に対して-1です。また、同じエラー3075が発生します。 エラー3075メッセージには、問題のあるクエリ式が '[ルート] = "4"ドリル "' –

+0

@ハリーTと読み取られていると表示されています。はたらくはずです:置き換えは現在、ConcatRelated関数全体で行われます – kiks73

0

のアクセスは、文字列値を表現するために使用することができる2つのシンボル、単一引用符文字'Chr(39)と二重引用符"Chr(34)を持っています。

自分の価値観は今まで'が含まれている場合は、"とそれを囲むことができ、同様に自分の価値観だけで、これまで"が含まれている場合、あなたは'とそれを囲むことができます。

値に',"またはその両方が含まれている場合は、その一部をSQL文字列でエスケープし、エスケープ記号で囲む必要があります。

Access SQLで(単一または二重)引用符をエスケープするのは非常に簡単ですが、それを倍増するだけです。だから、

倍増し、動作するはずです以下のSQLを使用して"埋め込ま:

SELECT tblVia_Routing.[route], 
ConcatRelated("[cable]","tblVia_Routing","[route] = """ & Replace([route], """","""""") & """") AS cables 
FROM tblVia_Routing; 

または単一引用符使用してよりよい:たぶんConcatRelated(「[ケーブル] `として単一引用符を試してみてください

SELECT tblVia_Routing.[route], 
ConcatRelated("[cable]","tblVia_Routing","[route] = '" & Replace([route], "'","''") & "'") AS cables 
FROM tblVia_Routing; 
関連する問題