2

私はアクセスするのが非常に新しく(私は通常NavicatでMySQLiを使用します)、10桁のisbn番号を13桁に変換する必要があります。これを行うために関数を呼び出す次のクエリがあります(関数は作成しませんでしたが、機能し、他のクエリを実行するときに使用します)。

    SELECT ISBN1013([ISBN]) AS ISBN13, LastSoldDate AS LastSold, Id AS Sku, OnHand AS Quantity, Store 
FROM [Store Inventory]
WHERE (((ISBN1013([ISBN])) Like "##########?"));

実行しようとすると、最初はすべて正常に見えますが、次のようなエラーメッセージが表示されます。基準式のデータ型の不一致。私はこれをグーグルとここで調べようとしましたが、このエラーを説明するものは何も見つかりません。誰かが私を助けることができますか?

編集:ここでは、情報がどのように始まり、どのように見えるようになるかについてのサンプルを示します。

 0448431351 -> should end up as 9780448431352
 0736425543 -> should be 9780736425544
4

3 に答える 3

2

NZISBNフィールドの周りに関数を配置してみてください。

SELECT NZ(ISBN1013([ISBN]),"") AS ISBN13

これにより、null値が空の文字列に変換されます。

それがうまくいかない場合は、試してみてくださいCStr

SELECT CStr(ISBN1013([ISBN])) AS ISBN13

これにより、文字列以外の値が文字列に変換されます。null値がないとおっしゃっていたと思いますが、私の経験では、すべてのデータが期待される形式と一致していると思っても機能するものの1つです。

于 2012-08-06T14:13:51.100 に答える
1

問題をどれだけよく理解しているかはまだわかりませんが、そのWHERE句がないとエラーがなくなるとおっしゃっていたので、別のを試してみましょうWHERE

私の仮定:

  1. ISBN10個の数字で構成される行に対してクエリを実行する必要があります。また、10文字のISBN値にはすべて数字のみが含まれます。
  2. クエリISBNは、10桁の数字とそれに続く文字で構成されている場合、11文字の値の行でも機能する必要があります。

これらの仮定が正しい場合は、この(テストされていない)バージョンと同様のWHERE句を試してください。

WHERE
    Len(ISBN) = 10
    OR (
           Len(ISBN) = 11
           AND ISBN ALike "%[a-z]"
       )
于 2012-08-06T15:26:23.753 に答える
0

Accessは初めてだとおっしゃっていたので、HansUpsのコメントで明確にしたいと思いました。VBAモジュールのISBN1013()関数を見ることができますか?最初の行は次のようになります。

Function ISBN1013(ISBN as string) as string

この行が「文字列」で終わり、他のものではないことを確認できますか?

于 2012-08-06T15:26:24.893 に答える