[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/26 17:50 / Filesize : 273 KB / Number-of Response : 1044
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Access VBA 質問スレ Part1



1 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:53:46.88 .net]
AccessのVBAに関する質問スレです

★1 質問テンプレ(雛形)は用意しませんが、OSとAccessのバージョンは必ず書きましょう。

★2 AccessのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 AccessのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★5 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

関連スレ
Excel VBA 質問スレ Part23
toro.2ch.net/test/read.cgi/tech/1327763113/l50


751 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 0 ]
[ここ壊れてます]

752 名前:8:04:15.30 ID:VdvmUVsR.net mailto: 私なら
入力した名前をテーブルに追加していき
リストボックスの値集合ソースにそのテーブルを指定して表示させ
Wクリックで入力させたいテキストボックス(?)に転記させます
※コンボじゃなくリストにしたのは好みです
[]
[ここ壊れてます]

753 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 12:18:30.41 ID:14hiXRCy.net]
配列で変数に入れて、
値集合ソースにセットすれば?

754 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 12:19:41.22 ID:14hiXRCy.net]
strSQLで。

755 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 12:33:54.26 ID:14hiXRCy.net]
まあ、でも次回開いた時に
直近のを表示したいって事なんだろうから
やっぱりテーブルに保持して
それを表示してやる感じかね。

756 名前:718 mailto:sage [2017/05/16(火) 12:53:25.27 ID:CV++bHOB.net]
>>721-724
色々有難うございます。
すいません、AccessのVBAのスレで>>720を書いてしまいました。完全にネボケていました

757 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 12:59:39.86 ID:Gxqu5M/V.net]
そもそも質問の意味がわからない。
任意のリストをコンボボックスに表示する方法は分かってる?
或いは指定テーブルの指定フィールドをコンボボックスに表示する方法とか。
それが分かれば技術的な問題じゃ無くて頭の問題でしょ。

758 名前:718 mailto:sage [2017/05/16(火) 13:12:32.50 ID:CV++bHOB.net]
>>726
職場では検証や練習の時間が取れないので、自宅で練習した上でやりたいのですが
自宅にはAccessが無いので上記のような質問になってしまいました。

759 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 14:13:45.32 ID:Gxqu5M/V.net]
>>727
いや、それは分かるけどコンボボックスに何かを表示する方法は分かってるのかという話。
それが分かれば後は頭の体操の話でしょ。

任意のリストでやるなら5個の文字列を連結したものを都度作成すれば良いし、テーブルでやるならUNIQUEにして追加削除すれば良んじゃね。



760 名前:デフォルトの名無しさん mailto:sage [2017/05/16(火) 22:08:47.69 ID:g0o7D5lq.net]
田中,安倍,中曽根,福田,小泉, 麻生 ・・・ がどう入力されるかだけど
田中,安倍,中曽根,中曽根,田中,小泉,福田,小泉,安倍, 麻生 ・・・
とかだと直近の重複しない名称が都度ドロップダウンリストボックス内で
変化していきそうで、それはそれで入力時に戸惑いそうだが

ドロップダウンリストボックスのソースを重複クエリ(>>723の言うstrSQLでもいいけど)で
セットすればいちばん簡単だけど、直近を抽出するにはレコード番号とか入力日時とか
を基準にして並べ替えする てことかな

氏名は例だろうけど、現物は何だろ? 面白そう 入力のたびに「あれ?」「ん?」って
声が聞こえて来そうだ(本人が使うんじゃ無ければ)

761 名前:718 mailto:sage [2017/05/16(火) 22:31:51.86 ID:CV++bHOB.net]
>>729
現物は顧客リストとパートナー営業さんのリストです

勿論、上記の氏名は例ですが、中曽根さんのデータを呼び出して30分くらい経って
「中曽根さんの○○の項目を更新忘れていたわ」ということが多々あるので、一旦呼び
出した人は履歴から簡単に再呼び出ししたいです。

平たく言うと、WebブラウザのHP履歴みたいなもんです。

762 名前:デフォルトの名無しさん [2017/05/16(火) 22:59:07.91 ID:9DoKORjf.net]
オートコンプリートね。
テンポラリテーブル作るのが
一番簡単かと。

