実現したいこと
Access2016の単票フォームにデータを表示させ、「保存」ボタンを押下すると、新規レコードとして登録したいのですが、添付ファイルがエラーになって登録できませんでした。
添付ファイルはどのようにしたら良いのでしょうか?
よろしくお願い致します。
発生している問題・分からないこと
「顧客画像」が添付ファイルとなっています。
こちらがエラーで登録できない状態です。
「顧客画像」部分を削除すると登録できます。
該当のソースコード
Dim rst As New ADODB.Recordset rst.Open "顧客リスト", CurrentProject.Connection, , adLockOptimistic rst.AddNew rst!お名前 = Me!お名前 rst!電話番号 = Me!電話番号 rst!顧客画像 = Me!顧客画像 ←ここがエラー rst.Update rst.Close
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
下記を見つけましたが、実現したい事と異なり、応用もわからず困っていました。
Private Sub cmd保存_Click()
'[保存]ボタンクリック時
'商品写真フィールドのレコードセットに対する操作
With Me.Recordset!商品写真.Value
Do Until .EOF
If !FileName = Me!商品写真.FileName Then
'現在表示されている添付ファイルを保存
!FileData.SaveToFile "c:\Picture\data.jpg"
Exit Do
End If
.MoveNext
Loop
.Close
End With
End Sub
補足
特になし
> 単票フォームにデータを表示
・そのフォームは連結フォームであるか、それとも非連結フォームであるか。
・そのフォームが連結フォームである場合、そのフォームのレコードソースはどのテーブルであるか。
(テーブル[顧客リスト]とは別のテーブルなのであれば、そのテーブルの名前は何なのか)
とりあえず、以上の点について明記されることをお奨めします。
少なくとも、添付ファイルコントロールは添付ファイル型のフィールドと連結させなければ機能しないため、非連結フォームでは無理です。
ご回答ありがとうございます。
フォームは連結フォームとなります。
レコードソースと同じテーブル(顧客リスト)のデータを表示させて、同じテーブルに新規レコードとして登録したいです。
レコードセレクタで新規レコードを選ぶと、空白のフォームになるので、そこに以前のデータを表示させて編集し、登録ボタンを押すと新規レコードに登録になるように出来ればうれしいのですが。
添付ファイルが登録できない状態でした。
よろしくお願い致します。
非連結フォームという前提で回答しましたが(連結フォームなら、新規レコード登録は基本的にVBA不要なので)。
フォームの新規レコードにデータが表示できているなら、レコード移動やレコードセレクタをクリックなどのアクションを起こせば自動で登録できます。
> レコードセレクタで新規レコードを選ぶと、空白のフォームになるので、そこに以前のデータを表示させて編集し、登録ボタンを押すと新規レコードに登録になるように出来ればうれしいのですが。
連結フォームの新規レコードで表示できているデータをコマンドボタンで保存するなら、
DoCmd.RunCommand acCmdSaveRecord
の1行で可能です。
問題は、新規レコードに「以前のデータを表示させて」の部分です。
これをどのような操作で実現しているのでしょうか。
あるいは実現できていないなら、どのようなUIで実現するつもりでしょうか。
> レコードソースと同じテーブル(顧客リスト)のデータを表示させて、
> 同じテーブルに新規レコードとして登録
> レコードセレクタで新規レコードを選ぶと、空白のフォームになるので、
> そこに以前のデータを表示させて編集し、登録ボタンを押すと新規レコードに登録になる
フォームのカレントレコードが新規レコードなのであれば、
そのレコードに対する編集操作自体がテーブル[顧客リスト]に
新規レコードを挿入することと同義です。
その編集操作とは別に DAO.Recordset オブジェクトの
AddNew メソッドを実行する必要はありません。
なさりたいのは概ね「既存のレコードの内容を新規レコードに複写する
(主キーを除く全てのフィールドの値を出力する)こと」だと思われますが、
それを具体的にどのような状況下で実行することを想定されているかによって
対応は変わってくるでしょう。
・『フォームのカレントレコードが既存のレコードである状況』において、
[複写]というコマンドボタンをクリックしたら、カレントレコードと
同じ内容(主キーを除く)の新規レコード1件をテーブル[顧客リスト]に追加し、
追加保存されたレコードをフォームのカレントレコードにする。
・『フォームのカレントレコードが新規レコードである状況』において、
ユーザーが指定した任意の条件に該当するレコード1件をテーブル[顧客リスト]から参照し、
そのレコードの内容(主キーを除く)をフォームのカレントレコードの各フィールドに代入する。
主に以上のどちらに該当するのか、またテーブル[顧客リスト]に追加される
新規レコードの主キーの値をどのように設定されるつもりなのかについて明記して下さい。
(オートナンバー型のフィールドを主キーにしているのであれば、後者については無視して下さい)
新規レコードに任意のデータを表示する技術があれば良いのかもしれませんね。
レコードセレクタでデータを選択して、そのデータを修正してしまうと、あくまでレコードを修正するだけになってしまうので、修正したデータを新規レコードで登録したいのですが、何か方法はあるでしょうか?
sk.exeさん。まさにそのとおりです。
>・『フォームのカレントレコードが既存のレコードである状況』において、
> [複写]というコマンドボタンをクリックしたら、カレントレコードと
> 同じ内容(主キーを除く)の新規レコード1件をテーブル[顧客リスト]に追加し、
> 追加保存されたレコードをフォームのカレントレコードにする。
上記が実現したい内容です。
主キーはオートナンバー型になっており、それ以外のフィールドが複写できれば良いのですが。
回答3件
あなたの回答
tips
プレビュー