[過去ログ] Access VBA 質問スレ Part1 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
792: 2017/08/29(火)09:14 ID:WIE1SoZ9(1) AAS
レスありがとうございます。
ON ERROR は当然やってまして
その上での質問です。
793: 2017/08/29(火)21:25 ID:BqQa7G9t(1) AAS
失敗ってなんだ。
戻り値を取ればAffectedRowsになってるだろうから
それで判断するか追加されたはずの行数をあらためSELECTするとか
794: 2017/11/15(水)11:14 ID:PQCfnSyv(1) AAS
>>786
そのコードはFormがLoadされた時に名簿テーブルを開いてRecordsetに格納し、名前とカナをテキストボックスに入れるというものと次へボタンを押した時にFormがLoadされた時の処理とは全く関係なく次のレコ−ドに移動するもの。

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

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

一方、FormのLoad時の処理は連結関係無くデ−タを自ら取ってくるもの。
こちらのやり方を取るならRecordsetをPublic変数にするかForm内でのPrivate変数として保持しておき、他のイベント(次へボタンクリックのような)で使いまわすというやり方になる。
795: 2017/11/22(水)10:10 ID:as8vu/t7(1/6) AAS
整数型、重複なしの列を書き換えるときはどうしてますか?たとえば、
2 1
3 → 2
1 3
にしたいときに2→1の時点でエラーが出ると思うので回避策を検討しています。
一時的に重複なしを解除して、終了時点で重複なしへ戻す方法や、一旦一時的に重複しない数字に書き換えて、それから再度書き換えるべきか悩んでいます。
なにか一般的な方法はございますか?
796: 2017/11/22(水)10:11 ID:as8vu/t7(2/6) AAS
あれ、スペースがおかしくなっている。
列を書き直すときにたとえば
2→1
3→2
1→3
としたいのです。具体的にはidを振り直す作業です。
797
(1): 2017/11/22(水)12:23 ID:TDbCG25M(1) AAS
レンジのソートでよくね?
もしくはフィルタ付けて並び替えてからフィルタ解除とか
798
(1): 2017/11/22(水)12:27 ID:taN4cymO(1) AAS
idには触らないで、整数型のフィールドを追加します。そのフィールドでやりたい放題やります。
799
(1): 2017/11/22(水)12:46 ID:MjBhGus4(1) AAS
どうしてもやりたけりゃ、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
省2
800
(1): 2017/11/22(水)13:21 ID:as8vu/t7(3/6) AAS
>>797
済みません。AccessにもRangeというのがあるのですか?あと、フィルターの使い方も御教示をお願い致します。
>>798
それが、当該idを参照しているテーブルが20個以上あるので、別のコラムという訳にはいかないのです。
参照先を変更するとなるとクエリやらVBAのコードやらを書き換えないといけないので大変だと思います。
>>799
バブルソートみたいなものですね。レコード数が3万ありますので、何となく時間がかかりそうな気がしますが、試してみます。
省3
801
(1): 2017/11/22(水)15:00 ID:t4MJ2LxN(1) AAS
その列自体を書き換えちゃうの?
じゃあ、今入ってる値は必要無いってこと?
だったら削除して連番振り直したら?
802: 2017/11/22(水)15:02 ID:TZAtmSaI(1) AAS
今の時代なにが楽しくてAccessなんてやるんだ
803
(1): 2017/11/22(水)15:50 ID:as8vu/t7(4/6) AAS
>>801
idだから主キーです。Nullは不可だと思います。
804: 2017/11/22(水)16:48 ID:QspO8Ati(1/2) AAS
>>800
もう組み合わせがわかってて、ほんとに単発で1回きりなら、
エクセルで対比表作って、CASEの列とWHENの列足してコピペでクエリ作っても良いけど、全く健全な保守ではない。
2 1
3 2
1 3
に列追加してオートフィルで
省8
805
(1): 2017/11/22(水)16:57 ID:QHiNhW2y(1/2) AAS
>>803
方法はいくらでもあると思うけど。
Field追加して連番を振って、追加したFieldを主キーに変更して元の主キーのFieldを削除するとか。
試してないからできるか分からんけど。