763 名前:718 mailto:sage [2017/05/18(木) 02:38:44.45 ID:v5KhOq09.net]
>>731
ありがとう

764 名前:デフォルトの名無しさん [2017/06/06(火) 14:35:30.83 ID:7I4Q1TJn.net]
フォームから入力されたデータってレコードソースで指定しているクエリのテーブルに格納されるって認識あってますか

765 名前:デフォルトの名無しさん [2017/06/06(火) 14:38:41.23 ID:7I4Q1TJn.net]
>>733に追記です
DoCmd.RunCommand acCmdSaveRecordで保存されたデータはレコードソースのテーブルに格納されるでいいでしょうか。
基本的な質問ですみません

766 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 12:39:00.78 ID:m3sH3bSc.net]
テキストボックスが連結されていれば入力内容はテーブル(の連結フィールド)に保存されます。

767 名前:デフォルトの名無しさん [2017/06/07(水) 12:47:43.50 ID:bbXeH7ar.net]
>>735
すみません、テキストボックスとは何を指してますか、クエリのソースですか?

768 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) ]
[ここ壊れてます]

769 名前:22:15:49.46 ID:JlTkUU5d.net mailto: >>736
フォームに配置するオブジェクトのひとつ。他にコンボボックスとかリストボックス、コマンドボタンなんかがあります。
[]
[ここ壊れてます]



770 名前:デフォルトの名無しさん mailto:sage [2017/06/07(水) 22:22:23.86 ID:+eS8ypoQ.net]
何やら禅問答の様相を呈しているようだが
その入力フォームのレコードソースがクエリで、対象のテーブルに保存できるか?
という質問なら、DoCmd ・・・なんぞを使わずともレコードが移動した時点で保存される

ソースの無いフォーム上のテキストボックス群(等)に入力して、例えば[保存ボタン]などで
対象のテーブルにデータを保存するような使い方の場合には、その DoCmd ・・・を使って
それぞれ保存したいフィールドに各テキストボックス群(等)のデータを保存する でよろしいか
テキストボックス、コンボボックス、リストボックス、チェックボックス等々があるから・・群(等)と書いたけど

771 名前:デフォルトの名無しさん [2017/06/08(木) 12:41:56.61 ID:Gl6SA9F6.net]
>>738
はい、フォーム上のテキストボックスに入力されたデータの保存について聞きたいのですが、レコードソースのクエリで複数テーブルが結合している場合、共通のカラムのデータは結合しているすべてのテーブルに保存されますか

772 名前:デフォルトの名無しさん mailto:sage [2017/06/08(木) 21:37:20.87 ID:QO2QuDWb.net]
>>739
すみません、分かりません。
カラムっていうのは何だろ?フォームはデータシートビューなのかな。

773 名前:デフォルトの名無しさん mailto:sage [2017/06/08(木) 22:12:23.06 ID:ymWmjIat.net]
百聞は一見の喩えじゃないが、二日費やしてる間に試しで入れてみれば
100ヶテーブル繋げてても全部入るだろ あ、Max32だったか しかも結合は16までか
じゃあ16で  で、へぇ、なるほど、こうなるんだ って理解に繋がる

774 名前:デフォルトの名無しさん [2017/06/09(金) 14:32:01.31 ID:273W91RO.net]
>>740
カラムは列(項目)です
フォームビューです
本番環境で作業してるため、登録処理ができないので、教えていただきませんでしょうか

775 名前:デフォルトの名無しさん [2017/06/09(金) 14:33:57.33 ID:273W91RO.net]
レコードセットがダイナセットで、レコードソースのクエリが2つ以上のテーブルを結合しているときの登録されるテーブルを教えてほしいです

776 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 19:37:19.10 ID:arHWLDZ3.net]
クエリが複数のテーブルからできていても
そのクエリのカラムはどっちのテーブルのカラムか区別されてるぞ

777 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 23:11:20.98 ID:LJNVGfcK.net]
>>743
フォームプロパティのレコードソースからクエリのデザインできるウィンドウを開きます。項目フィールドがどのテーブルのものか定義されています。
正確な名称で答えられなくてすみません。布団の中からなので。

