教えて!goo限定 1000名様に電子コミック1000円分が当たる!!

会社の売上げ伝票をMicrosoftAccessで作ったソフトを使っています。
消費税8%に変更する為、サーバーのアクセスファイルのデーターファイルのテーブルの数値を5%から8%に書き換えました。
すると県外の営業所からソフトを使用すると****(DB).mdbを開くか書き込むことができませんでした。とエラー3051となってしまいます。


エラーコード   :3051
エラーメッセージ ::ファイル '\\***.mdb' を開くか、書き込むことができませんでした。ほかのユーザーが排他的に開いているか、データ表示と書き込みを行う権限がありません。


今までは営業所からも普通に起動していました。

サーバーのアクセスファイルのデーターファイルのテーブルの数値を書き換えただけでこんなエラーがでるものなんでしょうか?
サーバーが置いてある本社では普通にソフトの使用も可能です。営業所からのみがエラーを排出します。

本社サーバーはWinXP Access2000
営業所 Win7 Access2007
サーバーへ繋ぐのは「どこでもLAN」を使用してます。

本社サーバーのアクセスファイルのデーターファイルのアクセス権限を見れば解決するでしょうか?
アクセスファイルのデーターファイルの数値を変更しただけで権限が変わってしまうものなのでしょうか?

難しい事はまったくわからないので原因と救済方法を簡単に教えて下さい。

伝票ソフトを作成した会社はもうありません。


本当は消費税のテーブルをレ点チェックではなく、5%・8%・10%と選べるようにした方が今後の対応にはなると思うのですがなるべくお金をかけたくなかったもので・・・・

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

本社がAccess2000なら、これかも?


Access ファイルを最適化すると NTFS アクセス許可がリセットされる
http://support.microsoft.com/default.aspx?scid=k …
(確かAccess2000では修正されなかったような?かすかな記憶です。間違いかも)
なので
>本社サーバーのアクセスファイルのデーターファイルのアクセス権限を見れば解決するでしょうか?
解決するかもしれません。
実際に診てみないことには何とも言えませんけど。

あと、
>テーブルの数値を5%から8%に書き換えました。
で過去のデータも反映されてしまった・・とか
消費税率変更前後での赤伝処理(購入時5%、返品時8%になってしまう)は
大丈夫なんでしょうかね?
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

本社は関西圏で私は九州です。本社の人間はすべてアナログ人間ばかりでリモートすら対応できないレベルなのでお恥ずかしいです。

教えて頂いたサポートを読んでこれのような気がします。
本社PCの対応は私が出張で行くか電話指示でやってみます。
出来ない時は本社近辺で今後のアフターが出来る業者を探すように指示を出しました。

私個人はAccessは簡単なデータベースぐらいは構築した事があるので理屈は少しわかっているつもりです。
原因はソフトのリレーションが壊れたとかそんなのではないと確信していたのでこんな質問を致しました。
年度末で多忙な時期ですので不安だったので、とてもわかりやすい返答に少し安心しました。
後はなんとかやってみます。

消費税導入前のデータは3/31で伝票をしめた時点で外にBackupして残すようにします。
赤伝処理があったとしても少しなので臨機応変に税理士と相談して対応致します。
最悪は紙バイタルで残せるので^^;

気が楽になりました。
ありがとうございました。

お礼日時:2014/03/20 12:24

>>サーバーのアクセスファイルのデーターファイルのテーブルの数値を書き換えただけでこんなエラーがでるものなんでしょうか?



質問者さんがごらんになったとおりですよ。素人が勝手に「こうなるだろう」と思っても現実は、しばしば外れるものです。

>>難しい事はまったくわからないので原因と救済方法を簡単に教えて下さい。
伝票ソフトを作成した会社はもうありません。

詳しい事が分からない人がいじってはまずいでしょう。
下手にいじると、トラブルになる部分ですので、分かっている方でも、簡単な対応はできないかもしれません。
とりあえず、質問者さんが責任者なら、アクセスに詳しい方を探して、その方にどうするのがいいか、検討をお願いしましょう。
場合によっては、「ソフト買い替えですね」という回答になるかもしれません。

>>本当は消費税のテーブルをレ点チェックではなく、5%・8%・10%と選べるようにした方が今後の対応にはなると思うのですがなるべくお金をかけたくなかったもので・・

その対応を怠ると、あとで余計な手間が発生すると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessでテーブル名やクエリ名一覧の抜き出し

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

・クエリを新規作成
・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング