Access VBA質問箱 IV

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

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


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

【10055】Re:処理方法について
質問  やすじ  - 07/12/5(水) 9:33 -

引用なし
パスワード
   ▼VBWASURETA さん:
こんにちは

すみません。もう少し詳細に書きます。

フォーム1〜5があり、この五つは同時に起動するフォームです。
(5個のフォームが開くマクロを起動)
5つすべてがフォームタイマーイベントを設定しています。
設定は以下の通り
フォーム1:200ms (ミリ秒)
フォーム2:300ms
フォーム3:1000ms
フォーム4:500ms
フォーム5:400ms

といった具合です

各フォームのVBAは下記のように記入

Private Sub Form_Timer()

  Dim rData1 As Integer

  lErr = ReadDevice16("KML", "D10WORD", rData1, 1)
  ’↑簡易DLLのプログラム。データの読み込みを行っている。
  ’KMLは設定データの名前で、D10WORDはデータが入っている場所で、
  ’rData1は読み出したデータを格納する場所、最後の1はデータの数となっている

  text1 = rData1
  ’↑テキスト1に呼び出したデータを格納する

End Sub

というプログラムで動作しています。
他の部分も基本構造は一緒です。
(変数、データの場所、データ数、格納場所だけ変わります)

データのタイマー間隔をいろいろ調整してなるべく重ならないよう設定しました。
(実際はフォームの開くタイミングが微小にずれている為コンマ何秒の設定までなら表示が時間はかぶらない)

問題としては、データが変動しているときはフォームで表示しているデータがコマとび状態になる。
(タイマーの間隔でVBが走っているから当然といえば当然なんですが・・・)

このデータの変動がリアルタイムで追従し表示できるようなやり方があれば教えてください。
(タイマー設定値1msも試したんですが正しい数値を表示したり0を表示しっぱなしだったりすることがあったため)
・ツリー全体表示

【10054】Re:フィールドのデータの一部を置き換え...
お礼  TAKE  - 07/12/4(火) 13:49 -

引用なし
パスワード
   小僧 さん、VBWASURETA さん
本当にありがとうございます。
皆さんの協力でうまくいきました。
また何かありましたら質問させていただきます。
いろいろ説明がうまくいかないにもかかわらず、
親切丁寧に教えていただきありがとうございました。
・ツリー全体表示

【10053】Re:数値データを常に決まった桁数で表示
お礼  ねこ  - 07/12/4(火) 9:30 -

引用なし
パスワード
   hatena さん、ありがとうございました。

不一致クエリは、ひとつしか関連フィールドを選べないと
思っていました。
参考になりました。

不一致クエリを使って、考えていたデータの抽出が
できるようになりました!!
・ツリー全体表示

【10052】Re:Access2003上でのDAO動作
お礼  raki  - 07/12/3(月) 14:24 -

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

ありがとうございます。

参照設定については、想定される環境として、Access2003のみのところへコンバートしたmdbを放り込むという形ですので、現在はDA03.6をADOよりも上にしているような形です。
旧式DAOのDLL参照設定はできないのです。

調査を続けているのですが、同じくMSのサポートページにある、ページフォルトというAccessのページロックに関する情報も関係しているのではないかという見方も出てきました。

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

【10051】Re:Access2003上でのDAO動作
お礼  raki  - 07/12/3(月) 14:20 -

引用なし
パスワード
   Gin_II さん

ありがとうございます。

レコードロックの設定について、試してみました。
デフォルトはチェックが入っていたので、はずしてみて実行したところ、更新されました。


解決策のひとつとして利用させていただきます。
・ツリー全体表示

【10050】Re:レポート/条件付書式/小数点以下桁数
発言  VBWASURETA  - 07/12/3(月) 14:16 -

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

こんにちは。

