[Access]VBAでストアドを実行したとき、レコードセットを返さない場合
SELECT文を使うストアドプロシージャをVBAで実行したのに、レコードセットを返さない場合があります。

原因は、ストアドプロシージャ内で
(1)INSERTもしくはUPDATE文
(2)SElECT文
の順に実行しているためです(私の場合)。

(1)INSERTもしくはUPDATEを実行した時点で、レコードセットはないと判断されてしまうらしい。

こういうときはストアドにSET NOCOUNT ONを記述しましょう。
位置は、INSERTもしくはUPDATE文の前でいいようです。

| Microsoft Office | 23:21 | comments (0) | trackback (0) |
[Access]データリンクプロパティで存在するはずのデータベースにつながらない時
会社で発生した問題の解決事例を上げます。

Accessとデータベースサーバ(SQL Server)の接続を行う場合、データリンクプロパティのダイアログボックスを開いて設定します。
この時、ネットワークにサーバは存在するのに、下記のようなエラーメッセージが出てつながらないことがあります。
プロバイダの初期化中にエラーが発生したため、接続のテストに失敗しました。[DBNETLIB][ConnectionOpen(Connect()).]SQL Serverが存在しないか、アクセスが拒否されました。

サーバの存在は確認できるけど、サーバ内のデータベースを選択できない、等。
自分の解決策を書きます。

<解決策>
(1)データリンクプロパティで「すべて」タブを選択
データリンクプロパティ

(2)「Network Library」に「DBMSSOCN」と書かれている場合、「値の編集」で空欄にする
DBMSSOCN

(3)「接続」タブに戻ると、データベースに接続可能になっている

<解説>
「Network Library」にはデータベースとの接続方法が設定されています。
上記の「dbmssocn」は「Winsock TCP/IP」を意味します。
参考:接続文字列の使用

しかし、特定せずに空欄のままにした方がいいこともあるようです。
Access2010で新規作成したADPには規定値で「DBMSSOCN」が入るようなので、作った時にここを外すのもいいかもしれません。
| Microsoft Office | 23:27 | comments (4) | trackback (0) |
「引数が間違った型、許容範囲外、または競合しています。」と出たら
Microsoft Accessを使ったアプリケーションを使った時、
「引数が間違った型、許容範囲外、または競合しています。」というエラーメッセージが出る事があります。


自分とは異なる環境で作られたAccessを起動すると、こうなるようです。
例えばwin7で作られたものをXPで起動するとか。

こういうケースの場合
(1)参照設定を一旦全てチェックを外し、OKボタンを押す
(2)再び外した設定にチェックをつける
でメッセージが出なくなり、無事に使えます。

全ての参照設定ではなく
「Microsoft ActiveX Data Objects x.x Library」か
「OLE Automation」のどちらかを外す→再設定でいいこともあります。

| Microsoft Office | 10:59 | comments (0) | trackback (0) |
Microsoft Office 2010 Service Pack 1はおすすめしません!
最近Windowsでアップデートできるようになった下記の2件ですが、おすすめしません。

Microsoft Office 2010 Service Pack 1 (32 ビット版): KB2510690
Microsoft Office 2010 Service Pack 1 (64 ビット版): KB2510690

私の職場でこれを行うと、Access2010が動かせなくなってしまいました!
これでは仕事になりません。

このアップデートは任意の更新なので、しばらく様子を見た方が良いでしょう。

※2011/11/16追記
シャットダウン時にうっかりインストールしてしまいましたが、やはりまだ障害が起こります。
フォームを開く際、パラメータを要求されることがあります。
まだバージョンアップは避けた方が賢明です。
| Microsoft Office | 00:26 | comments (0) | trackback (0) |
システム的なエラーメッセージをオリジナルのメッセージに変える
ルール違反となる操作をした際に出てくる既定のメッセージを、独自のエラーメッセージに置き換えてみます。
既定のメッセージとは、例えば下記のようなものです。

エラーメッセージの一例

「DELETEステートメントはREFERENCE制約"FK_外部キー名"と競合しています。
競合が発生したのは、データベース"データベース名"、テーブル"dbo.テーブル名"です。」

