Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2232 / 2272 ツリー ←次へ | 前へ→

【3277】文字の検索 べる 04/8/19(木) 12:23 質問[未読]
【3282】Re:文字の検索 こもれび 04/8/19(木) 19:06 発言[未読]
【3283】Re:文字の検索 べる 04/8/19(木) 19:47 質問[未読]
【3294】Re:文字の検索 こもれび 04/8/22(日) 11:24 回答[未読]
【3295】Re:文字の検索 こもれび 04/8/22(日) 18:27 回答[未読]
【3296】Re:文字の検索 こもれび 04/8/22(日) 19:08 回答[未読]
【3335】Re:文字の検索 べる 04/8/26(木) 12:28 お礼[未読]

【3277】文字の検索
質問  べる  - 04/8/19(木) 12:23 -

引用なし
パスワード
   初心者の為、簡単な質問で申し訳ございません。
まず、禁則文字のマスターテーブルを作成して、
あるフィールドに入力された文字に対して、
その文字マスターの登録と一字でも合致したら、
エラーメッセージを表示するようなものを作成したいのですが
可能なのでしょうか。
どなたか教えていただけますでしょうか。
よろしくお願いいたします。

【3282】Re:文字の検索
発言  こもれび  - 04/8/19(木) 19:06 -

引用なし
パスワード
   こんにちは

「フィールド」はフォームに設けられたテキストボックスを指されているのでしょうか?
また、フィールドがテキストボックスだと仮定してユーザーさんが入力を完了して
その次の操作、例えばコマンドボタンをクリックしたときやフォーカスが次の
オブジェクトに移動したときにエラーメッセージを出力すればよいのでしょうか?

エラーメッセージを表示するタイミングはもうひとつあり、文字を入力している
途中ということも考えられるのですが今回の出力方法はどちらなのかを教えてください。

