みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

アクセスで重複と該当なしコードは入力不可にしたい

アクセス97で顧客管理をしています。
まだなかなか使いこなせないでいるところがあるのですが、どなたかわかりましたらよろしくお願いします。

テーブルAに1000件以上のレコードがあります。主なフィールドはコードと顧客名と住所などの情報です。そのテーブルにレコードを追加していくのに、フォームから行っています。フォームプロパティのデータ入力を「はい」に設定してるだけです。

ここで問題が2つあります。
(1)例えばフォームからコードを入力する際に、正しいコードであれば良いのですが、間違ったコードを入力してしまってもテーブルに追加されてしまうのです。今はその都度テーブルを開いてその行を削除しています。

正しいコードかコードでないかの判断はテーブルBに存在するコードによって決定します。テーブルBになければ全てエラーにしたいのです。

(2)コードが重複してもいけないのですが、テーブルAのコードのプロパティを重複なしにしているのですが、フォームに一度重複したコードを入力してしまうと、一度開いたフォームを強制終了しなければ先に進めません。

(1)においても(2)においても、例えばメッセージボックスが開いて「正しいコードを入力して下さい」のようなものが開いて、OKをクリックしたら、またコードの入力から始まるような方法はないものでしょうか?

ちなみにその顧客コードを入力したら、顧客名が自動的に開く下記VBAをフォームに組んでいます。

Private Sub 店番_AfterUpdate()
Me![名前] = DLookup("顧客名", "テーブルB", "顧客コード=" & Me![コード] & " ")
End Sub

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

投稿日時 - 2003-08-04 09:40:03

QNo.619151

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

どーも話の感じですと、ADOなどで接続はしていないようですね。
それ以外となると、クエリを作成してそれを呼び出す形という方法もあるでしょうが、処理速度と作る大変さからもADOなりDAOなりでDBに接続してSQLを投げるというプログラムを作ったほうが速くて簡単だと思います。

この辺のことは参考書なりで勉強してください。
ここではとても説明しきれませんので。

投稿日時 - 2003-08-05 10:56:53

お礼

ありがとうございました。何とか頑張ってみます。

投稿日時 - 2003-08-07 16:48:08

ANo.2

#1です。
もっと簡単に出来ますね。
カウントとってあげてそれを判断すれば良いと思います。
SQLを「SELECT Count(*) AS カウント数 FROM テーブルB WHERE コード=Text1;」にして

If rst!カウント数 = 0 Then
'データなし
Else
'データあり
End If

にしてあげればいいと思います。

投稿日時 - 2003-08-04 14:09:26

ANo.1

コード入力フォームに入力されたらテーブルBをそのコードを条件に見に行くSQLを作ってあげればよいと思います。
こんな感じでいいですか?

Private Sub 店番_AfterUpdate()
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSql As String
Dim i As Integer

Set cn = New ADODB.Connection
cn.ConnectionString = "接続するMDB"
cn.open

'SQLを作成し、CommandTextプロパティに代入
strSql = "SELECT * FROM テーブルB WHERE コード=Text1;"

'コマンド実行
Set rst = cn.Execute(strSql)
Do While Not rst.EOF
i = i + 1
rst.MoveNext
Loop
Debug.Print i
If i < 1 Then
MsgBox "コードがありません", vbCritical
'この後にテキストボックスをクリアしてセットフォーカス
'してあげたらよいでしょう。
Exit Sub
Else
'存在したら処理を走らせる
Me![名前] = DLookup("顧客名", "テーブルB", "顧客コード=" & Me![コード] & " ")
End If
rst.Close
cn.Close
Set rst = Nothing
Set cn = Nothing
End Sub

ざっと作っただけですので、これはあくまで参考に細かい部分は修正してやってみてください。

投稿日時 - 2003-08-04 11:18:46

お礼

早速のご回答ありがとうございます!

でも、ちょっと私のレベルではついていけないような・・・(^^;)
そのままコピーペーストさせていただいて、テーブルAとBを実際の名前に変更などしただけですが、コードを入力した後、リターンすると
Dim cn As New ADODB.Connection
においていきなりエラーが出てしまい、私では修正不可能です。

実際に行いたいのは、フォームで新規顧客コードを入力したい場合、テーブルBで既にそのコードを取得してからの作業になるのですが、
・テーブルBから顧客名を引き出す
・テーブルAと顧客コードが重複していたら何かメッセージを出してやり直しさせる。
・テーブルAにもBにも顧客コードがなければ何かメッセージを出してやり直しさせる。その際にそのエラーの顧客コードはテーブルに追加しない。

この3つを同時進行させる方法はありますでしょうか?
お忙しいところ申し訳ありません。何卒、よろしくお願いします。

投稿日時 - 2003-08-04 17:02:52

あなたにオススメの質問