そんなことせずに振りなおすならOrderByでId順にして小さい値から振りなおしたら?
806
(1): 2017/11/22(水)16:59 ID:QHiNhW2y(2/2) AAS
ただ、主キーを振りなおす意味が分からない。
そういうもんじゃ無いと思うし、テーブルの連結によっては滅茶苦茶になるのは分かってるよね。
807: 2017/11/22(水)17:57 ID:QspO8Ati(2/2) AAS
主キー振り直すのは、やむを得ずやるのはそのアプリのライフタイムに何発かあると思う。
業務系だと、「スキーマ変えるな」「デカいトランザクションはるな」「一時テーブルすら作るな」とか無茶苦茶言いよることもある。
でも、しょっちゅうやるならホントに設計考えたほうが良い。
808
(1): 2017/11/22(水)18:29 ID:2YVJuPMl(1) AAS
別に列作ってそっち主キーにすれば?
809: 2017/11/22(水)23:10 ID:as8vu/t7(5/6) AAS
>>805
>>そんなことせずに振りなおすならOrderByでId順にして小さい値から振りなおしたら?
そんなことが出来るのですか?DAOもADOも1行ずつしかupdate出来ないから、重複データーが発生してしまって出来ないのですが…
>>806
ワークテーブルまで含めて数えなおしたら、35個のテーブルで件のidを使用していました。なので35個のテーブルに対して変更を行わないといけませんね。
810: 2017/11/22(水)23:11 ID:as8vu/t7(6/6) AAS
>>808
それで解決するなら簡単ですね。やってみたいですね。
元の列の属性がすべて引き継がれるならいいですね。試してみます。
811: 2017/11/23(木)09:57 ID:wkO+ZdSN(1) AAS
主キーの役割はレコードをユニークにすることだろ
並べ替えが必要ならそのための項目を別に用意するわ

作業量を問題にしてるけど
無茶な運用は後に響くよ
分かり易さを優先すべきだと思うわ
812: 2017/11/24(金)12:10 ID:fRZqdK5G(1/2) AAS
主キーを解除して、重複可にして連番を書き込みました。その後に元に戻しました。変更前後の番号を配列に書き込んでおいて、その配列の値から関連するテーブル全部において置換作業を行うことにしました。
idが2万5000レコード、関連するテーブルのレコードが全部で100万近いのですが、2万5000の置換を100万レコードに対して行うので時間がかかりそうな気がしています。どのくらい時間がかかるのか計算する方法がありますかね?
813: 2017/11/24(金)12:21 ID:Q2HEJk5l(1) AAS
accessにSQLコストを計算する機能はないよ
814: 2017/11/24(金)19:17 ID:fRZqdK5G(2/2) AAS
主キーの削除をVBAでやろうとしているんだけど、メソッドが見つからない。SQLでやるしかないのかな?
下を読むとdeleteメソッドはダメみたいだし。
外部リンク[aspx]:msdn.microsoft.com
>>Deleteメソッドは、インデックスオブジェクトが新しいと、データベースに追加されていない場合にのみサポートします。
815: 2017/11/25(土)10:30 ID:eU9hnSW+(1) AAS
無理矢理面倒臭い事をしているようにしか思えない
まぁ人の話を聞く気が無いみたいだし
好きに調べてやればええよ
816
(1): 2017/11/27(月)17:21 ID:twASlFZz(1) AAS
SQLであっさり出来たわ。後は置換をどうするかだな。関連するテーブル全部を置換できればすべて解決するけど、何を使うかだな。
SQLは遅いんだっけ?レコードセットでループ回す方が速いと読んだ気がする。
817: 2017/11/27(月)22:26 ID:HF1f2kGW(1) AAS
>>816
普通に考えればSQLの方が速いに決まってると思ってたが。
遅いとしたらその文書いた奴が悪いという印象。

ま、DB系については大したレベルにないから俺が間違ってるかも。
818
(1): 2017/11/28(火)05:38 ID:GeGdCCsE(1/4) AAS
業務用ソフトのテーブルを眺めていたら、テキスト型のフィールドがあって、256桁の数字が羅列してあった
様々な設定を指定された桁に格納しているようですが、このようなデーター保存方法は一般的なんでしょうか?
他の言語でもあるのでしょうか?
819: 2017/11/28(火)05:58 ID:Brt1t867(1) AAS
>>818
あるんじゃないの?としか。どんなテーブルとか、フィールドの名前とか、なんかヒントはないですか? 様々な設定も謎が深まるだけですね。
820: 2017/11/28(火)09:43 ID:GeGdCCsE(2/4) AAS
たとえばあるフォームAのオプションボタンの値を98桁に書き込む、フォームBのチェックボックスの値は例えばCstr(Abs(True)))でstringへ変換して105桁に書き込むとかそんな感じです。
合理的な気もするのですが、こういう方法は検索しても見つからないので一般的なのか、特殊なアイデアなのか知りたくなりまして。
821
(2): 2017/11/28(火)11:59 ID:vHFzkUKA(1) AAS
すくなくともRDBを使う上ではやるなって言われてるやり方