778 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 12:35:22.53 ID:CYlYHOF+.net]
easyComm使ってrs-232cで測定器つないでデータ取る、みたいなのが得意な人いる?

779 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 15:22:33.36 ID:mycfBP+w.net]
いない



780 名前:デフォルトの名無しさん mailto:sage [2017/06/13(火) 21:12:00.58 ID:R7Yl4a9U.net]
いませんか。仕方ない、コリコリ書くかな。

781 名前:デフォルトの名無しさん mailto:sage [2017/06/16(金) 21:29:11.74 ID:YDbGqV+E.net]
出来た!動いた!
測定器の制御とか本当はvisual studioとかで作成するんだろうけど、パソコンの性能がいつの間にか上がっててACCESSでもいけたよ!

782 名前:デフォルトの名無しさん [2017/06/17(土) 17:55:53.00 ID:n14YEU6w.net]
そのうち性能ωが上がってACCESSでBIGデータ扱ったり機械学習したりする時代が来るのか

783 名前:デフォルトの名無しさん [2017/06/22(木) 11:21:35.79 ID:1rSOLJ2h.net]
すごい基本的な質問ですみません
accessのSQLの言語って何ですかね
MYSQLとかですか

784 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 15:04:17.20 ID:+TFSs5XU.net]
SQLが言語だよ
すとらくちゃーどくえりーらんげーじ
だったかな

785 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 15:25:40.99 ID:9kjviait.net]
質問の意味も意図もよくわからんね。
access以外のシステムからSQL文をコピペしたいってことなのか!?

786 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 15:27:59.87 ID:T7aSUWBW.net]
>>751
MYSQLもSQL。
仕様があって、それに沿って各社実装してる。
が、独自部分も多いから同じSQLだからといって何処でも動くとは言えない。

787 名前:デフォルトの名無しさん [2017/06/22(木) 15:43:16.41 ID:1rSOLJ2h.net]
>>754
SQL言語もポスグレだったりPLSQLだったりあるじゃないですかそれで言うと何になるのか聞きたいんですけど

788 名前:デフォルトの名無しさん [2017/06/22(木) 15:44:58.51 ID:1rSOLJ2h.net]
勘違いしてたらすみません
SQLとMYSQLの関係ってCとC♯の関係ですか

789 名前:デフォルトの名無しさん [2017/06/22(木) 15:45:47.90 ID:1rSOLJ2h.net]
>>753
コピペでそんなこと気にする必要ありませんよね
気になったから質問したまでです



790 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 15:53:28.78 ID:wdLd6PlL.net]
SQLとMYSQLの関係は他人のSQLと自分のSQLの関係です
昔、金井克子という人が歌ってました

791 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 16:58:01.05 ID:zFId4oiO.net]
SQLというのはそれが言語
(たまにSQL言語以外の事をSQLと言っている場合もある)

ポスグレやMYSQLやACCESSはそのSQL言語を使う環境(の一部)
環境によりSQLに多少の差はある

ポスグレはSQL言語じゃない
PL/SQLはSQLを拡張した言語
ACCESSならSQLを超える範囲の言語はVBA

792 名前:デフォルトの名無しさん [2017/06/22(木) 17:53:43.99 ID:1rSOLJ2h.net]
>>759
よくわかりました、ありがとうございます

793 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 21:11:47.56 ID:f/XKrCgm.net]
>>757
他のSQLの構文をそのままコピペしてAccessで使うのは
うまくいかないこともある ことを気遣ってくれたんじゃね?
そんな言い捨てるようなレスはいけないと思いますよ

794 名前:デフォルトの名無しさん [2017/06/22(木) 21:17:42.32 ID:t4uJuvar.net]
>>761
なるほど
>>753失礼しました

795 名前:デフォルトの名無しさん mailto:sage [2017/06/22(木) 23:45:58.46 ID:Ddgcj+Nb.net]
>>762
素直な態度の人は成長するらしいですね。
良い事良い事。

796 名前:デフォルトの名無しさん mailto:sage [2017/06/30(金) 23:17:34.97 ID:8BMFafeA.net]
何でも良い、誰でも良いから質問すれ。

