Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,161 から 2,200 までを表示しています。
4
りんご 2022/11/11 (金) 01:26:52 c564b@0e907 >> 3

 Excelの場合、任意のデータを取り出すのに苦労する。最近、触っていなくて忘れていましたが、あぁ、確かにそんな事もありました。
 的外れかもしれませんが、委託金額と受託金額みたいなものを登録する感じですかね、そして、ゆくゆくは、内訳金額や原価計算や車両手配を扱う事になるかもしれない?
 最終的に、外注を見据えて情報収集を始めるのがお勧めです。

3
名前なし 2022/11/11 (金) 00:39:55 58219@e4af9

hatenaさんありごうとうございます
詳しい方から特にテーブルを分ける必要もないと教えていただいたので
安心してフィールド追加でやれそうです
教科書的には正規化しろってことになりそうですが
ご指摘の通りフィールド追加だけで問題はないだろうと思っていましたが
私の知識の範囲外で問題が起こるのではないかと不安でした

りんごさん、今まではExcelVBAで転記しまくりでやってましたが
スプレッドシートになるので、任意のデータを取り出すのに苦労したりしていました
運送向けもは長距離特化なので当社にはまったく適合できませんでした

2
りんご 2022/11/10 (木) 22:45:44 c564b@0e907

 家計簿程度ならばわざわざデータベースでやる意味がなく、WordやExcelのメモで十分、それ以上にはなりません。
 ググれば運送業向け業務管理システムやIT成功事例集などすぐに見つかるので、当たり前の経営をやれば済む話です。

1

複数の下請けに分割することがないのなら、一対一の関係になるので、売上テーブルに下請け用のフィールドを追加すればいいと思います。下請けに回さない場合は、未入力にしておけばいいでしょう。

下請け用に別テーブルを作成するという方法もありますが、その場合は、下記を参考にしてください。

一対一関係のテーブル設計
一対一の関係のデータは一つのテーブルにまとめるというのが、データベース設計のセオリーです。ですので、特別な事情が無い限りは一対一関係のテーブルを作るメリットはないです。ただ、絶対に一対一の設計はNGというわけでもありません。 一対一の関係が必要な特別な事情の例と、その場合の設計法や注意する点について、今回は取り上げます。 難易度:...
Fc2

6
こじゅわい 2022/11/10 (木) 20:36:37 350e2@3e38e

お忙しいところご回答ありがとうございます。

最適化したらできました。
「日本語」
「日本語、部首、画数」
上記二つとも問題ありませんでした。
流石です。

その前にバイナリでの比較をテストしてみたのですが・・・
IIf(IsNull([forms]![テスト]![文字列検索])=False,InStr(1,[テスト].[品名],[forms]![テスト]![文字列検索],0),1)

>0
抽出できるのですが、弊害として「カタカナ」を「ひらがな」で検索できなくなり(当然ですよね)
また、ソート順もstrconvの64でやってみてもやっぱり少し変で・・・

と言うことで「日本語」で「最適化」で進めてみます。

感謝!

5

Accessのオプションで設定できるのは「新規データベースの並び順序」です。
既存のデータベースに関しては、その設定を行なってからそのデータベースの最適化/修復を実行しなければ適用されません。

4
こじゅわい 2022/11/10 (木) 17:49:05 f4ccb@3e38e

お忙しいところご回答ありがとうございます。

オプションを確認したところ「日本語 - レガシー」でした。
今まで気にした事もなかったのですが、他の選択肢
「日本語」
「日本語、部首、画数」
「日本語 Unicode - レガシー」
どれもうまくいきませんでしたので「日本語 - レガシー」に戻しました。

バイナリーモードの比較で丸数字の21番が6で返って来ました。
流石です。助かりました。

感謝!

2
名前なし 2022/11/10 (木) 17:06:47 ec010@eef0b

そのデータベースの並び順序(照合順序)が「日本語 - レガシー」だからではないかと。
その場合、恐らく㉑から㊿までの丸数字はソートテーブルにおいて重みづけされていないがために無視されてしまっているはず。