固定長ファイルにデータ保存してるようなシステムなら結構あったけどね
822: 2017/11/28(火)16:08 ID:GeGdCCsE(3/4) AAS
>>821
そうなんですか。面白そうな話しなので調べてみようと思います。その手法はどういう名称なんですか?もしくは検索ワードを御教示頂けましたら幸いです。
823: 2017/11/28(火)18:29 ID:i1R8M5pm(1) AAS
RPG区分列とかじゃないの?古い呼び方だけど。
酷すぎてだれも触りたくないやつ。
RDBに移すような事があったら、末期には照合順序をbinaryにするしか無くなったりすごく苦しむから辞めた方がいい。
メリットらしいメリット無い。LIKEで雑に'[A-C]__1_2'みたいにSELECTできることぐらい。
824: 2017/11/28(火)18:44 ID:GeGdCCsE(4/4) AAS
残念ながら、ググっても何もヒットしません。
なにかヒントをお願い出来ますか?
825: 2017/12/01(金)16:18 ID:xc+Vk5Dr(1) AAS
RPGとRDBで検索したら関係ありそうなのがいくつかヒットしたけど。

検索能力は俺の方が上みたいだな。
826: 2017/12/02(土)14:50 ID:EvURnJTn(1) AAS
固定長ファイルでぐぐったら、先頭に固定長データファイルとはっていうサイトがでたけど
なにでどうググったんだか
827: 2017/12/04(月)10:19 ID:eu/J6Nzp(1) AAS
皆様、御指導、御鞭撻ありがとうございます。
COBOLでよく使う手法だったんですね。
件のmdbはコボラーが設計したんですかね。
828: 2017/12/04(月)23:04 ID:HIES1UEg(1) AAS
言語の問題じゃ無いと思うが
829
(1): 2017/12/05(火)01:17 ID:jk/z017d(1/2) AAS
そうなんですか。accessの本には全く載っていないでのすが、RDBMSの世界ではごく一般的な手法なんですか
830: 2017/12/05(火)13:50 ID:JFWc1rHJ(1) AAS
ISAM
831: 2017/12/05(火)14:44 ID:LtpZx+mu(1) AAS
>>829
>>821
832: 2017/12/05(火)16:01 ID:jk/z017d(2/2) AAS
言語の問題ではない
しかしRDBMSではやってはいけない
よくわからないけど昔のデーターベースの本を読んでみますわ
暇つぶしにちょうどいいわ
833: 2017/12/05(火)17:17 ID:Jckjy/ZT(1) AAS
自分たちが使うデータをどういった構造で保持するかは各自で考えて構わない
ただRDBに入れるのであれば、やってはいけなくもないけど、おすすめはしない、という話では?
RDBならテーブル・フィールド分けてデータもコードも見やすくできるのに、そうしないのはもったいないというかなんというか
834: 2017/12/05(火)19:05 ID:IwqbiEq4(1) AAS
結局何の解答にもなってないw
835: 名無し 2017/12/06(水)08:23 ID:qK37T0GP(1) AAS
データベースの列が増やせない何かがあった。
開発者の気まぐれ。手抜き。
従来の固定長ファイルと1:1の情報を保持したかった。
とかね。。。
こっちの業界じゃ拡張DM形式なんて固定長ファイルが普通にやり取りされてて、桁数制限とかが厳しいけど、容量の割に情報量が多いし古いソフトの互換性があるとかで100年以上生きると思うわ。
でも固定長ファイルの文字列をmdbに格納するのは正気とは思えない。データベースのメリット全部殺してるじゃん
836: 2017/12/06(水)08:50 ID:3RgxoH/J(1) AAS
固定長レコードw化石乙ww
837: 2017/12/06(水)09:56 ID:+yD4mhv+(1) AAS
郵便とのやり取りは今でも固定長フィールド使てんじゃね
さすがに今はないか、フロッピーとか
838: 2017/12/06(水)11:12 ID:dYt4FwS2(1) AAS
未だに固定長を扱う事はありますが、設計済みDBに展開して処理していますよ
839
(1): 2017/12/07(木)05:51 ID:opi4zWAm(1) AAS
固定長のEDI、増えたりしないだろうけどいつまでも残るんだろなあ。csvやtsvをメール添付で良いのにって思う。
840: 2017/12/07(木)12:12 ID:NfkoL/Di(1) AAS
固定長の方がパースが軽いからなぁ
あといつまでもなくならないレガシな環境とかな
処理系そのものは変更されてもIO部分の仕様変更はなかなかやらない
841: 2017/12/07(木)12:15 ID:YN66KLnO(1) AAS
今どき固定長レコードなんて使ってるのに前向きな理由なんて無いよ
842: 名無し 2017/12/07(木)17:45 ID:d4TqII+f(1) AAS
>>839
同じ拡張子なのに何十種類もバリエーションのある欠陥フォーマットを使うのはやめてくれ
843
(1): 2018/02/05(月)10:45 ID:e967XxUr(1/2) AAS
アクセス始めて触る初心者です。
テキストボックスが複数含まれたワードファイルが5000個ぐらいあります
各テキストボックスからいろんな項目を取得するとして、1ファイルあたり30項目ぐらい
つまり5000個のファイル*30項目=15,000項目
これをアクセスで処理していこうと思ってるんですが、アクセスはこの程度さくさく処理できるものでしょうか
目的は、ワードファイルが多すぎて邪魔なんで全部削除したい。必要に応じて元のファイルと同じものを再現できるようにするため、必要な情報をアクセスのデータベースに保存しておくことです
必要なファイルを再現できるように検索機能と再現機能をもったVBAマクロを組むつもりです
省2
844
(1): 2018/02/05(月)13:37 ID:KJpDTktT(1) AAS
>>843
初めて触る様な状態なら無理だから、諦めた方がいいですよ
845
(1): 2018/02/05(月)13:53 ID:e967XxUr(2/2) AAS
>>844
アクセスは初めてだけどエクセルVBAはそこそこ経験あります
エクセルVBAでなら自分で組める範疇ですね

