Access VBA質問箱 IV

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

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


284 / 500 ページ ←次へ | 前へ→

【7548】Re:サブフォームの行
回答  Gin_II  - 06/3/17(金) 8:38 -

引用なし
パスワード
   >テーブルにODBCでサーバー接続する場合はどのように書けばいいですか?

リンクテーブルにしているのなら、同じだと思います。
追加クエリをクエリのデザインビューで作成して、実行できませんか?
・ツリー全体表示

【7546】Re:AccessVBAで質問です
お礼  snow-hat  - 06/3/16(木) 19:10 -

引用なし
パスワード
   小僧 さん:

お返事およびご指摘頂きありがとうございます。
基本方針を良く読まず投稿しておりました。
大変申し訳ございませんでした。

最初はRunSQLやADOを使って考えていたのですがもっと簡単な方法があることに気づき解決が出来ました。

テーブルはひとつにし、フォームにはチェックの入っていないレコードを表示、
フォームBにはチェックの入ったレコードを表示するようにクエリを作成してやれば解決出来ることがわかりました。
何もテーブルを分ける必要は無かったのですね・・。
知識不足と非柔軟な考えの為にとんだお騒がせを致しまして申し訳御座いませんでした。

お忙しい中、貴重なご意見を頂きましてありがとうございました。
・ツリー全体表示

【7545】Re:(^^;)
発言  たん  - 06/3/16(木) 16:25 -

引用なし
パスワード
   WMF→EMF

# 打ち間違い(^^;)

さすが、知識の宝庫ですね>YU-TANGさん

# 毎度のことながら感心します。
・ツリー全体表示

【7544】Re:(^^;)
発言  たん  - 06/3/16(木) 16:22 -

引用なし
パスワード
   ># イメージコントロールだったら、mougで過去に話題がありました。そういえば。
># 個人的にはファイル残していますが、
># 「イメージコントロールから、画像ファイルへ出力する方法は」という題ですね。

あ、でも、イメージコントロールだと、埋め込まれた時点で、WMF形式に変換されている
ので、厳密には、「ファイル形式のまま」ではないのか。残念。

という事でイメージコントロールの話は忘れて下さい。
・ツリー全体表示

【7543】Re:案
発言  YU-TANG WEB  - 06/3/16(木) 16:20 -

引用なし
パスワード
   ども。

▼たん さん:
># イメージコントロールだったら、mougで過去に話題がありました。そういえば。
># 個人的にはファイル残していますが、
># 「イメージコントロールから、画像ファイルへ出力する方法は」という題ですね。
># ネットでどっかにキャッシュとして残っていればラッキーかな。
># (1年以上前のシロモノなので。)

2 年半ほど前のシロモノで良かったら、ここにもあったりして。

http://x7net.com/~access/AcTipsUnDocumentedSysCmd.html#712

それでは。
・ツリー全体表示

【7542】Re:一旦アクセスに取り込んだ写真のエクス...
発言  YU-TANG WEB  - 06/3/16(木) 16:15 -

引用なし
パスワード
   こんにちは、YU-TANG です。

▼o さん:
>OLEオブジェクトです。
>
>やはり無理なのですね・・・。

もし時間が有れば、一度格納されているバイナリデータをダンプして、
解析してみるといいです。
通常 GIF や JPEG は EMF に変換され、これに OLE ヘッダーが付いた形で
格納されているはずです(私の経験則的には、ですが)。
OLE ヘッダー構造体の仕様は OLE サーバーごとに異なっていて、原則
非公開ですが、EMF のフォーマットの方は公開されているので、差分を
探せば OLE ヘッダーを取り除く方法を編み出せるかもしれません。
OLE ヘッダーさえ取り除ければ、EMF ファイルとしてであれば復元できる
ので、そこから別の画像形式へ変換することも可能になるでしょう。

私が知る限り、この方法を公開した人はまだ誰もいないはずです。

私は何年も前からヒマになったらダンプして解析しようと思っているの
ですが、幸か不幸かそこまでの時間が取れなくてやっていません。
相当大変な作業になる可能性が高いですが、誰かがやってくれたら有り難い
話ではあるので、もし意欲があればぜひチャレンジしてみてください。

それでは。
・ツリー全体表示

【7541】Re:案
発言  たん  - 06/3/16(木) 16:14 -

引用なし
パスワード
   YU-TANGさんの明快な回答が出たので、別な案をば。

手動でよければ、

1.OLEオブジェクトを含むフォームを作成。
2.1のフォームを開く。
3.画像が表示されていれば、OLEコントロール上で右クリックで
 編集で、その画像データを表示させるソフトを開いて、ファイルとして
 保存しなおす。
4.次レコードに移動し、1〜3を繰り返す。