797 名前:デフォルトの名無しさん [2017/07/03(月) 12:15:52.25 ID:HFvRoHNk.net]
変数の宣言を強制するにチェック入れたのに
Option Explicit
が出てこないのですが
どうしたら出て来ますか?

798 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 12:56:00.26 ID:hBIZ2owM.net]
既存のコードには入らないよ
新規で作成するオブジェクトには入る

799 名前:デフォルトの名無しさん [2017/07/04(火) 16:03:28.67 ID:ce7knrBK.net]
Accessの神々よ、御教えを!

Accessでは、CHECK 句が使えないようですが、
カラム数が多いため、
いちいちプロパティから入力規則を設定するのは骨が折れます。

SQL で一括設定する方法をご伝授くださいませ〜



800 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 22:10:20.82 ID:WoXW+1QF.net]
えー、クエリ作ってからSQL表示してコピペ。
そんな事聞いてないよね。

801 名前:デフォルトの名無しさん [2017/07/05(水) 02:09:17.79 ID:EckUEWaI.net]
>>766
なるほどさんくす

802 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 10:03:04.42 ID:Qpg00Afa.net]
view

803 名前:デフォルトの名無しさん mailto:sage [2017/07/05(水) 17:39:45.65 ID:XEX8l1it.net]
win7x64-office2016x86環境下のみで再現するらしい
xls出力からコペピ張り付け罫線操作等々やってる処理で張り付したシートがズレル不具合発生
ネット調べても一切情報でてこなくて期待込めてofficeアプデしたら実行時エラー1401
空白でないセルが云々カンヌん泣きたい

804 名前:デフォルトの名無しさん mailto:sage [2017/07/20(木) 13:40:54.23 ID:AoFZnXDG.net]
自己レス
office365BPの2016でのみ再現
別シートの複数列コピー選択状態でAAセレクトインサートやろうとするとコピーペになる
セレクト前に空白セル1コピーで回避

805 名前:デフォルトの名無しさん [2017/07/21(金) 16:32:01.78 ID:28Rvh+yS.net]
クエリを実行したときに全件レコードを取得できてないのに検索結果画面が開くときってない?
▷|←このボタン押すと検索結果の件数が出てくるんだけど、押してから出るまでに時間がかかるってことは全件レコード取得できてないってことだよね

806 名前:デフォルトの名無しさん [2017/07/21(金) 16:32:40.55 ID:28Rvh+yS.net]
この現象を何なのか教えてほしい

807 名前:デフォルトの名無しさん [2017/07/21(金) 17:16:56.11 ID:PYWMukgm.net]
表示した後でも数字が勝手に増えるってこと?

808 名前:デフォルトの名無しさん [2017/07/21(金) 17:49:46.53 ID:28Rvh+yS.net]
>>775
いや、クエリのSQLをorderby句を書かなかったとき、全件検索する前に検索結果画面が開く

809 名前:デフォルトの名無しさん [2017/07/21(金) 17:55:49.86 ID:28Rvh+yS.net]
@orderby書いてクエリを実行する→1/2500みたいに結果件数がでる
Aorderby書かないでクエリを実行する→1 結果件数が上記と違いでない
▷|このボタンおすと上記と同じように1/2500となる

@の実行時間10秒
Aの実行時間1秒 ただし▷|ボタン押すと10秒くらいかかる



810 名前:デフォルトの名無しさん mailto:sage [2017/07/21(金) 21:47:28.80 ID:GPYD2Qke.net]
なんかオプションに無かったかな。最初の表示するぶんだけ読み込んでとりあえず見せておいて裏で続きを読むって機能をオンに、みたいな。

811 名前:デフォルトの名無しさん [2017/07/24(月) 04:02:58.29 ID:UL92A3MD.net]
>>778
あれば教えてほしいですね

812 名前:デフォルトの名無しさん mailto:sage [2017/07/24(月) 15:06:22.21 ID:BdqEvISL.net]
あった気がする

813 名前:デフォルトの名無しさん [2017/07/25(火) 22:56:57.38 ID:EiidKUEl.net]
会社テーブル
id  会社名  ・・・
1.  A社
2.  B社
3.  C社
4.  B社