ちょっと気になったのですが、
>=IIf([金額]=Int([金額])

Int関数は最大サイズとか大丈夫でしょうか?

それほど大きい桁の金額でなければ大丈夫と思いますが^^;
・ツリー全体表示

【10049】Re:Access2003上でのDAO動作
発言  Gin_II  - 07/12/3(月) 13:01 -

引用なし
パスワード
   ○Access97から変わった点
○事象の内容

から、なんとなくですが、「ツール」→「オプション」の詳細タブにある、

既定のレコードロック
レコードレベルでロックして開く

あたりが関連しているような気はします。
・ツリー全体表示

【10048】Re:レポート/条件付書式/小数点以下桁数
回答  Gin_II  - 07/12/3(月) 12:56 -

引用なし
パスワード
   >書式欄にどのようにコードを書いたらよいのか判りません。

書式プロパティでは対応できないと思います。
テキストボックスのコントロールソースプロパティに、

=IIf([金額]=Int([金額])
  , Format([金額], "#,##0")
  , Format([金額], "#,##0.00")

のように記述してみてください。
・ツリー全体表示

【10047】レポート/条件付書式/小数点以下桁数
質問  miya×2  - 07/12/3(月) 12:01 -

引用なし
パスワード
   いつもお世話になっております<m(__)m>。

Access2000にてレポートを作成しているのですが、フィールド(ここでは「金額」とします)の書式を、

小数点以下あり⇒小数点以下2桁
小数点以下なし⇒小数点以下0桁

と変化させたいのです。
普通の条件付書式には対応するものがないのですが、コードで可能でしょうか?

1で割った余りによって振り分けることができるかな?
というところは思いついたのですが、
書式欄にどのようにコードを書いたらよいのか判りません。

何か方法をご存知でしたらご教授いただきたく、よろしくお願いいたします。
・ツリー全体表示

【10046】Re:Access2003上でのDAO動作
発言  VBWASURETA  - 07/12/3(月) 11:05 -

引用なし
パスワード
   ▼raki さん:
こんにちは。

Access2003については全然わかりませんが、
以下のHPに書かれているようなことでしょうか??

//support.microsoft.com/kb/825796/ja

直リンクはダメということなので削っています。
・ツリー全体表示

【10045】Access2003上でのDAO動作
質問  raki  - 07/12/3(月) 10:45 -

引用なし
パスワード
   WindowsVistaに対応するために、現行Access97で稼働中のシステムをAccess2003(Vista動作保証あり)に変換することになりました。

データの格納先はmdb、更新処理にはDAOを使用しており、変換後(access97からオブジェクトインポート)に以下のような事象に遭遇しました。

1.テーブルAをOpenrecordsetで開く。
2.テーブルAに対してEXECUTEコマンドでの更新処理を行う
 ↓
 1.にてOPENしているレコードについて、更新不可
 (Accessの2KBページロックから外れるところは更新されている?)

OPENRECORSETで開く際のオプション定数や、レコードセットのクローズ等をすべて試しましたが、試行錯誤の結果判明した対策は以下のとおりでした。


対策1.Access2003へ変換時、基本はAccess2000形式だが、
    2000-2002形式にし、そこへインポートする。

対策2.Access2003で開くとき、排他モード指定で開く。


今のところ、上記2点の解決策が見つかっていますが、その根拠が見当つきません。
知識をお持ちのかたが見えましたら、お助けお願いできませんでしょうか。
・ツリー全体表示

【10044】Re:数値データを常に決まった桁数で表示
回答  hatena  - 07/11/30(金) 22:18 -

引用なし
パスワード
   >たとえば、商品コードが9999、金額1,000円だったとしたら
>9999000001000というデータにして、不一致クエリ作成の時に
>関連付けるフィールドとして使いたいと考えています。

不一致クエリで関連付けるのが目的なら、
2つのフィールド同士で関連付ければいいだけでは。
その方がインデックスを利用できるのは、高速ですし。

ウィザードでは関連フィールドは一つしか指定できませんが、
ウィザードで作成した不一致クエリのデザインビューで
別のフィールドも連結すればいいだけです。
・ツリー全体表示

【10043】Re:数値データを常に決まった桁数で表示
お礼  ねこ  - 07/11/30(金) 16:33 -

引用なし
パスワード
   VBWASURETAさん

Format関数で、出来ました。
ありがとうございました。
・ツリー全体表示

【10042】Re:数値データを常に決まった桁数で表示
回答  VBWASURETA  - 07/11/30(金) 14:42 -

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

こんにちは。

テキストの定型入力でもできるような気がしますが、
Format関数でもできます。

例:

Sub main()
  Dim strwk As String
  'strwkに結果が入る
  strwk = "9999" & CStr(Format(1000, "00000000"))  
End Sub

ご参考までに。
・ツリー全体表示

【10041】数値データを常に決まった桁数で表示
質問  ねこ  - 07/11/30(金) 13:26 -

引用なし
パスワード
   VBA以前の初歩的なアクセスの質問です。

金額の桁数を常に決まった桁数を表示させる方法はありますか?

1,000円を000,001,000円のように表示させたいのです。
商品コードと数値データを常に決まった桁数で表示させた金額を
つなげて1個のデータにして、不一致クエリで抽出をするためです。

たとえば、商品コードが9999、金額1,000円だったとしたら
9999000001000というデータにして、不一致クエリ作成の時に
関連付けるフィールドとして使いたいと考えています。

わかる人がいたら、教えてください。
宜しくお願い致します。
・ツリー全体表示

【10040】Re:フィールドのデータの一部を置き換え...
回答  小僧  - 07/11/30(金) 12:02 -

引用なし
パスワード
   ▼TAKE さん、VBWASURETA さん:
こんにちは。

まずワーク用のテーブルとして W_Temp1 を用意します。

Create Table W_Temp1(F1 Varchar(50) CONSTRAINT PKEY PRIMARY KEY)


後は下記を標準モジュールにでも書いて実行させてみて下さい。

Sub 半角だけ取り出す()
'要参照 Microsoft DAO x.x Object Library
Const T_Name = "テーブル名"
Const F_Name = "フィールド名"

Dim strSQL As String
Dim RS As DAO.Recordset

  strSQL = "DELETE FROM W_Temp1"
  CurrentDb.Execute strSQL, dbFailOnError

  Set RS = CurrentDb.OpenRecordset(T_Name, dbOpenSnapshot)
    Do Until RS.EOF
      If Len(RS(F_Name)) * 2 <> _
       LenB(StrConv(RS(F_Name), vbFromUnicode)) Then
        Call widthcheck(RS(F_Name))
      End If
    RS.MoveNext
  Loop
  RS.Close: Set RS = Nothing
  
  MsgBox "終了"

End Sub


Function widthcheck(strData As String)
Dim i As Long
Dim strWord As String
Dim FLG As Long

  For i = 1 To Len(strData)
    If LenB(StrConv(Mid(strData, i, 1), vbFromUnicode)) = 1 Then
      strWord = strWord & Mid(strData, i, 1)
    Else
      If strWord <> "" Then
        FLG = True
      End If
    End If
    
    If FLG Or i = Len(strData) Then
      CurrentDb.Execute "INSERT INTO W_Temp1(F1)" _
                & "VALUES('" & strWord & "');"
      strWord = ""
      FLG = False
    End If
  Next i

End Function


> Lenで文字数を算出しその文字数だけLoopして
> Midで一文字ずつ半角を&で追加して
> 全角がきたらテーブルに出力したいのです。

もう1点、全角がこなくても文字列が終了の場合は
テーブルへの追加条件になりますよね。


また既にテーブルへ登録されているかのチェック時間を省く為、
重複不可のインデックス(上記例では主キー)を張って
Execute メソッドでSQL を発行させています。

ご参考になれば幸いです。
・ツリー全体表示

【10039】Re:フィールドのデータの一部を置き換え...
発言  VBWASURETA  - 07/11/30(金) 11:46 -

引用なし
パスワード
   すみません訂正です、、。

>例:
>int strlength as Integer

strlength as Integer

です^^;
・ツリー全体表示

【10038】Re:フィールドのデータの一部を置き換え...
回答  VBWASURETA  - 07/11/30(金) 11:24 -

引用なし
パスワード
   ▼TAKE さん:
こんにちは。

見づらくてすみません。以下の部分がそうだったのですが・・・
>'バイトで見る場合はLenB(StrConv(取り出した1文字, vbFromUnicode))です


例:
int strlength as Integer

'この場合"あ"は全角なので戻り値は2を返します。
strlength = LenB(StrConv("あ", vbFromUnicode))

'この場合"ア"は半角なので戻り値は1を返します。
strlength = LenB(StrConv("ア", vbFromUnicode))


この処理は文字列をUnicodeからシステムの既定のコード ページに変換し
文字列をバイト単位でサイズを取得します。
後は何とかなりますでしょうか?
・ツリー全体表示

【10037】Re:フィールドのデータの一部を置き換え...
質問  TAKE  - 07/11/30(金) 10:47 -

引用なし
パスワード
   小僧 さん、VBWASURETA さん
ありがとうございます。

小僧さんの記述のように
データが"日本XLS 一VV朗"の場合

xls
vv
データを追加していきテーブルを作成していきたいです。
Lenで文字数を算出しその文字数だけLoopして
MIDで一文字ずつ半角を&で追加して全角がきたらテーブルに出力したいのです。他にいい方法があればいいのですが・・・
半角の区別がわかりません
よろしくお願いします
・ツリー全体表示

【10036】Re:フィールドのデータの一部を置き換え...
発言  VBWASURETA  - 07/11/30(金) 10:31 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。

あー、複数回半角文字が全角文字と混在で含まれた場合の結果ですか。

そうなってくると簡単に解消してしまおうと関数定義にして入れてしまいそうです。


因みに

>○モジュール
>Function StrMojiChk(strwk as String) as String

この関数の戻り値としてString型にしている訳ですが、
1文字だけを抜き出してチェックするだけの意味だけではなく
この場合、半角だけを結合した結果や全角文字だけを結合した結果の
文字列を返す等の意味で、やり方次第ということで間を省いています。
そこまで書いてしまうと理解しないまま解決となりかねませんから。
あ、関数名も悪いようです^^;

Function Fnc_1ByteStrOnlyGet(strwk as String) as String



Function Fnc_2ByteStrOnlyGet(strwk as String) as String

等でも良いです。


>○クエリー
>Select StrMojiChk(Field1) From Testテーブル

ですが、例としてSelectにしただけでして、Insert、Create等でも良いです。
・ツリー全体表示

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