2

私は主に Excel ユーザーであり、必要なときに技術/プログラミングの側面に手を出すだけです。したがって、これらすべてのデータ リンクに関しては、私が少し初心者であると想定してください。

多くの場合、Excel 2010 で、私は

  • データ -> 他のソースから... -> SQL Server から

これにより、データベース テーブルに接続できるようになりました。それが終わったら、次の場所に行くことができます

  • データ -> すべて更新 [V] -> 接続プロパティ... -> 定義タブ

コマンド タイプを SQL に変更します。そして、Microsoft SQL Server 2012 で使用しているのと同じ種類の SQL を貼り付けることができ、すべてが優れています。データベースに接続し、SQL コードに従って必要な情報を抽出し、必要なものを取得します。

しかし、別の Excel ワークブックへの別の接続があります。私は2つの方法で接続を作成しようとしました:

1) データ -> 他のソースから... -> Microsoft Query から -> Excel ファイル

2) データ -> Access から -> 次に、代わりに Excel ファイルを参照して選択します。

これらの方法はどちらも機能し、Excel ファイルへのリンクが表示されます。しかし、通常のように SQL クエリを編集しようとすると、どちらにも同じ問題があります。

[接続プロパティ...] -> [定義] タブ -> [コマンド タイプ] に移動すると、SQL と表示されます。次に、その下の [コマンド テキスト] ボックスに表示される SQL コードを編集します。

私の問題は、SQL Server メソッドを使用して実行したときに認識できた構文が、SQL で認識されなくなったことです。例えば:

  • -- または /* ... */ 構文を使用してコメントを入力しようとすると、次のエラーが表示されます。 [Microsoft][ODBC Excel Driver] Invalid SQL Statement; 「DELETE」、「INSERT」、「PROCEDURE」、「SELECT」、または「UPDATE」が必要です。
  • CURRENT_TIMESTAMP AS [Refresh Date] という列を追加しようとすると、[Microsoft][ODBC Excel Driver] パラメータが少なすぎます。予想 1.

現在、SQL コードは非常に単純です。

SELECT
[ID],
[Gift]
FROM
    [Data$]
WHERE
    [Gift] <> ''
    AND
    [Gift] <> 'Not a Gift'
    AND
    [ID] <> ''

必要なのは、[更新日] と呼ばれる ID とギフトの横にある 3 番目の列だけです。これは次のようになると思いました:

SELECT
[ID],
[Gift],
CURRENT_TIMESTAMP AS [Refresh Date]

しかし、それは上記のようには機能しません。

使用する接続方法によって、接続の種類が異なることに気付きました。Excel ファイルの場合は「データベース クエリ」、アクセス方法の場合は「Excel ファイル」、SQL Server の場合は OLE DB クエリです。それが、使用できる SQL 言語に影響するかどうかはわかりません。接続文字列もメソッドごとにまったく異なりますが、それが基本的な SQL コマンド以外を使用できない理由に関連しているかどうかはわかりません。

実際の目的は、(a)誰かが Data -> Refresh All を実行してリフレッシュしたときに日付を入れ、(b)リフレッシュした場合はその日付を入れないExcelのセルを取得できるようにすることです。そのテーブルでは失敗します。最も簡単な方法は、現在の日付でテーブルに列を作成することだと思いましたが、SQL の制限によりそれが停止するのでしょうか?

SQL サーバー リンクの場合のように、SQL により多くの機能を追加する方法はありますか? または、回避策として、おそらくVBAを介して、テーブルが正常に更新されたかどうかを取得する他の方法があります。そのため、実際に正常に更新された場合、VBAを使用してセルに今日の日付を別の場所に書き込むことができます(私はすでに私のために Data->RefreshAll を実行する VBA)?

前もって感謝します!

4

1 に答える 1

1

使用している SQL のフレーバーは、MS SQL の T-SQL よりも Access DAO SQL に近いものです。CURRENT_TIMESTAMPオプションとしてはありませんがNow()、代替として利用できるはずです。

SELECT
[ID],
[Gift],
Now() AS [Refresh Date]
于 2015-12-15T06:01:13.960 に答える