職員テーブル
name  会社id  ・・・
山田.  1
鈴木.  1
飯田.  2
野口.  3
岡本.  4

一対多のリレーションがありまして
会社マスターにダブり登録されている場合(この場合B社)
楽に修正する方法はないでしょうか

250社くらいダブリやトリプルしていて困っております

814 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 07:07:59.14 ID:wP3Z6w42.net]
名寄せマスター
名寄せID 会社ID 新会社ID
1      2     2
1      4     2

名寄せマスターと職員テーブルをJOINしてUPDATE
というのはどうですか?

815 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 07:12:28.72 ID:XR9PfPcp.net]
その会社マスターがおかしいのを放置するのか修正するのかで違ってくるよね

816 名前:デフォルトの名無しさん mailto:sage [2017/07/26(水) 16:42:27.76 ID:Pvb1ow9Q.net]
合併したんかね

817 名前:デフォルトの名無しさん [2017/07/27(木) 20:31:02.25 ID:6NlFfxVd.net]
>>782
なるほど
重複クエリに各会社の最小IDを連結して名寄せテーブルを作成し
JOINしてUPDATEしました

名寄せテーブルを作成しないでクエリだけでUPDATEまでもっていくのは
この場合駄目なんですね はじめ理解できず悩みました

>>785
JOINしたAccessのデータをExcelに吐き出し各職場に配布、各々で修正追加。
一年以上たって回収しAccessに貼り付けられて今の状態です。
正確には職員テーブルじゃなくて顧客テーブルですね

818 名前:デフォルトの名無しさん mailto:sage [2017/07/27(木) 20:40:42.96 ID:DKmshiqQ.net]
なあんだ、Excelの段階で調整しちゃえば余計な苦労しなくて済んだのに

819 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 21:53:22.72 ID:FQn2qD+M.net]
初心者なんで教えて欲しいんだけど、フォームの次へボタン押した時に次のレコードが
表示されないのだがどうしたらいいか教えて欲しい。バージョンは2013
Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("名簿テーブル",dbOpenTable)
Me!名前テキスト = rs!名前
Me!カナテキスト = rs!よみがな
End Sub
Private Sub 次へボタン_Click()
DoCmd.GoToRecord , , acNext
End Sub



820 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 22:21:37.22 ID:16hy4odR.net]
フォームのソースが名簿テーブルならフォーム読み込み時の名前とよみがなセットするコードは無くても先頭レコードが表示される。
フォームのソースを確認しましょう。
非連結フォームならボタン押した時に次のレコードを読み込んで名前とよみがなセットするコードが必要だけど、キーが不明なので何ともアドバイスできません。
長々と書いたがわかりにくいね、すまん。

821 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 22:57:21.98 ID:GleVclNw.net]
>>788
ありがと

822 名前:デフォルトの名無しさん [2017/08/28(月) 11:23:53.36 ID:XLKoN0Ik.net]
神さま教えてください。

ADODB.Commandでのインサートが失敗しても
エラーが出ないのですが、エラーハンドリングの
方法を教えてください。

よろしくお願いします。

823 名前:デフォルトの名無しさん mailto:sage [2017/08/28(月) 21:14:51.01 ID:6Oo2q0tu.net]
on error

824 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 08:37:26.00 ID:SOL0jppX.net]
むしろonerrorしかないと思うが、他にやり方あんの?

825 名前:デフォルトの名無しさん [2017/08/29(火) 09:14:08.50 ID:WIE1SoZ9.net]
レスありがとうございます。
ON ERROR は当然やってまして
その上での質問です。

826 名前:デフォルトの名無しさん [2017/08/29(火) 21:25:59.80 ID:BqQa7G9t.net]
失敗ってなんだ。
戻り値を取ればAffectedRowsになってるだろうから
それで判断するか追加されたはずの行数をあらためSELECTするとか

827 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 11:14:08.03 ID:PQCfnSyv.net]
>>787
そのコードはFormがLoadされた時に名簿テーブルを開いてRecordsetに格納し、名前とカナをテキストボックスに入れるというものと次へボタンを押した時にFormがLoadされた時の処理とは全く関係なく次のレコ−ドに移動するもの。