すでにアクセスで途中までマクロは組んであります
同一フォルダ内にテスト用に作成してあるワードファイルを順次開いてすべてのテキストボックスの値、位置関連の数値を
Debug.Printで出力後、ワードファイルを閉じる
ここまでうまくいってるんであとはアクセスの基本機能理解すればそう困難ではないでしょう
省3
846
(1): 2018/02/05(月)20:59 ID:+YlQ+DNK(1) AAS
>>845
エクセルのテーブルに格納したらアクセスにインポートするのが良いんじゃない?
エクセルのままでも良いと思うけど、
847: 2018/02/06(火)08:18 ID:YHjH5DQb(1) AAS
>>846
それいいですね
やってみます
848: 2018/02/06(火)14:52 ID:Y79w2nNG(1/2) AAS
貴乃花親方にしろ有賀さつきにしろ
やはり「語らない」ことが年末から今年にかけてのポイントだな
逆に語っている方が何かと物議を醸しているし
849: 2018/02/06(火)14:53 ID:Y79w2nNG(2/2) AAS
ミスった
すまん
850: 2018/02/07(水)11:19 ID:mhmm9auu(1) AAS
医療過誤?
851: 2018/04/14(土)12:06 ID:bV7+SAsd(1/2) AAS
すみません質問させてください。

Private Sub Form_Load()
  Me.TimerInterval = 1000
End Sub

Sub Form_Timer()
  Static intShowPicture As Integer
  If intShowPicture Then
省8
852
(1): 2018/04/14(土)12:24 ID:2RkkR2xg(1) AAS
一秒毎に画像を出したり引っ込めたり
853
(1): 853 2018/04/14(土)12:53 ID:bV7+SAsd(2/2) AAS
ご回答ありがとう御座います。
イメージはなんとなく掴めたのですが、
この場合のintShowPictureには何が格納されているのでしょうか?
もしくはBoolean型なのでしょうか?
854
(1): 2018/04/14(土)16:08 ID:1T8oabCl(1) AAS
Static intShowPicture As Boolean
にして試してみろよ
855
(1): 2018/04/14(土)19:25 ID:cGW/rI9o(1) AAS
VBAには暗黙の変換ってのがあるから
IntegerをBooleanに暗黙的に変換して評価してる