1

当方の環境でもうまくいきませんでした。
丸数字の21~50はUnicode文字なので、それが影響しているのかも。
Accessのバグといえるでしょう。
Like演算子はテキストモードでの比較になりますのでそれが原因のようですので、バイナリモードでの比較だとうまくいきました。
下記でバイナリモードでの比較の方法を紹介してますので参考にしてください。

【Access】クエリで大文字/小文字、全角/半角、ひらがな/カタカナを区別して文字列比較したい | hatena chips
Accessのクエリ(SQL)の抽出条件や、演算フィールドの式で文字列比較をするとき、テキストモードでの比較になるので、 大文字/小文字、全角/半角、ひらがな/カタカナを区別しま...
hatena chips

2
k35 2022/11/09 (水) 14:48:48 修正

hiroton様
何日考えても分からなくてずっと悩んでいたのが一瞬で解決して、めちゃくちゃ感動しました。
今は見てもよくわからないのですが、
何とか自分でも少しはこういうのが書けるようになるように勉強します。
本当にありがとうございました。

1
hiroton 2022/11/09 (水) 09:43:38 70abe@f966d

マクロ駆使してできないこともないんでしょうけど、VBA覚えるよりよっぽど難しい気がします

Private Sub csv出力()
  Dim FileNumber As Long
  Dim db As Database
  Dim rs As Recordset
  
  FileNumber = FreeFile
  Open "C:\データ\印刷.csv" For Output As #FileNumber
  Set db = CurrentDb
  Set rs = db.OpenRecordset("T発行一覧")
  
  Dim 枚数 As Long
  Dim 出力カウント As Long
  出力カウント = 0
  
  With rs
    '//レコード分繰り返しスタート
    Do Until .EOF

      '//枚数分の繰り返しスタート
      For 枚数 = 1 To !枚数
        '//改行無しで出力
        Print #FileNumber, !品番 & "," & !カラー & "," & !サイズ & ",";  
        
        '//出力数計算して改行出力
        出力カウント = 出力カウント + 1
        If 出力カウント = 30 Then
          '//改行だけ出力
          Print #FileNumber,

          出力カウント = 0 '//カウントリセット
        End If

      Next '//↑ここまで枚数分出力の繰り返し処理

      .MoveNext

    Loop '//↑ここまでレコード分繰り返し処理

    .Close
  End With
  Close #FileNumber
End Sub

そのすべてをつなげて30ずつで改行する仕組み

そのまんま記述するだけですね

5
ギガ 2022/11/07 (月) 22:20:35

解決できました、詳細の可視の設定でした。
ありがとうございました。

4
りんご 2022/11/07 (月) 22:14:05 c564b@0e907

 イメージがよくわかりませんが、もしかして、便利!!Accessフォームにおけるデータシートビューの活用こんな事がやりたいのでしょうか?
 スクリーンショットやペイント図などで説明するか、コピーをとってデータを削除したものをアップロードして見てもらうかしたほうが、早いでしょう。

3

コントロールの高さが0になっているとか。

2
ギガ 2022/11/07 (月) 19:26:24

ご返信ありがとうございます。
デザインビューの設定ですが規定のビューの設定が分割フォームになっています。
レコードセレクターの設定が『はい』になっているのですが、フォームビューにて分割バーで
データシートずらしても見当たりません。
また可視設定ですが非表示にはなっていませんでした。

1

デザインビューにしてどのような設定になっているか確認できませんか。

いろいろ考えられますが、
例えば、連結コントロールとラベルの可視をいいえにして非表示にしているとか。
実は分割フォームではなく、データシートをサブフォームとして埋め込んでいるとか。

5

hatena様
大変お世話になっています。
無事思っていたようにテーブルにカッコリストを作る事が出来ました。

いつも丁寧にお教えいただき本当に感謝しています。
ありがとうございます。

4

りんご様
ご返信をいただきましてありがとうございます。
ワードなどに貼り付けもやってみたいのですが、数が多いのと
フィールド内にダブルクオーテションがあったりでうまく出来ませんでした。