ところで次へボタンでの次のレコ−ドってのは何のデ−タなんだい?
改めて言うけどFormがLoadされた時の処理なんて知らないからとAccess君は言っている。

要は、DoCmd.GotoRecordってのはデータとオブジェクトが連結されていることが想定されていて、連結されているから既にオブジェクトにレコードが表示されているわけだが、それに対して次のレコ−ドと言ってる。

一方、FormのLoad時の処理は連結関係無くデ−タを自ら取ってくるもの。
こちらのやり方を取るならRecordsetをPublic変数にするかForm内でのPrivate変数として保持しておき、他のイベント(次へボタンクリックのような)で使いまわすというやり方になる。

828 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 10:10:39.42 ID:as8vu/t7.net]
整数型、重複なしの列を書き換えるときはどうしてますか?たとえば、
2 1
3 → 2
1 3
にしたいときに2→1の時点でエラーが出ると思うので回避策を検討しています。
一時的に重複なしを解除して、終了時点で重複なしへ戻す方法や、一旦一時的に重複しない数字に書き換えて、それから再度書き換えるべきか悩んでいます。
なにか一般的な方法はございますか?

829 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 10:11:55.37 ID:as8vu/t7.net]
あれ、スペースがおかしくなっている。
列を書き直すときにたとえば
2→1
3→2
1→3
としたいのです。具体的にはidを振り直す作業です。



830 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 12:23:57.98 ID:TDbCG25M.net]
レンジのソートでよくね?
もしくはフィルタ付けて並び替えてからフィルタ解除とか

831 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 12:27:01.49 ID:taN4cymO.net]
idには触らないで、整数型のフィールドを追加します。そのフィールドでやりたい放題やります。

832 名前: mailto:sage [2017/11/22(水) 12:46:48.77 ID:MjBhGus4.net]
どうしてもやりたけりゃ、swapしていきゃいいんじゃないの?
最初は2→1にしたいから、
1 3 2に。
次は3を2にして
1 2 3
に。
入れ替え自体は、UPDATE xxx SET unique = CASE WNEN unique=1 THEN 2 WHEN unique=2 THEN 1 ELSE unique END
でCASEで書いちゃえば入れ替えられる。
1クエリ内で完結したら、制約はかからない。

833 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 13:21:54.54 ID:as8vu/t7.net]
>>798
済みません。AccessにもRangeというのがあるのですか?あと、フィルターの使い方も御教示をお願い致します。
>>799
それが、当該idを参照しているテーブルが20個以上あるので、別のコラムという訳にはいかないのです。
参照先を変更するとなるとクエリやらVBAのコードやらを書き換えないといけないので大変だと思います。
>>800
バブルソートみたいなものですね。レコード数が3万ありますので、何となく時間がかかりそうな気がしますが、試してみます。

今はソート後にDMax+iのループで重複しないidへ書き換えて、書き換えが終わってからDMaxを引くという2段階の作業をしています。
(参照元のidも2段階の書き換えをしています。))
我ながらドン臭いやり方だと思うので、もう少しスマートな方法があれば御教示をお願いいたします。

834 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 15:00:03.20 ID:t4MJ2LxN.net]
その列自体を書き換えちゃうの?
じゃあ、今入ってる値は必要無いってこと?
だったら削除して連番振り直したら?

835 名前:デフォルトの名無しさん [2017/11/22(水) 15:02:12.97 ID:TZAtmSaI.net]
今の時代なにが楽しくてAccessなんてやるんだ

836 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 15:50:01.09 ID:as8vu/t7.net]
>>802
idだから主キーです。Nullは不可だと思います。

837 名前: mailto:sage [2017/11/22(水) 16:48:33.62 ID:QspO8Ati.net]
>>801
もう組み合わせがわかってて、ほんとに単発で1回きりなら、
エクセルで対比表作って、CASEの列とWHENの列足してコピペでクエリ作っても良いけど、全く健全な保守ではない。
2 1
3 2
1 3
に列追加してオートフィルで

WHEN unique= 2 then 1
WHEN unique= 3 then 2
WHEN unique= 1 then 3
ってして、
unique= CASE

ELSE UNIQUE endで挟んで、コピペでテキストエディタに貼り付けて、テキストエディタからコピペでAccessに貼り付けるやつ。

