質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

3599閲覧

ACCESSのSetFocus、型変換、SELECTした値の表示について。

makino

総合スコア32

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/03/16 12:45

ACCESSについての質問です。3つあります。

1.SetFocusについて
コンボボックスで値を選択し、エンターキーを押した時に入力チェックをし、
エラーであれば再度、同じコンボボックスをフォーカスしたいと思っています。

ACCESS

1Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer) 2 3 If KeyCode <> vbKeyReturn Or vbKeyTab Then 4 KeyCode = 0 5 6 'Enter押下時のチェック処理 7 ElseIf KeyCode = vbKeyReturn Then 8 9 If コンボ = 0 Then 10 MsgBox "エラー" 11 コンボ.SetFocus 12 End If 13 End If 14End Sub

例えば上記のようなコードを書いたのですが、普通に次のフィールドに移ります。
どうすればその場にカーソルが留まりますでしょうか?

2.Date型から数値型への変換について
テキストボックスに、初期値でyyyy/mm/ddの形式で現在時刻を表示し、
カーソルがあったら8桁の数字を表示。離れたら再度yyyy/mm/ddにしたいと考えてます。

ACCESS

1Private Sub 日時_Click() 2 3Me.日時 = Format(Me.日時, "00000000") '1 4Me.日時 = Format(Me.日時, "yyyymmdd") '2 5 6End Sub 7

'1の場合は、2017/03/16が、05332321みたいに変な値に…
'2の場合は、オーバーライドした、とのエラーが発生します。

どうしたら、2017/03/16が、20170316のように変換されますでしょうか。

3.SQLで取得した値を画面に表示する場合(コードの記述で)

ACCESS

1 Dim cn As ADODB.Connection 2 Dim rs As ADODB.Recordset 3 Dim mySQL As String 4 5 Set cn = CurrentProject.Connection 6 Set rs = New ADODB.Recordset 7 8 mySQL = "SELECT mojiB FROM TableA WHERE moji = '" & コンボ.Value & "';" 9 rs.Open mySQL, cn 10 テキストA = rs!mojiB 11 Exit Sub

上記のようなコードを記述して、テキストAにTableAから抽出したmojiBを表示したいのですが、表示されません。
こちらもどうしたらよいのか教えて頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

###1.SetFocusについて

入力チェックは、通常は更新前処理のイベントで行います。
現状のコードだとエンターキーを押したときのみ入力チェックを行うようですが、
それでいいのでしょうか。
エンターキー以外のキー(矢印キーなど)やマウスクリックでフォーカス移動したときは、入力チェックせずに確定されてしまいますが。

もし、それでいいということなら、

VB

1 'Enter押下時のチェック処理 2 ElseIf KeyCode = vbKeyReturn Then 3 4 If Me.コンボ = 0 Then 5 KeyCode = 0 6 MsgBox "エラー" 7 End If 8 End If

とすればエンターキーの入力をキャンセルできるので、カーソルは留まります。
KeyCode = 0 がキー入力のキャンセルです。

ちなみに、エンターキー以外でも入力チェックを行いたい場合は、

VB

1Private Sub コンボ_BeforeUpdate(Cancel As Integer) 2 If Me.コンボ = 0 Then 3 Cancel = True 4 MsgBox "エラー" 5 End If 6End Sub

Cancel = True で更新イベントがキャンセルされ、カーソルは留まります。

###2.Date型から数値型への変換について

このテキストボックスは連結コントロールですか、非連結コントロールですか。
連結コントロールなら連結しているフィールドのデータ型はなんですか(数値型 or 日付/時刻型)

連結コントロールで、連結しているフィールドが数値型ということなら、
書式プロパティを、

0000/00/00

と設定するだけで希望の結果になります。
非連結でも同様の設定でOKです。
VBAは必要ありません。

###3.SQLで取得した値を画面に表示する場合(コードの記述で)

コード自体は問題ないです。

SQLが正しくないか、条件に合致するレコードがないかのどちらかではないですか。

VB

1 Debug.Print mySQL 'SQLが正しいか確認 2 rs.Open mySQL, cn 3 Debug.Print rs.RecordCount 'レコード件数の確認

というようにデバッグコードを挿入してイミディエイトウィンドウで結果を確認してみてください。

投稿2017/03/16 14:37

編集2017/03/16 14:44
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makino

2017/03/21 14:54

3つとも解答、しかもアドバイスまで頂いてありがとうございました!! 1はCancel = Trueを使うことにしました。 他2つも問題なく動くようになったので大感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問