5
ストレイシープ 2022/11/05 (土) 15:46:11 45193@6ab15

hiroton 様、お返事ありがとうございます。

実務経験の厚い方からいろいろと伺え、本当にありがたいです。
なるほど、いろいろな壊れ方をするのですね。
フロントのデータもバックのデータも……

やはり今後も一定の遠慮を持って使って、
高望みをするのであれば SQL Server に頼むのがよさそうです。

4
hiroton 2022/11/05 (土) 12:11:23 5f13d@f966d

データが壊れる
オートナンバーがnullのデータが登録される
オートナンバー含めて全く同一のレコードが登録される
文字化けしたレコードが登録される(数値型フィールドなのに化けた文字が入ってる)
VBAのコードが壊れる
改行が消えて行が連結される?
書いた記憶のないコードが存在する?(昔書いたかもしれない修正済みのコードが復活する?)

レコードを読み込んだ瞬間にACCESSが落ちるとか、コードを実行するとエラーが発生するとかそういう事態に遭遇したことが何度かあります
原因となりそうなところを調べてみると上記のような結果という感じです
(全てが共有していることが原因かどうかはわかりませんが)

ファイル自体が開けなくなるような致命的なのはそうそう遭遇しませんね。hatenaさんの回答と同様ですが、よほど古いモノをどうにかならないか?と相談されたときくらいです

3
ストレイシープ 2022/11/05 (土) 11:45:43 24388@ef902

お返事ありがとうございます。

私も hatena 様よりは短いながら、Access 2000 ぐらいから触っておりまして、
しかしこの「壊れる」のさじ加減がいまいちはっきりしないまま来ました。

とりあえず、お金に関わる重要な役割を Access に持たせないでずっと来たのですが、
「たまにデータが消えたとか書き換わったという報告がありますが、
 調べてみると、たいていユーザーの操作ミスか、コードのバグです」
という印象を私も持っており、
別に持たせてもいいんじゃないか、皆さんどうしてるんだろうか……
と思ったというのが経緯です。

SQL Server に移ってくれよ、というのが MS の声だとは解っているのですが(苦笑)。

2

Access95のころから継続して、バックエンドとフロントエンドに分けて数人のユーザーで共有しているデータベースシステムがあります。この経験からの回答になります。

分かりやすく壊れる: 何かしらのエラーメッセージが表示されて強制終了したり、立ち上げられなかったりする。

これは、かつては何度か経験してます。最近はまったくないです。Access2000より前は結構不安定だった記憶があります。

分かりにくく壊れる: エラーメッセージは何も表示されないが、思いも寄らないようなデータがひそかに、勝手に書き換わっている

これは、判断が難しいですよね。たまにデータが消えたとか書き換わったという報告がありますが、調べてみると、たいていユーザーの操作ミスか、コードのバグです。もし、ひそかに書き換わっていたとしても検証が難しいですよね。

どちらにてしも、定期的にバックアップは必須でしょう。
少しずつ壊れていって、ある日、エラーがでたり立ち上がらなくなるという可能性もあるので、必用に応じて数世代のバックアップをとっておいて、世代を遡れるようにしておくいいでしょう。

下記も読んでみてください。

AccessのDBファイルを長期的に安定して使用するには
Access95で作成して、機能追加、改良しつつ、Accessのバージョンもアップして使い続けているデータベースファイルがあります。このようなファイルをお持ちのかたも多く見えると思います。 このような場合に、破損や動作不良を起こすことなく安定して使い続けるためにすべきことを紹介したいと思います。 難易度:...
fc2

1
ストレイシープ 2022/11/05 (土) 09:09:01 21b98@b7c66

修正です。「後者だけが起こる」パターンがある、後者だけが日々静かに進むことがあるのか知りたいです。

2

下記でどうでしょう。