これは親子関係にあるテーブルのうち、子レコードを持つ親レコードを消そうとした際に表示されます。
言いたいことはわかるのですが、Windowsのダイアログと一緒で無味乾燥ですよね。
変更する方法は、下記が参考になります。

参考:http://www.accessclub.jp/samplefile/samplefile_75.htm

ポイントは余り使わないであろう Form_Error で処理を書くところですね。
削除ならForm_Beforedelconfirmでも良さげに思えますが、自分はうまくいかなかった。
| Microsoft Office | 23:58 | comments (0) | trackback (x) |
Mod関数のナゼ
剰余を求める時に使うMOD関数。

Excelのワークシート関数では
MOD ( 割られる数 , 割る数 )

VBAの関数では
割られる数 mod 割る数

で剰余が返ります。
同じMicrosoft社の製品なのに、なんで形式が違うんでしょう?

答えは、VBAとワークシート関数では生まれた時期が違うから、ということらしいです。
参考:http://kurokiline.yoka-yoka.jp/e162343.html

使う方としては面倒ですが、開発側の気持ちもわかります。
でも、やっぱり統一して欲しいのが本音。

ただ、今後Microsoftがそういう部分を直すかは疑問。
Office製品はどんどん安くなってますからね。
| Microsoft Office | 00:15 | comments (0) | trackback (0) |
ストアドプロシージャは実行されましたが レコードは返されませんでした
仕事上、Microsoft AccessとSQL Serverを連携させたアプリケーションをよく使います。
サーバマシン上のSQL Serverにデータやストアドプロシージャを保存し、
クライアントマシン上のAccessからそれらを呼び出すのです。

で、先日タイトルのようなエラーメッセージが出てしまいました。

ストアドの構成としては、
(1)あるテーブルにINSERT INTO文を実行
(2)そのテーブルのSELECT文を実行し、その結果を返す
なのですが、(1)まではうまくいっている模様。

調べてみると、(1)を実行した後に出てくる「xx件処理されました」というメッセージが問題らしい。

メッセージを非表示にするには「SET NOCOUNT ON」を使います。
これを(1)と(2)の間に置くと、エラーメッセージがでなくなりました。

参考:http://prg.seesaa.net/article/18297356.html
| Microsoft Office | 22:57 | comments (0) | trackback (0) |
クラスはオートメーションまたは予測したインターフェースをサポートしていません
Accessで「クラスはオートメーションまたは予測したインターフェースをサポートしていません」というメッセージが出た際には、解決策がいくつかあります。
いずれも、ソースの間違いではなくライブラリが破損しているので、直そうというものです。

(1)scrrun.dllを新しくする
scrrun.dllが古い可能性があるので、web上からダウンロードし、上書きします。
参考:http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_1343_2.html

(2)Microsoft MDACをインストール
参考:http://www.eases.jp/product/ukiuki/faq2.htm

(3)「プログラムと機能」でAccessを修復する
Accessがない場合はMicrosoft Office Professionalとかがあると思うので、それを修復しましょう。
プログラムと機能
私は3の方法で解決しました。

| Microsoft Office | 23:44 | comments (0) | trackback (0) |
オブジェクトの枠線(BorderWidth)小ネタ
<環境>
Microsoft Windows 7 Professional
Microsoft Access2010

レポートやフォームに設定するオブジェクトの枠線は、太さを
「細線,1,2,3,4,5,6」
の7段階で設定できます。
枠線

細線と1の太さは、印刷プレビューだと見た目ほとんど同じです。
印刷プレビュー

しかし、印刷してみると明らかに違います。
印刷
↑はPDFで出力し、一部をキャプチャしたものです。

必要に応じて使い分けましょう。

That's all!(そんだけ)


ちなみに、枠線の太さはVBAだとBorderWidthで設定します。

細線なら
フォームまたはレポート名.オブジェクト名.BorderWidth = 0

太さ1なら
フォームまたはレポート名.オブジェクト名.BorderWidth = 1
| Microsoft Office | 13:27 | comments (0) | trackback (0) |


  
CALENDAR
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31       
<<   03 - 2024   >>
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
CATEGORIES
ARCHIVES
COMMENTS
TRACBACK
PROFILE
OTHERS
POWERED BY
POWERED BY
ぶろぐん