# イメージコントロールだったら、mougで過去に話題がありました。そういえば。
# 個人的にはファイル残していますが、
# 「イメージコントロールから、画像ファイルへ出力する方法は」という題ですね。
# ネットでどっかにキャッシュとして残っていればラッキーかな。
# (1年以上前のシロモノなので。)
・ツリー全体表示

【7540】Re:一旦アクセスに取り込んだ写真のエクス...
お礼  o  - 06/3/16(木) 15:56 -

引用なし
パスワード
   >エラー以前の話として、BMP はともかく GIF や JPEG の復元はほぼ不可能
>です。
>私の記事でも例は BMP に限定しています。
>
>ただ例外的に、OLE オブジェクトではなくファイルそのものを格納している
>場合は、そのまま書き出せば復元されます。
>まず、現状どちらの形式で格納されているのか明らかにしてください。
>OLE オブジェクトであれば、試すだけ無駄ですので。

OLEオブジェクトです。

やはり無理なのですね・・・。

わかりました。

ありがとうございました。
・ツリー全体表示

【7539】Re:一旦アクセスに取り込んだ写真のエクス...
発言  o  - 06/3/16(木) 15:54 -

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

何度も申し訳ないです。

先ほどのエラーは以下の追加箇所と変更箇所(**で囲ってあります)で

解決しました。

ただ、実行してもエラーは出ないのですがファイルサイズはいつまでたっても

0のままで砂時計になります。

やはり元の形式(アクセスに取り込むファイル)がjpegで

このプログラムはbmp形式だからでしょうか。

とりあえず途中報告です。

データが重いだけかもしれませんのでもう少し様子を見ます。


Function DWriteChunk(fieldname As String, _
    tablename As String, _
    filename As String, _
    Optional criteria As String, _
    Optional ByVal offset As Long, _
    Optional ByVal numbytes As Long) As String
On Error GoTo ErrorHandler
  ' 定数/変数宣言部
  Const ERR_INVARID_DATA_TYPE = 3259
  Dim rs     As DAO.Recordset
  Dim strSQL   As String
  Dim varChunk  As Variant
  Dim abytChunk() As Byte
  Dim FileNo   As Integer
  Dim strConnect As String
  Dim db As DAO.Database

***********************************************************
*****************追記箇所**********************************
***********************************************************
  
  '-- ODBC 接続文字列の指定
  strConnect = "ODBC;Driver={SQL Server};Server=sgw9920sv4;" & _
         "Database=資産管理SQL;UID=hoken;PWD=hoken;"
  
  '-- 接続文字列を使用して SQL Server に接続する
  Set db = DBEngine.OpenDatabase("", False, False, strConnect)
  
***********************************************************
*****************追記箇所終了******************************
***********************************************************
  
  ' 変数を初期化します。
  FileNo = FreeFile
  strSQL = "Select " & fieldname & " From " & tablename
  If (LenB(criteria) <> 0) Then strSQL = strSQL & " Where " & criteria
  strSQL = strSQL & ";"
  ' ファイルとレコードセットを開きます。
  Open filename For Binary As #FileNo

***********************************************************
*****************変更箇所**********************************
***********************************************************

'  Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)

***********************************************************
*****************追記箇所終了******************************
***********************************************************

  ' データ型をチェックします。
  Select Case rs(0).Type
    Case dbLongBinary, dbMemo
      ' OK
    Case Else
      Err.Raise ERR_INVARID_DATA_TYPE
    End Select
  ' データをファイルに書き込みます。
  With rs
    If (numbytes = 0) Then numbytes = .Fields(fieldname).FieldSize
    varChunk = .Fields(fieldname).GetChunk(offset, numbytes)
    abytChunk = varChunk
    Put #FileNo, , abytChunk
  End With
  
ExitProcedure:
On Error Resume Next
  Close #FileNo
  rs.Close: Set rs = Nothing
  Exit Function

ErrorHandler:
  DWriteChunk = Err.Number & ":" & vbCrLf & Err.Description
  Resume ExitProcedure
End Function

Private Sub コマンド26_Click()
  Const BMP_OFFSET = 87
  Dim strResp As String
  strResp = DWriteChunk( _
    "写真", _
    "T_購入_写真", _
    "C:\" & "テスト.bmp", _
    "[管理No.]=0000000001-001", _
    BMP_OFFSET)
  If (LenB(strResp) = 0) Then strResp = "完了"
  MsgBox strResp
End Sub
・ツリー全体表示

【7538】Re:一旦アクセスに取り込んだ写真のエクス...
発言  YU-TANG WEB  - 06/3/16(木) 15:37 -

引用なし
パスワード
   こんにちは、YU-TANG です。

エラー以前の話として、BMP はともかく GIF や JPEG の復元はほぼ不可能
です。
私の記事でも例は BMP に限定しています。