Public Sub SplitRecord()
    Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset
    Set rs1 = CurrentDb.OpenRecordset("テーブル1", dbOpenForwardOnly, dbReadOnly)
    Set rs2 = CurrentDb.OpenRecordset("テーブル2", dbOpenTable, dbAppendOnly)
    
    Dim ary As Variant, i As Long
    Do Until rs1.EOF
        ary = Split(rs1!タグ, vbCrLf)
        For i = 0 To UBound(ary)
            rs2.AddNew
            rs2!カッコリスト.Value = ary(i)
            rs2.Update
        Next
        rs1.MoveNext
    Loop
    
    rs1.Close
    rs2.Close
End Sub
1
りんご 2022/11/04 (金) 20:01:41 c564b@0e907

 Wordに出力するなり、コピーする。そして、表を解除し、文字列置換の後、何やかんやでAccessに戻します。

2
チョコ 2022/11/02 (水) 17:46:11 a52bd@dab18

うまくできました。
toneさんありがとうございました。

1

Me.ForeColor = vbBlue
Me.DrawWidth = 30
としてみたら変化はありますか?

3
Kanto 2022/10/31 (月) 14:26:53 e48ae@9a838

早々のご回答ありがとうございます!
できました!

いつも " や ' の位置に悩まされ、よくわからなくなってしまいます。
これからもっと勉強します。
ありがとうございました。

2

変数は""の外に出す必要があります。""ないだと単なる文字列です。
IDフィールドが数値型かオートナンバー型なら、下記でどうでしょう。

varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null and ID <> " & crid)
1
Kanto 2022/10/31 (月) 11:02:07 e48ae@9a838

varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null")
の場合はコード自体はうまくいくのですが、自分自身をカウントし、結果が0にならない場合があります。

2
あやめさん 2022/10/27 (木) 21:42:25 6d966@2e6fc

すばらしい!
バッチリ全件表示できました。
SQLServer、OracleどちらもOKでした。
半月以上悩んでいたいたのがスッキリしました。
ありがとうございました。

1

rs.CursorLocation = adUseClient
としたらどうでしょうか?

1

この番号というのは個別テーブルで設定してるIDなのですがなぜ番号が反映されるのでしょうか?

データベースの設計としてはそれが正しいものになります。

フォームに連結しているテーブルはトランザクションテーブル(日々、データが更新、追加されるテーブル)、
コンボボックス(ドロップダウンリスト)の値集合ソースに設定するテーブルはマスターテーブル(一度設定したらめったに更新されないテーブル)になります。

トランザクションテーブルにはマスターテーブルの主キーフィールド(ID)の値を格納します。これを外部キーといいます。

このような設計にしないとデータベースとして機能しません。データベース設計の基本です。

テーブルのフィールドのルックアップの設定を、フォーム上のコンボボックスと同じ設定にすれば名前を表示させることは可能です。(表示だけで、実際に格納されているのはIDですが)

1
hatena 2022/10/07 (金) 20:31:44 修正

AテーブルとBテーブルのデータ例を提示してもらえますか。

店名が〇〇証券だったら代理店区分欄に証券と、〇〇信託だったら信託と、Aテーブルに入るようにしたい

ユーザーがAテーブルのデータを入力作業中の話でしょうか。

「店名」を「〇〇証券」と入力したら、自動で「代理店区分」に「証券」と入るようにしたいということでしょうか。

代理店区分は「証券」「信託」だけですか。それ以外もありますか。

現在、どこまでできていますか。入力用のフォームは作成してますか。

12

また、ミスってました。たびたび済みません。
カンマが一つ足りませんでした。
下記に修正してください。

s = Replace(s, i, "<font style='background-color:" & 色 & ";'>" & i & "</font>", , ,vbBinaryCompare)
7
りんご 2022/10/05 (水) 11:06:09 c564b@0e907

解決して良かったです。力になれずすみません。

7
kittty 2022/10/05 (水) 11:02:43 c6806@a3086

hatena様の「VBAでセクション全体の背景色を変更する」方法で解決しました。
hiroton様、hatena様 ありがとうございました。

11
チョコラブ 2022/10/05 (水) 11:00:50 a1353@b3d22 >> 10

replace関数でその通りにやってみましたが、ハイライトされませんでした...