しょっちゅうやるならテーブル見直そう。

838 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 16:57:08.62 ID:QHiNhW2y.net]
>>804
方法はいくらでもあると思うけど。
Field追加して連番を振って、追加したFieldを主キーに変更して元の主キーのFieldを削除するとか。
試してないからできるか分からんけど。

そんなことせずに振りなおすならOrderByでId順にして小さい値から振りなおしたら?

839 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 16:59:54.83 ID:QHiNhW2y.net]
ただ、主キーを振りなおす意味が分からない。
そういうもんじゃ無いと思うし、テーブルの連結によっては滅茶苦茶になるのは分かってるよね。



840 名前: mailto:sage [2017/11/22(水) 17:57:43.64 ID:QspO8Ati.net]
主キー振り直すのは、やむを得ずやるのはそのアプリのライフタイムに何発かあると思う。
業務系だと、「スキーマ変えるな」「デカいトランザクションはるな」「一時テーブルすら作るな」とか無茶苦茶言いよることもある。
でも、しょっちゅうやるならホントに設計考えたほうが良い。

841 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 18:29:23.78 ID:2YVJuPMl.net]
別に列作ってそっち主キーにすれば?

842 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 23:10:16.27 ID:as8vu/t7.net]
>>806
>>そんなことせずに振りなおすならOrderByでId順にして小さい値から振りなおしたら?
そんなことが出来るのですか?DAOもADOも1行ずつしかupdate出来ないから、重複データーが発生してしまって出来ないのですが…
>>807
ワークテーブルまで含めて数えなおしたら、35個のテーブルで件のidを使用していました。なので35個のテーブルに対して変更を行わないといけませんね。

843 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 23:11:54.97 ID:as8vu/t7.net]
>>809
それで解決するなら簡単ですね。やってみたいですね。
元の列の属性がすべて引き継がれるならいいですね。試してみます。

844 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 09:57:12.17 ID:wkO+ZdSN.net]
主キーの役割はレコードをユニークにすることだろ
並べ替えが必要ならそのための項目を別に用意するわ

作業量を問題にしてる

845 名前:けど
無茶な運用は後に響くよ
分かり易さを優先すべきだと思うわ
[]
[ここ壊れてます]

846 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:10:31.02 ID:fRZqdK5G.net]
主キーを解除して、重複可にして連番を書き込みました。その後に元に戻しました。変更前後の番号を配列に書き込んでおいて、その配列の値から関連するテーブル全部において置換作業を行うことにしました。
idが2万5000レコード、関連するテーブルのレコードが全部で100万近いのですが、2万5000の置換を100万レコードに対して行うので時間がかかりそうな気がしています。どのくらい時間がかかるのか計算する方法がありますかね?

847 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:21:50.25 ID:Q2HEJk5l.net]
accessにSQLコストを計算する機能はないよ

848 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 19:17:11.31 ID:fRZqdK5G.net]
主キーの削除をVBAでやろうとしているんだけど、メソッドが見つからない。SQLでやるしかないのかな?
下を読むとdeleteメソッドはダメみたいだし。
https://msdn.microsoft.com/ja-jp/library/office/ff197351.aspx
>>Deleteメソッドは、インデックスオブジェクトが新しいと、データベースに追加されていない場合にのみサポートします。

849 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 10:30:03.03 ID:eU9hnSW+.net]
無理矢理面倒臭い事をしているようにしか思えない
まぁ人の話を聞く気が無いみたいだし
好きに調べてやればええよ



850 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 17:21:43.17 ID:twASlFZz.net]
SQLであっさり出来たわ。後は置換をどうするかだな。関連するテーブル全部を置換できればすべて解決するけど、何を使うかだな。
SQLは遅いんだっけ?レコードセットでループ回す方が速いと読んだ気がする。

851 名前:デフォルトの名無しさん mailto:sage [2017/11/27(月) 22:26:05.40 ID:HF1f2kGW.net]
>>817
普通に考えればSQLの方が速いに決まってると思ってたが。
遅いとしたらその文書いた奴が悪いという印象。

ま、DB系については大したレベルにないから俺が間違ってるかも。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<273KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef