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
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
Excelの場合、任意のデータを取り出すのに苦労する。最近、触っていなくて忘れていましたが、あぁ、確かにそんな事もありました。
的外れかもしれませんが、委託金額と受託金額みたいなものを登録する感じですかね、そして、ゆくゆくは、内訳金額や原価計算や車両手配を扱う事になるかもしれない?
最終的に、外注を見据えて情報収集を始めるのがお勧めです。
hatenaさんありごうとうございます
詳しい方から特にテーブルを分ける必要もないと教えていただいたので
安心してフィールド追加でやれそうです
教科書的には正規化しろってことになりそうですが
ご指摘の通りフィールド追加だけで問題はないだろうと思っていましたが
私の知識の範囲外で問題が起こるのではないかと不安でした
りんごさん、今まではExcelVBAで転記しまくりでやってましたが
スプレッドシートになるので、任意のデータを取り出すのに苦労したりしていました
運送向けもは長距離特化なので当社にはまったく適合できませんでした
家計簿程度ならばわざわざデータベースでやる意味がなく、WordやExcelのメモで十分、それ以上にはなりません。
ググれば運送業向け業務管理システムやIT成功事例集などすぐに見つかるので、当たり前の経営をやれば済む話です。
複数の下請けに分割することがないのなら、一対一の関係になるので、売上テーブルに下請け用のフィールドを追加すればいいと思います。下請けに回さない場合は、未入力にしておけばいいでしょう。
下請け用に別テーブルを作成するという方法もありますが、その場合は、下記を参考にしてください。
お忙しいところご回答ありがとうございます。
最適化したらできました。
「日本語」
「日本語、部首、画数」
上記二つとも問題ありませんでした。
流石です。
その前にバイナリでの比較をテストしてみたのですが・・・
IIf(IsNull([forms]![テスト]![文字列検索])=False,InStr(1,[テスト].[品名],[forms]![テスト]![文字列検索],0),1)
>0
抽出できるのですが、弊害として「カタカナ」を「ひらがな」で検索できなくなり(当然ですよね)
また、ソート順もstrconvの64でやってみてもやっぱり少し変で・・・
と言うことで「日本語」で「最適化」で進めてみます。
感謝!
Accessのオプションで設定できるのは「新規データベースの並び順序」です。
既存のデータベースに関しては、その設定を行なってからそのデータベースの最適化/修復を実行しなければ適用されません。
お忙しいところご回答ありがとうございます。
オプションを確認したところ「日本語 - レガシー」でした。
今まで気にした事もなかったのですが、他の選択肢
「日本語」
「日本語、部首、画数」
「日本語 Unicode - レガシー」
どれもうまくいきませんでしたので「日本語 - レガシー」に戻しました。
バイナリーモードの比較で丸数字の21番が6で返って来ました。
流石です。助かりました。
感謝!
ハンドルネーム入力するの忘れてました。失礼。
そのデータベースの並び順序(照合順序)が「日本語 - レガシー」だからではないかと。
その場合、恐らく㉑から㊿までの丸数字はソートテーブルにおいて重みづけされていないがために無視されてしまっているはず。
当方の環境でもうまくいきませんでした。
丸数字の21~50はUnicode文字なので、それが影響しているのかも。
Accessのバグといえるでしょう。
Like演算子はテキストモードでの比較になりますのでそれが原因のようですので、バイナリモードでの比較だとうまくいきました。
下記でバイナリモードでの比較の方法を紹介してますので参考にしてください。
hiroton様
何日考えても分からなくてずっと悩んでいたのが一瞬で解決して、めちゃくちゃ感動しました。
今は見てもよくわからないのですが、
何とか自分でも少しはこういうのが書けるようになるように勉強します。
本当にありがとうございました。
マクロ駆使してできないこともないんでしょうけど、VBA覚えるよりよっぽど難しい気がします
そのまんま記述するだけですね
解決できました、詳細の可視の設定でした。
ありがとうございました。
イメージがよくわかりませんが、もしかして、便利!!Accessフォームにおけるデータシートビューの活用こんな事がやりたいのでしょうか?
スクリーンショットやペイント図などで説明するか、コピーをとってデータを削除したものをアップロードして見てもらうかしたほうが、早いでしょう。
コントロールの高さが0になっているとか。
ご返信ありがとうございます。
デザインビューの設定ですが規定のビューの設定が分割フォームになっています。
レコードセレクターの設定が『はい』になっているのですが、フォームビューにて分割バーで
データシートずらしても見当たりません。
また可視設定ですが非表示にはなっていませんでした。
デザインビューにしてどのような設定になっているか確認できませんか。
いろいろ考えられますが、
例えば、連結コントロールとラベルの可視をいいえにして非表示にしているとか。
実は分割フォームではなく、データシートをサブフォームとして埋め込んでいるとか。
hatena様
大変お世話になっています。
無事思っていたようにテーブルにカッコリストを作る事が出来ました。
いつも丁寧にお教えいただき本当に感謝しています。
ありがとうございます。
りんご様
ご返信をいただきましてありがとうございます。
ワードなどに貼り付けもやってみたいのですが、数が多いのと
フィールド内にダブルクオーテションがあったりでうまく出来ませんでした。
りんご様
hiroton 様、お返事ありがとうございます。
実務経験の厚い方からいろいろと伺え、本当にありがたいです。
なるほど、いろいろな壊れ方をするのですね。
フロントのデータもバックのデータも……
やはり今後も一定の遠慮を持って使って、
高望みをするのであれば SQL Server に頼むのがよさそうです。
データが壊れる
オートナンバーがnullのデータが登録される
オートナンバー含めて全く同一のレコードが登録される
文字化けしたレコードが登録される(数値型フィールドなのに化けた文字が入ってる)
VBAのコードが壊れる
改行が消えて行が連結される?
書いた記憶のないコードが存在する?(昔書いたかもしれない修正済みのコードが復活する?)
レコードを読み込んだ瞬間にACCESSが落ちるとか、コードを実行するとエラーが発生するとかそういう事態に遭遇したことが何度かあります
原因となりそうなところを調べてみると上記のような結果という感じです
(全てが共有していることが原因かどうかはわかりませんが)
ファイル自体が開けなくなるような致命的なのはそうそう遭遇しませんね。hatenaさんの回答と同様ですが、よほど古いモノをどうにかならないか?と相談されたときくらいです
お返事ありがとうございます。
私も hatena 様よりは短いながら、Access 2000 ぐらいから触っておりまして、
しかしこの「壊れる」のさじ加減がいまいちはっきりしないまま来ました。
とりあえず、お金に関わる重要な役割を Access に持たせないでずっと来たのですが、
「たまにデータが消えたとか書き換わったという報告がありますが、
調べてみると、たいていユーザーの操作ミスか、コードのバグです」
という印象を私も持っており、
別に持たせてもいいんじゃないか、皆さんどうしてるんだろうか……
と思ったというのが経緯です。
SQL Server に移ってくれよ、というのが MS の声だとは解っているのですが(苦笑)。
Access95のころから継続して、バックエンドとフロントエンドに分けて数人のユーザーで共有しているデータベースシステムがあります。この経験からの回答になります。
これは、かつては何度か経験してます。最近はまったくないです。Access2000より前は結構不安定だった記憶があります。
これは、判断が難しいですよね。たまにデータが消えたとか書き換わったという報告がありますが、調べてみると、たいていユーザーの操作ミスか、コードのバグです。もし、ひそかに書き換わっていたとしても検証が難しいですよね。
どちらにてしも、定期的にバックアップは必須でしょう。
少しずつ壊れていって、ある日、エラーがでたり立ち上がらなくなるという可能性もあるので、必用に応じて数世代のバックアップをとっておいて、世代を遡れるようにしておくいいでしょう。
下記も読んでみてください。
修正です。「後者だけが起こる」パターンがある、後者だけが日々静かに進むことがあるのか知りたいです。
下記でどうでしょう。
Wordに出力するなり、コピーする。そして、表を解除し、文字列置換の後、何やかんやでAccessに戻します。
うまくできました。
toneさんありがとうございました。
Me.ForeColor = vbBlue
Me.DrawWidth = 30
としてみたら変化はありますか?
早々のご回答ありがとうございます!
できました!
いつも " や ' の位置に悩まされ、よくわからなくなってしまいます。
これからもっと勉強します。
ありがとうございました。
変数は""の外に出す必要があります。""ないだと単なる文字列です。
IDフィールドが数値型かオートナンバー型なら、下記でどうでしょう。
varCheck = DCount("*", "装置管理マスタ", "受注Noフル ='" & varNo & "'and 削除日時 Is Null")
の場合はコード自体はうまくいくのですが、自分自身をカウントし、結果が0にならない場合があります。
すばらしい!
バッチリ全件表示できました。
SQLServer、OracleどちらもOKでした。
半月以上悩んでいたいたのがスッキリしました。
ありがとうございました。
rs.CursorLocation = adUseClient
としたらどうでしょうか?
データベースの設計としてはそれが正しいものになります。
フォームに連結しているテーブルはトランザクションテーブル(日々、データが更新、追加されるテーブル)、
コンボボックス(ドロップダウンリスト)の値集合ソースに設定するテーブルはマスターテーブル(一度設定したらめったに更新されないテーブル)になります。
トランザクションテーブルにはマスターテーブルの主キーフィールド(ID)の値を格納します。これを外部キーといいます。
このような設計にしないとデータベースとして機能しません。データベース設計の基本です。
テーブルのフィールドのルックアップの設定を、フォーム上のコンボボックスと同じ設定にすれば名前を表示させることは可能です。(表示だけで、実際に格納されているのはIDですが)
AテーブルとBテーブルのデータ例を提示してもらえますか。
ユーザーがAテーブルのデータを入力作業中の話でしょうか。
「店名」を「〇〇証券」と入力したら、自動で「代理店区分」に「証券」と入るようにしたいということでしょうか。
代理店区分は「証券」「信託」だけですか。それ以外もありますか。
現在、どこまでできていますか。入力用のフォームは作成してますか。
また、ミスってました。たびたび済みません。
カンマが一つ足りませんでした。
下記に修正してください。
解決して良かったです。力になれずすみません。
hatena様の「VBAでセクション全体の背景色を変更する」方法で解決しました。
hiroton様、hatena様 ありがとうございました。
replace関数でその通りにやってみましたが、ハイライトされませんでした...