私がちょっと考えたのは「フィールド」という言葉はテーブルの列名を指すものなので
テーブル直入力でエラーメッセージを出力するのかな??と考えてしまいました。
テーブル直入力ではないですよね・・・(^^; (だったりして)

>可能なのでしょうか。
可能です。
あとの問題は、上に書きましたメッセージを出力するタイミングです。
アプリケーションを使用するユーザーさんの立場で考えますと、
テキストボックスに文字を入れている途中で何らかのメッセージが
出力されると結構びっくりされます。
私が考えるところは、ひとつの入力が終わった瞬間(After update)が
よいのではないかなというところです。

ところで「禁則文字」どれくらいあるのですか?

【3283】Re:文字の検索
質問  べる  - 04/8/19(木) 19:47 -

引用なし
パスワード
   ▼こもれび さん:

こんにちは、
混合文字の節はありがとうございました。
また、問題が出てしまいました。
ご教授の程、よろしくお願いいたします。

>「フィールド」はフォームに設けられたテキストボックスを指されているのでしょうか?

その通りです。
単語の使い方が悪くて申し訳ありません。

>また、フィールドがテキストボックスだと仮定してユーザーさんが入力を完了して
>その次の操作、例えばコマンドボタンをクリックしたときやフォーカスが次の
>オブジェクトに移動したときにエラーメッセージを出力すればよいのでしょうか?
>
>エラーメッセージを表示するタイミングはもうひとつあり、文字を入力している
>途中ということも考えられるのですが今回の出力方法はどちらなのかを教えてください。

他の項目も同時にチェックするようになっているため、できましたら、
コマンドボタンをクリックした時にメッセージを出したいです。


>
>私がちょっと考えたのは「フィールド」という言葉はテーブルの列名を指すものなので
>テーブル直入力でエラーメッセージを出力するのかな??と考えてしまいました。
>テーブル直入力ではないですよね・・・(^^; (だったりして)

申し訳ありません、フォームのテキストボックスのことでした。。。


>ところで「禁則文字」どれくらいあるのですか?

40〜50程となります。

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

【3294】Re:文字の検索
回答  こもれび  - 04/8/22(日) 11:24 -

引用なし
パスワード
   お待たせしました 

次のソースコードは次の条件で作成されています。

フォーム上に1個のテキストボックスと1個のコマンドボタンを配していますが、
ソースコードの改変により、複数のテキストボックスと1個のコマンドボタン
というフォームにも対応します。
禁則文字は何文字でも対応します。


○ フォームのソースコード

---- その1 フォームで共通で使用する変数の宣言 ----

Option Compare Database
  Dim Detdata As Byte 

---- その2 コマンドボタンのイベントプロシージャ ----

Private Sub CmdOutput_Click()
  
  If Detdata > 0 Then
   If Detdata And 1 Then
    MsgBox "禁則文字があります", vbOKOnly + vbExclamation, "禁則検査"
   End If
  
  Else
   MsgBox "禁則文字はありませんでした", , "禁則検査"
  
  End If
  Detdata = 0

End Sub

---- その3 テキストボックスのイベントプロシージャ ----

Private Sub TxtStr_AfterUpdate()
  
  Dim StrDetData As Boolean

  StrDetData = KinsokuDet(Me!txtstr.Value)
   
   Select Case StrDetData
    Case True
     Detdata = Detdata Or 1
    Case False
    
   End Select

End Sub

---- その4 標準モジュールに作成する関数 ----

Public Function KinsokuDet(KensaStr) As Boolean
  
  Dim i As Integer
  Dim j As Integer
  Dim h1 As String
  Dim KensaData As String
  Dim SQL01 As String
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset

  Set cn = CurrentProject.Connection

  SQL01 = "SELECT * FROM T_KINSOKU;"
  rs.Open SQL01, cn, adOpenKeyset, adLockReadOnly
  KinsokuDet = False
  KensaData = KensaStr
  KensaData = Trim(KensaData)

  i = Len(KensaData)
  j = 1
  Do Until j > i
   h1 = Mid(KensaData, j, 1)
   rs.MoveFirst
   Do Until rs.EOF
    If h1 = rs!Data Then
     KinsokuDet = True
    End If
    rs.MoveNext
   Loop
   j = j + 1
  Loop
  
  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing

End Function


---- 禁則文字テーブル 「T_KINSOKU」----

id  data
1   !
2   @
3   #
4   $
5   %
・  ・
・  ・
・  ・

【3295】Re:文字の検索
回答  こもれび  - 04/8/22(日) 18:27 -

引用なし
パスワード
   こもれび です

「その4」 のソースコードは次のものと差し替えてください
(少し高速化しました)

Public Function KinsokuDet(KensaStr) As Boolean
  
  Dim i As Integer
  Dim j As Integer
  Dim h1 As String
  Dim KensaData As String
  Dim SQL01 As String
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset

  Set cn = CurrentProject.Connection

  SQL01 = "SELECT * FROM T_KINSOKU;"
  rs.Open SQL01, cn, adOpenKeyset, adLockReadOnly
  KinsokuDet = False
  KensaData = KensaStr
  KensaData = Trim(KensaData)

  i = Len(KensaData)
  j = 1
  Do Until j > i Or KinsokuDet = True
   h1 = Mid(KensaData, j, 1)
   rs.MoveFirst
   Do Until rs.EOF
    If h1 = rs!Data Then
     KinsokuDet = True
     Exit Do
    End If
    rs.MoveNext
   Loop
   j = j + 1
  Loop

  rs.Close: Set rs = Nothing
  cn.Close: Set cn = Nothing

End Function

【3296】Re:文字の検索
回答  こもれび  - 04/8/22(日) 19:08 -

引用なし
パスワード
   こもれび です

ごめんなさい、その2とその3のソースコードにも問題がありました。

お手数ですが、差し替えてください。

---- その2 ----

Private Sub CmdOutput_Click()
  
  If Detdata > 0 Then
   If Detdata And 1 Then
    MsgBox "禁則文字があります", vbOKOnly + vbExclamation, "禁則検査"
   End If
  
  Else
   MsgBox "禁則文字はありませんでした", , "禁則検査"
  
  End If


End Sub

---- その3 ----

Private Sub TxtStr_AfterUpdate()
  
  Dim StrDetData As Boolean
  
  Detdata = 0

  StrDetData = KinsokuDet(Me!txtstr.Value)
   
   Select Case StrDetData
    Case True
     Detdata = Detdata Or 1
    Case False
    
   End Select

End Sub

【3335】Re:文字の検索
お礼  べる  - 04/8/26(木) 12:28 -

引用なし
パスワード
   ▼こもれび 様:

お返事が遅くなりまして、申し訳ございませんでした。
先週末から別件の作業でワタワタしていた為、現作業が滞ってました。
早速、ご連絡いただきましたソースで試してみます。
本当にありがとうございました。

2232 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078325
(SS)C-BOARD v3.8 is Free