Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No18384.数字の先頭に0をつける方法

タイトル数字の先頭に0をつける方法
記事No: 18384
投稿日: 2004/04/25(Sun) 20:08
投稿者: こぶー
OS:WindowsXP
Access Version:AC2000
■表形式(列数:2、項目:番号、名前)のフォームに対し、番号を頭0埋めで表示/登録したい。
どうしても入力規則を使わずに入力させたいので頭に0をつけずに入力し
書式に00000000などといれたのですが変化しませんでした。

そこで以下のように追加したところ
 実行時エラー’2115’:
 ”BeforeUpdate/更新前処理”プロパティまたはこのフィールドの
 ”ValidationRule/入力規則”プロパティに設定したマクロまたは関数のために、
 このフィールドのデータを保存できません。
というエラーが出てしまいます。

番号_beforeUpdate(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim rstnew As New ADODB.Recordset
Dim ilen As Integer

Set cn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "W1", cn, adOpenStatic, adLockReadOnly
rst.Find "番号 = '" & Format(Me!番号, "00000000") & "'"
If rst.EOF Then
'データを追加
rstnew.Open "W1", Application.CurrentProject.Connection _
, adOpenKeyset, adLockOptimistic
rstnew.AddNew
rstnew!番号 = Format(Me!番号, "00000000")
rstnew.Update
Me.Refresh ←ここです。
Else
MsgBox "重複データあり"
ilen = Len(Me!番号)
Me!番号.SelStart = 0
Me!番号.SelLength = ilen
End If
※使用テーブル
W1は番号(String)のみのテーブルです。

問題の部分をはずし、実行すると
入力イメージ>>
番号(入力)   名前(マスタより表示)
00000001 名称1

結果イメージ>>
番号       名前
00000001 名称1
00000002 名称2
W1の現在の結果>>
00000001
00000002
2       ←不要!

といった感じです。
ならば、とMe!番号 = Format(Me!番号, "0000")をこのロジックの頭に
記述してみたのですが、その箇所で同じエラーがでてしまいました。
 記述すべき箇所がちがうのでしょうか?
入力値(1桁〜8桁)を8桁でフォーマットし、一覧/テーブルに反映する方法がありましたら
教えてください。よろしくお願いします。

タイトルRe: 頭0編集で表示・登録できますか?
記事No: 18385
投稿日: 2004/04/25(Sun) 20:52
投稿者: hatena
> ■表形式(列数:2、項目:番号、名前)のフォームに対し、番号を頭0埋めで表示/登録したい。
> どうしても入力規則を使わずに入力させたいので頭に0をつけずに入力し
> 書式に00000000などといれたのですが変化しませんでした。

書式プロパティでできるはずです。
番号フィールドのデータ型は、数値型になってますか。

タイトルRe^2: 頭0編集で表示・登録できますか?
記事No: 18386
投稿日: 2004/04/26(Mon) 00:23
投稿者: Tkwan
>>頭に0をつけずに入力し書式に00000000などといれたのですが変化しませんでした。

番号フィールドはStringなので書式設定しても意味がありません。
これが効くのは数値型です。

>>”BeforeUpdate/更新前処理”プロパティまたはこのフィールドの
>>”ValidationRule/入力規則”プロパティに設定したマクロまたは関数のために、
>>このフィールドのデータを保存できません。
>>というエラーが出てしまいます。

文字通りそういうことではないのでしょうか?

それともう一点今後の参考のために、

>rstnew.Open "W1", Application.CurrentProject.Connection _
>, adOpenKeyset, adLockOptimistic
>rstnew.AddNew
>rstnew!番号 = Format(Me!番号, "00000000")
>rstnew.Update
>Me.Refresh ←ここです。

ここは

rst.Addnew
rst!番号=Format(Me!番号, "00000000")
rst.Update
です。
W1を2回も開く必要は有りません。

タイトルRe^3: 頭0編集で表示・登録できますか?
記事No: 18412
投稿日: 2004/04/27(Tue) 00:00
投稿者: こぶー
> 番号フィールドはStringなので書式設定しても意味がありません。
> これが効くのは数値型です。
W1テーブルの項目を数値型、書式00000000、主キー指定にしました。
これでいけました。

Tkwan 様、hatena 様 教えていただきありがとうございました。
まだまだ、調べ方も記述の仕方もムダが多いので
日々がんばってステップアップしていこうと思います。
これからもどうぞよろしくおねがいします。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

cPanel管理者用コンパネWHMの操作管理手順を発信しています。
cPanel管理者用コンパネ「WHM」の操作管理手順を発信中・・・。

 

ページの先頭へ 前ページへ戻る