ただ例外的に、OLE オブジェクトではなくファイルそのものを格納している
場合は、そのまま書き出せば復元されます。
まず、現状どちらの形式で格納されているのか明らかにしてください。
OLE オブジェクトであれば、試すだけ無駄ですので。

# 昔のコードは見たくないね。戻り値が空文字列って、我ながらどういう
# 仕様だろ。
・ツリー全体表示

【7537】Re:一旦アクセスに取り込んだ写真のエクス...
回答  o  - 06/3/16(木) 15:27 -

引用なし
パスワード
   ▼たん さん:
>>ですのでエラーの場所はプログラム内に記入しておりますので
>>読んでください。
>
>ちょっと、わかりにくい。
>(まあ、細かく見てなかったこっちも悪いのですが。)
>
>DAOで処理しているなら、DAOの参照設定をしていますか?。

いえ、こちらこそ申し訳ないです。

見やすく☆にしたつもりなのですが・・・。

やはり掲示板などは会って話すより表現が難しいですね。

ちなみにDAOの参照設定はしております。
・ツリー全体表示

【7536】Re:一旦アクセスに取り込んだ写真のエクス...
回答  たん  - 06/3/16(木) 15:23 -

引用なし
パスワード
   >ですのでエラーの場所はプログラム内に記入しておりますので
>読んでください。

ちょっと、わかりにくい。
(まあ、細かく見てなかったこっちも悪いのですが。)

DAOで処理しているなら、DAOの参照設定をしていますか?。
・ツリー全体表示

【7535】Re:一旦アクセスに取り込んだ写真のエクス...
回答  o  - 06/3/16(木) 14:59 -

引用なし
パスワード
   ▼たん さん:

>>エラー番号は91で「オブジェクト変数またはWithブロック変数が
>>設定されていません」とでます。
>
>「なぜでしょう」と聞かれても、エラーの出た場所を知っているのは
>質問者だけです。

ですのでエラーの場所はプログラム内に記入しておりますので

読んでください。
・ツリー全体表示

【7534】Re:一旦アクセスに取り込んだ写真のエクス...
発言  たん  - 06/3/16(木) 14:43 -

引用なし
パスワード
   横から失礼。

>エラー番号は91で「オブジェクト変数またはWithブロック変数が
>設定されていません」とでます。

「なぜでしょう」と聞かれても、エラーの出た場所を知っているのは
質問者だけです。

ON ERROR等でエラー無視させているなら、エラー無視を外すべきでしょう。

また、フィールド名等、名前付け規則にも違反しています。

# ロジックが正常動作するまでは、ON ERRORは外すのが鉄則です。
・ツリー全体表示

【7533】Re:サブフォームの行
質問  tttn  - 06/3/16(木) 13:52 -

引用なし
パスワード
   ▼Gin_II さん:
>> サブフォームの元となっているテーブルは?
>については?
前問に書いてた様にT_会員(NO, 氏名, カナ, TEL, メール)テーブルです。

>

>>ループで回して全部登録するようにしたいです。
>こういったことをする必要がありませんけど。

テーブルにODBCでサーバー接続する場合はどのように書けばいいですか?
・ツリー全体表示

【7532】Re:一旦アクセスに取り込んだ写真のエクス...
回答  o  - 06/3/16(木) 13:40 -

引用なし
パスワード
   すいません。

教えて頂いたHPどおりに以下のプログラムで
実行したのですが途中でエラーになります。


Private Sub コマンド25_Click()
On Error GoTo Err_コマンド25_Click


  Screen.PreviousControl.SetFocus
  DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

Exit_コマンド25_Click:
  Exit Sub

Err_コマンド25_Click:
  MsgBox Err.Description
  Resume Exit_コマンド25_Click
  
End Sub

' 指定されたレコードの OLE オブジェクト型またはメモ型フィールドの
' 内容をファイルに書き出します。
' 成功すると空文字列を、失敗するとエラーメッセージを返します。
' 引数は、DLookup 関数などの Domain 系定義域集計関数と、GetChunk
' メソッドの引数に準じます。
' ただし引数 offset 省略時にはデータの先頭から、引数 numbytes
' 省略時にはデータ長すべてが対象になります。
' DAO ライブラリへの参照設定が必須です。
Function DWriteChunk(fieldname As String, _
    tablename As String, _
    filename As String, _
    Optional criteria As String, _
    Optional ByVal offset As Long, _
    Optional ByVal numbytes As Long) As String
On Error GoTo ErrorHandler
  ' 定数/変数宣言部
  Const ERR_INVARID_DATA_TYPE = 3259
  Dim rs     As DAO.Recordset
  Dim strSQL   As String
  Dim varChunk  As Variant
  Dim abytChunk() As Byte
  Dim FileNo   As Integer
  ' 変数を初期化します。
  FileNo = FreeFile
  strSQL = "Select " & fieldname & " From " & tablename
  If (LenB(criteria) <> 0) Then strSQL = strSQL & " Where " & criteria
  strSQL = strSQL & ";"
  ' ファイルとレコードセットを開きます。
  Open filename For Binary As #FileNo