まあ、あまり良いコードじゃないな
856: 851,853 2018/04/14(土)21:39 ID:criYFAGW(1) AAS
>>852さん
試しに、フォームと画像を用意して作ったら、点滅しました!
>>854さん
この文でも点滅しました!
>>855さん
Falseが0でTrueが-1なのですね!

ご回答ありがとうございました。
省1
857: 2018/04/15(日)10:38 ID:E1b18XLI(1) AAS
>Falseが0でTrueが-1なのですね!

そうだっけ?
858: 2018/04/15(日)12:40 ID:VXOW+WoG(1) AAS
Access で画像を点滅する?

そんなの普通は、JavaScript, jQuery とかだろ
859: 2018/04/15(日)22:05 ID:4uH7KTiu(1) AAS
ここは Access の質問スレですよ
860: 2018/04/21(土)00:22 ID:IpoNn3EX(1) AAS
10万件以上の大量レコードを追加するインサート処理をクエリを作成してDocmd.OpenQueryでやっているが時間が1分以上かかる
この処理をモジュールにADO、もしくはDAOでインサート処理を記述したら、Docmd.OpenQueryより早くなるかな?
861: 2018/04/21(土)12:05 ID:M/Q9a6+d(1) AAS
VBAで書くと数倍遅くなるんじゃね?
Cからなら速いかも知れん
862: 2018/04/21(土)14:39 ID:JSWmVJf3(1) AAS
たぶんクエリのほうが遥かに速い
863: 2018/04/21(土)16:21 ID:Zke6MJB8(1) AAS
OpenQueryをCから実行
864: 2018/04/21(土)17:48 ID:e0mRRnZY(1) AAS
BULK INSERT は?

そもそも、INSERT文は速くならない!
865
(1): 2018/04/22(日)14:54 ID:QBM3hGX3(1) AAS
10万が大量かどうかという問題も有るがRecordset + AddNewの方が速いと聞いたし、実際俺が組んだ場合も明らかに早いんだが。

状況にもよるかもしれんけど。
866: 2018/04/23(月)02:01 ID:zWK+uIrS(1/3) AAS
そもそもOpenQueryでどんなクエリ流してインサートしてるかわからんのに比較にならんわ
867: 2018/04/23(月)02:08 ID:zWK+uIrS(2/3) AAS
>>865
例えば単純な追加クエリや、INSERT SELECTするSQL発行するより
1件ずつAddNewして(どこかから値持ってきて)1カラムずつ値セットするほうが早いっての?
どこで聞いた話だそれ?
868
(1): 2018/04/23(月)09:13 ID:/uUuSWda(1) AAS
やってみてから言ってくれ。
俺の場合は実際早かった。

俺の場合は1カラムずつじゃなくてフィ―ルド名の配列と値の配列でAddNewだけど、たぶん1カラムずつセットしてUpdateでも早いんじゃないかな。
869: 2018/04/23(月)09:41 ID:Yo1LL5su(1) AAS
そんなあほな
870
(1): 2018/04/23(月)15:45 ID:YMq7Ch8w(1) AAS
SQLでもINSERT一回じゃなくて1行のINSERTを何度も繰り返したら遅くなるからな
それと比べるなよ
871
(1): 2018/04/23(月)17:22 ID:zWK+uIrS(3/3) AAS
>>868
やってみるから、フィールド数、フィールド長とレコード数教えれ
あと配列のデータどう用意するのかと、比較するクエリの元データどうすのかも

とうぜんACCESSと対象DBエンジンとADOかDAOのバージョンも明示してくれよ

で、ループまわして1レコードずつ.AddNewして.Updateするんだな

これでほんとにVBAが速いならちょっとACCESS使うの考えるわ
872: 2018/04/25(水)22:44 ID:dGu0vJMQ(1) AAS
>>870
そんな低レベルの話はしとらん。

>>871
たぶんフィールドは40~50ぐらいじゃね?
レコードは200万ぐらい。
リモートでOracleに接続してる。
JOINで20個位のテーブル繋げてるな。
省3
1-
あと 130 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.029s