☆☆エラー箇所  Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  ' データ型をチェックします。
  Select Case rs(0).Type
    Case dbLongBinary, dbMemo
      ' OK
    Case Else
      Err.Raise ERR_INVARID_DATA_TYPE
    End Select
  ' データをファイルに書き込みます。
  With rs
    If (numbytes = 0) Then numbytes = .Fields(fieldname).FieldSize
    varChunk = .Fields(fieldname).GetChunk(offset, numbytes)
    abytChunk = varChunk
    Put #FileNo, , abytChunk
  End With
  
ExitProcedure:
On Error Resume Next
  Close #FileNo
  rs.Close: Set rs = Nothing
  Exit Function

ErrorHandler:
  DWriteChunk = Err.Number & ":" & vbCrLf & Err.Description
  Resume ExitProcedure
End Function

Private Sub コマンド26_Click()
  Const BMP_OFFSET = 87
  Dim strResp As String
  strResp = DWriteChunk( _
    "写真", _
    "T_購入_写真", _
    "C:\" & "テスト.bmp", _
    "[管理No.]=0000000001-001", _
    BMP_OFFSET)
  If (LenB(strResp) = 0) Then strResp = "完了"
  MsgBox strResp
End Sub

エラー番号は91で「オブジェクト変数またはWithブロック変数が
設定されていません」とでます。

これはなぜでしょうか?

最初はSQLServerにDAOで接続することができないのかと
思いましたが調べるとそうではないようでした。
・ツリー全体表示

【7531】Re:一旦アクセスに取り込んだ写真のエクス...
発言  o  - 06/3/16(木) 11:24 -

引用なし
パスワード
   申し訳ありません。

取込の形式はjpgで取り込んでおります。

尚、お教え頂いたHPは非常に参考になりました。

jpgでできるかはわかりませんが現在、試しているところです。

また、結果がわかりしだいご報告致します。
・ツリー全体表示

【7530】Re:サブフォームの行
回答  Gin_II  - 06/3/16(木) 11:00 -

引用なし
パスワード
   >登録ボタンを押下するサブフォームに入力したデータをテーブルに登録します。
>一行の場合は下記のように書きますが・・・。

> サブフォームの元となっているテーブルは?
については?


そのテーブルを元に、追加クエリを実行すれば、そもそも

>ループで回して全部登録するようにしたいです。
こういったことをする必要がありませんけど。
・ツリー全体表示

【7529】Re:サブフォームの行
質問  tttn  - 06/3/16(木) 10:52 -

引用なし
パスワード
   ▼Gin_II さん:
>サブフォームの元となっているテーブルは?
>そちらを使えば大丈夫だと思いますけど。

返答をありがとうございます。
登録ボタンを押下するサブフォームに入力したデータをテーブルに登録します。
一行の場合は下記のように書きますが・・・。

Private Sub 登録_Click()
  Dim strNo, strName, strKana, strTel, strEmail As String
  Dim T_SQL As String
  Dim DB As Database
  Dim myRs  As DAO.Recordset
  Set DB = CurrentDb()

  strNo = Me![F_intra発注書作成明細].Form.[NO]
  strName = Me![F_intra発注書作成明細].Form.[氏名]
  strKana = Me![F_intra発注書作成明細].Form.[カナ]
  strTel = Me![F_intra発注書作成明細].Form.[TEL]
  strEmail = Me![F_intra発注書作成明細].Form.[メール]

  T_SQL = "INSERT INTO T_会員(NO, 氏名, カナ, TEL, メール)"
  T_SQL = T_SQL & " VALUES('" & strNo & "','" & strName & "',"
  T_SQL = T_SQL & "'" & strKana & "','" & strTel & "',"
  T_SQL = T_SQL & "'" & strMemo & "')"
  DB.Execute T_SQL
End Sub

複数の行をあった場合は登録ボタンを1回だけ押すとループで回して全部登録するようにしたいです。どうのようにかけばよいでしょうか?
例え:
  For i = 1 to サブフォームの全行数
        :
        :
  Next
サブフォームの全行数と一行ずつの配列のような設定しかたをよく分かりません。とても困っています。是非教えて頂きたいです。よろしくお願いします。
・ツリー全体表示

【7528】Re:コンボボックスのリクエリについて
お礼  木蓮  - 06/3/16(木) 10:14 -

引用なし
パスワード
   ありがとうございました!解決しました。
・ツリー全体表示

284 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084672
(SS)C-BOARD v3.8 is Free