コンパイルに引っ掛からない構文ミス
フォームテキストの必須入力をチェックし始めたところ、未入力のチェック構文で
IF Isnull(Me.・・)=true THEN としなければ正常にチェックできないのに
IF Me.・・=Null thenと記載した個所が数か所見つかりました。
何度かコンパイルして、構文チェックをしていたのですが、このミスは、コンパイルでは不具合として引っ掛からないものでした。
デバッグ(不具合の発見と修正)は難しいです。
« 2013年4月 | トップページ | 2013年6月 »
フォームテキストの必須入力をチェックし始めたところ、未入力のチェック構文で
IF Isnull(Me.・・)=true THEN としなければ正常にチェックできないのに
IF Me.・・=Null thenと記載した個所が数か所見つかりました。
何度かコンパイルして、構文チェックをしていたのですが、このミスは、コンパイルでは不具合として引っ掛からないものでした。
デバッグ(不具合の発見と修正)は難しいです。
いつも、修理で悩んだ時にお世話になっている、富士見市みずほ台駅西口の自転車屋さんRing japanさんで新規開業店の店長募集中です。
新規開店から、わずか1年で、2号店を出される繁盛店です。
経営、修理技術、接客等、多くの事が学べると思います。
詳しくは、下記の採用情報をご覧ください。
ボトムブラケットは、シールドベアリングだったので、清掃のみです。
後は、一気に組み上げましたが、ワイヤーの長さで悩みました。
自分の基準では、ダブつき気味だったのですが、折り畳み自転車なので、十分余裕を取った方がいいと思えます。
何回か折り畳み操作を繰り返して、ケーブル長の最適値を探しました。
実際に乗ってみて、ブレーキ、変速、フレームの剛性(折り畳み部の締結力)を確認しました。
懸案で残っていたハンドル折り畳み部のプラスチック部品(新型ハンドルステム内プラスティックパーツ)も入手の目途がつきました。
お引き渡し時に、ポジション、操作感、走行をチェックして頂き、最後の調整をします。
先日、パンクチェックをさせて頂いたお客様から、「チェーンが噛んでしまった」とのご依頼です。
チェーンが、スプロケットとスポークの間に落ちています。
チェーンを引っ張り出し、掛け直して、ディレーラーの可動範囲をチェックしましたが、無負荷では、特に問題となる動きはしていません。
念の為、実際に乗ってみると、ロー側に変速すると、落ちました。
先日の修理の際、サービスで、各部に注油したのですが、注油の所為で、ディレーラーの可動域が変わったようです。
ディレーラーの可動範囲を調整し、チェックミスをお詫びしました。
無負荷と乗車時で、何故変わるのかは、よく分かりません。
今後は、最終チェックは、実車して確認します。
折り畳み自転車なので、手持ちのメンテナンススタンド(ミノウラ スタンドRS-1600)にセットしていません。
後輪を取り付けないと自立してくれないので、後輪の整備取り付けを優先します。
スプロケットを取り外し、洗浄します。
2mm六角レンチでネジを1本外すと、全てのスプロケットが清掃できます。
組み立てる時は、ネジ穴と切り欠きの歯の幅の広い部分を合わせると元通りに組み上がります。
ハブのグリスの交換をして、玉当たりを調整して後輪のメンテナンスは終了です。
グリスは、ベアリング部はウレアグリス、カセットフリーの内部爪の部分は、低粘度グリスにしたかったので、手持ちのカンパグリスを使用しました。
一点、問題があり、スポークガードが硬化して、パリパリと割れてしまいます。
使い方によっては不要な部品ですが、念の為、交換部品を手配中です。
前輪のメンテナンスが終わったので、前フォークを組みます。
ヘッドは、インテグラルヘッドなので、ヘッドパイプに嵌めこまれたベアリングを分解してグリスアップします。
ベアリングの固定は、Cリングです。Cリングは、細身のドライバーを差し込んで、抉ってやると簡単に外れます。
ベアリング球をなくさないように気をつけながら、古いグリスを洗浄し、グリスアップします。
コラムの内側にネジが切ってあります。
SPECIALIZEDのプリントは有りますが、DAHONの機構をそのまま使っているようです。
スペーサーを2枚入れます。
締め込まれていないネジが4本有りますので、ネジロックで緩み止めをします。
当面は使えそうですが、割れた時に、コラムの固定が、どうなるか、ちょっと心配です。
お客様が購入されたお店はもう、SPECIALIZEDの扱いはないとの事で入手は難しいとの事でした。
今、DAHONの代理店に入手の可否を確認中です。
内ネジを切ってある方を外にしないと、軸を外せなくなります。
10mmの六角レンチでコラムに締め込み、ヘッドのガタつきと、回転を調整します。
部品コード変更機能追加中で紹介した、組合せ部品の画面ですが、部品コードの変更の機能追加は動作確認まで、完了しました。
画面を新しくしたので、その他の機能も含め、動作検証中です。
画面としては、前回画面から変更はなく、画像で紹介する内容は、特には有りません。
「何年も乗っていないので、点検と調整をお願いします」との事で、SPECIALIZED GLOBEという折り畳み自転車が我が家にきました。
この画像は、借り物ですが、アルミフレームの折り畳み自転車です。
一度、乗ってみましたが、折り畳み自転車への偏見が少しなくなりました。
小径だからなのか、フォークのオフセットの関係なのか、直進の安定性は今一ですが、フレームの剛性はすごく高くて、折り畳み自転車に抱いていた、フニャフニャなフレームという既成観念が覆りました。
ご依頼についての作業は、
回転部の動きの確認
変速の確認調整
ブレーキチェック
ワイヤーチェック
ネジ部の固定確認
までですが、折角お預かりしたのと、多少お時間を頂けるとの事で、清掃をきちっとやってみようと思っています。(店主の趣味の領域です)
各部の写真を撮りながら、外せるパーツはすべて外し、フレームの清掃に入りました。
部品同士で傷がつかないよう、ペーパータオルにくるんで、ひと箱に纏めてあります。
フレームの清掃が終わったら、ひとつづつ、清掃しながら、組み付けていきます。
フレームは、クリヤー塗装がされているようですが、塗装が柔らかく、汚れの付着がなかなか落ちません。
一度、クリアーを剥がすつもりで、清掃作業をしています。
自転車パーキングで、前・後輪共ロックされた自転車の後輪パンクの修理依頼をお受けしました。
パンクはしておらず、少々手間は掛かりましたが、ご依頼主の帰宅時間に間に合わせて、パンクチェック完了。
のはずだったのですが、30分後に、今保育園にいるんですが、空気が抜けていて、自転車がパンクしていますとのお電話です。
保育園では、時間が決められていて、待てませんとの事で、徒歩で自宅まで帰られました。
申し訳ありませんでした。
その後の対応ですが、保育園にお伺いし、再度の修理を行いましたが、パンクチェックでは、やはりパンク個所は有りません。
実は、このチューブは、スライム(パンク防止・修理剤)入りでした。いつもなら、時間があるので、スライム(パンク防止・修理剤)を抜いてから修理するのですが、最初の修理は、その後の予定が詰まっておられたので、スライム(パンク防止・修理剤)を抜かずに対処しました。
断言はできませんが、スライム(パンク防止・修理剤)起因のバルブからの空気漏れを疑っています。
再発させる訳にはいかず、安全策で、チューブ交換での対処となりました。
どなたか、スライム(パンク防止・修理剤)入りチューブのバルブコア交換の手順を御教示下さい。
【2016.12.15追記】
実はこの頃は、修理にお伺いする都度、スペシャルGバルブに交換していました。
スペシャルGバルブのゴム栓に、スライム(パンク防止・修理剤)の繊維が引っ掛かり、エアー抜けしたのが真相です。
アプリが売れました」で落札された、Accessで作った青色申告作成システムですが、落札から1週間経過しましたが、取引連絡での進展がありません。
「アプリが売れました。その後-1」で削除するしかないのかと書きましたが、このまま放置する事にしました。
出品者としては、「出品内容が不明確だった」という反省点があります。
落札者の方に対して、落札前に質問をしてくれれば!という不満はありますし、「落札した以上は、ちゃんと責任を全うしろ」と言いたい気持ちも当然あります。
でも、出品した青色申告作成システムに興味を持って頂いたのが、嬉しいです。
削除すれば、悪い評価が付きます。自分にも非がありますので、悪い評価は付けたくありません。
オークションのシステム上では、落札後の推移は結果に関係なさそうなので、このままにしておき、落札手数料を負担することに決めました。
自分なりに、結論が出せたので、すっきりしました。
今日は、自分にとってですが、珍しい修理を2件こなしました。
1件は、前後タイヤのローテーション。
ローテーション中にパンクを発見しましたが、時間の余裕(気持ちの余裕?)がなかったので、修理済みの中古チューブに交換しました。
そこそこに、使いこまれたPanasonicブランドの自転車ですが、屋外保管にも拘わらず、殆ど錆びの発生がありません。やはり値段だけの事はあります。
もう一件は、内装変速の変速ワイヤー交換です。
この修理は、苦手です。
何が苦手かというと、内装変速のワイヤーは両端が太鼓で、長さの合わない部品が使えません。
ワイヤーを外すまでは、長さが判らない為、それなりの長さの部品を何種類か持って行くのですが、袋から出さないと、長さが合わせられないのが嫌です。
今回も、袋を開けると、2cm長かったのですが、着けて見たら、大丈夫でした。
少々長いのは、なんとかなりますが、短いと窮屈になります。結局は、着けて見なければ判らないというのが、実感です。
修理中に、すぐ来てもらえませんかの電話ははいるし、出かける前に、メールで依頼は入るしで余裕がなく、画像がありません。
部品のコードを変更する機能を追加中ですが、
全部で13のテーブルのデータを同時に修正する必要がありました。
単純な置き換えで更新すればよいテーブルが10個
変更後の部品コードを追加しなければいけないテーブルが3個です。
単純な置き換えは、手間だけでしたが、部品コードの追加で、悩みました。
部品コード以外のデータは、追加時に同じ値を持って、部品コードだけが更新されれば、一回のテーブル操作で済みます。
SQLのINSERT INTO文を使って、同じ値のデータを追加することは、すぐに出来たのですが、
追加時に新しいい部品コードに更新する事がなかなか出来ませんでした。
VALUESを使えば、新しい値を書き込めるのは判っているのですが、それではINSERT INTOとUPDATEの2段階の処理が必要になります。
Access以外ではvalues select文を使ってやりたい事が出来る記事を見つけたのですが、うまく動きませんでした。
試行錯誤の結果ですが、Accessでも下記のSQL文で、更新しながら、追加する事が出来ました。
【SQL文】
strSQL = "INSERT INTO M_修理使用部品対応表 ( 修理コード, 部品コード) "
strSQL = strSQL & "SELECT M_修理使用部品対応表.修理コード, '" & Code2 & "' AS 部品コード "
strSQL = strSQL & "FROM M_修理使用部品対応表 "
strSQL = strSQL & "WHERE (((M_修理使用部品対応表.部品コード)='" & Code1 & "'));"
DoCmd.RunSQL strSQL, True
'" & Code2 & "' AS 部品コード "と書いてやる事で、部品コードのデータが、 Code2変数の値に更新されたレコードが追加されます。
「アプリが売れました。」と喜んだのですが、オークションの取引連絡を2度しましたが、ご連絡を頂けません。
20日まで待ってみて、連絡が頂けなければ、削除するしかなさそうです。
出品しているオークションのカテゴリーを見に行くと、同じ機能の自作ソフトが、3種出品されていました。
みんな、私の出品価格より安いです。
これでは、売れる訳がないと、自嘲しています。
「売る気がないの」と言われれば、実の所は、「売れればラッキー」のつもりで出品していました。
何故?
実は、当初の思惑は、オークションに出品し、出品物から自分のホームページへのリンクを貼る事で、ホームページのアクセスアップを期待していたからです。
そういう意味では、目的を達成できていたので、出品したカテゴリーの状態も気にしていませんでした。
サンプル版を同様の思惑で、Vecterというソフトの紹介サイトにアップしていますが、こちらでは、少しづつですが、ダウンロードして頂いています。
もう少し、待ってみて、結果が出たら、またご報告します。
修理コードと部品コードの1対多対応に加えて、修理コードは、整理が出来る機能を追加しました。
併せて、部品コードの整理をする為、部品コードの変更機能を追加中です。
二つのフォームに、追加していますが、機能は全く同じです。気付いた時に、その画面で修正できるよう、それぞれに追加しました。
実際は、後2画面、追加の予定ですが、その2画面を統合する方が使いやすそうなので、統合後に、追加する予定です。
修理コードと違って、並べ替えの必要はないのですが、部品のコードは、随分沢山のテーブルに結果として保存されています。
修正をミスすると、手作業で修正をする事になります。
落ちがないように修正するのが大変です。あせらずにやります。取敢えずは、変更前のコードと、変更後のコードの取得まで完了しています。
中途半端で止まっていたバルブ根元パンクの修理ですが、まだ、諦めたわけではありません。
バルブ根元に発生した、ゴムの亀裂を再接着することは、断念しました。
今のバルブを取り去り、新たなバルブを取り付ける方向で検討中ですが、重ねて貼るには、厚みがあり、堅い事から、重ねずに張る事を検討しています。
頭の中では、シュミレーションは終わっているのですが、実際にやるには、いろいろと準備が必要で、その為の道具を作る事から開始します。
新しいバルブを糊付け後、穴開きパッチで、固定します。
これで、駄目なら、かっこ悪いですが、新しいゴム座付きのバルブを、大きな穴開きパッチを作って、押えこむ事を考えます。
お店での修理なら、電動のやすりを使って、古いゴム座を取り除いて、バルブ側もチューブ分のゴムを削って、という作業で、修理が出来そうな気がします。
ここまでの、手間暇を掛けて、修理するものか?という気もしますが、ここまで来ると、意地と、自分の力を試したい慾だけです。
フライス盤も動かさなければ、先に進めませんので、まだまだ、先は長いです。
明日5/14日(火)は、結婚式出席のため、申し訳ありませんが、本当に、臨時休業とさせていただきます。
明後日は、休まず、営業いたします。
VBAの参照設定でACCESSの2003と2007で不具合があったが、再現できなかったと記事を書きました。
古いバージョンの操作用MDBで確認したところ、
2007でOFFICE関連の参照不可が出ていたことが判りました。
この参照自体は、今の統合管理には不要なものなので、今後の作成バージョンでは、あらかじめ外します。
ということで、原因は判ってすっきりしました。
すっきりついでに、参照不可を回避するコードも検証しました。
今の統合管理では、AutoExecと名づけたマクロ(起動時に自動実行します。)で初期設定の為のモジュールを動かしています。
【VBAコード】
'参照設定の有無チェック
For Each Ref In References
If Dir(Ref.FullPath) = "" Then
Application.References.Remove Ref
End If
Next Ref
は、有効に機能していましたが、同じモジュールに下記のコードが存在すると、起動時にエラーとなって、進みませんでした。
モジュールの外に SUB として出して、コールするようにすると、回避できました。
何故、エラーが発生したのか良くはわかっていません。
停止時には、Formatがフォーカスされていましたので、多分、このコード内に、参照不可と絡む部分があったのだと思います。
'If GetINIValue("使用年度", "Data", CurrentProject.Path & "\" & "A_Tougou.INI") = "" Then '3月14日のチェック
' If Format("03/14", "m") - Format(Date, "m") > 0 Then
' DoCmd.OpenForm "F_使用年度選択", , , , , acDialog
' ElseIf Format("03/14", "m") - Format(Date, "m") = 0 Then
' If Format("03/14", "d") >= Format(Date, "d") Then
' DoCmd.OpenForm "F_使用年度選択", , , , , acDialog
' End If
' Else
' SetINI = SetINIValue(Format(Date, "yyyy"), "使用年度", "Data", CurrentProject.Path & "\" & "A_Tougou.INI")
' End If
' End If
尚、デバッグモードでは、
今日は、修理?ではありませんが。
ちょっと気になるご訪問です。
川越市上戸のお客様から、「バルブのコアを抜かれた。」とのご依頼でした。
後輪は、コアもキャップもない状態で、前輪は、緩められた状態で空気が抜けていました。
かなり前になりますが、今回のお客様のお近くで、カッターによると思われるパンクもありました。
入間川のお近くにお住まいの方は、ご注意ください。
まだ作成途上ですが、自転車店統合システムを使って見たいとのお申し出があり、最新版をアップしようとして、四苦八苦してしまいました。
統合管理システムは、ACCESSの2003、2007、2010で動作を確認しているつもりでした。
2003と2007を共存させた環境で、問題なく、動いていたはずなのですが、共存させずに単独でインストールして確認すると参照設定で参照不可が表示されることを見つけ、チェック中です。
ところが、今日は、2003で動作を確認し、2003を削除して、2007をインストールしても参照不可が発生しません。
2003の参照設定画面
レファレンス名と、フルパスは、以下の通りです。
VBA ;C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6.DLL
Access ;C:\Program Files\Microsoft Office\OFFICE11\MSACC.OLB
stdole ;C:\WINDOWS\system32\stdole2.tlb
DAO ;C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll
VBIDE;C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB
2007の参照設定画面
レファレンス名と、フルパスは、以下の通りです。
VBA ;C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6.DLL
Access ;C:\Program Files\Microsoft Office\Office12\MSACC.OLB
stdole ;C:\WINDOWS\system32\stdole2.tlb
DAO ;C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll
VBIDE;C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB
現象が起きないので、不具合箇所がはっきりしませんが、
【VBAコード】
'参照設定の有無チェック
For Each Ref In References
If Dir(Ref.FullPath) <> "" Then 【訂正→】If Dir(Ref.FullPath) = "" Then
Application.References.Remove Ref
End If
Next Ref
で、ファイルがないときは、参照を外ずしてくれる?、チェックを追加しました。
もう少し、検証しながら、動作チェックを続けます。
自分が作ったのですが、使う都度、どう使うかを考え直すぐらい、使いにくく、理解しにくかった料金マスターのフォームを、テーブル変更を機に作り直しを始めました。
旧フォーム:
修理料金と、関連の部品が一覧で表示されています。部品が全て表示されている為、かえって、料金と、部品の関連が判りにくかったです。
部品を追加するときに、いつも悩んでいました。
まだ作成途上ですが、修理内容をクリックすると、関連部品が絞り込まれて表示されるようにします。
料金と、部品の関連が、分けた事で却って見やすくなったように思います。
コマンドボタンの意味も、理解しいやすくなったと自分では感じています。
表を分けた事、料金もサブフォーム化したことで、VBAのコードは、ほぼ全面的に見直しです。
まだ手直しも入るかもしれませんが、基本的には、このフォームにする予定です。
所用にて5月8日(水曜日)はお休みを頂きます。
5月9日は営業いたします。
今日は毎年恒例の甥っ子主催のバーベキューに参加して来ました。
バージョンアップに伴って、リンク元のDBにいくつかテーブルを追加しています。
勘違いして、作業用のDBのリンクテーブルの有無で、バージョンアップの前後を判定していたのですが、これでは、常に、新規作成のテーブルを作業用のDBから削除しないと直前のバージョンからしかバージョンアップ出来ない事に気づきました。
下記の通り、リンク元のDBのテーブル有無を判定して、テーブルを作成するよう訂正しました。
【VBAコード】
Set dbs = DBEngine(0).OpenDatabase(Replace(strConnect, ";DATABASE=", ""))
For Each rs In dbs.TableDefs
tblcr = tblcr & rs.Name 'リンク元テーブル名取得
Next rs
'M_修理使用部品対応表追加
If InStr(tblcr, "M_修理使用部品対応表") = 0 Then
Call Syuuri_buhin
DoCmd.SelectObject acForm, "", True
DoCmd.RunCommand acCmdWindowHide
End If
dbs.Close: Set dbs = Nothing
Call Syuuri_buhinのコードは、リンクテーブルのフィールド削除で紹介したので、割愛します。
去年も、やりましたが、今年も南側の窓にグリーンカーテンを設置します。
今年は、去年貼ったネットを再利用です。
太めのタイラップで、かなりしっかりと止めています。
タイラップの締め方は、去年の記事を参考にして下さい。
https://anocora.cocolog-nifty.com/blog/2012/05/post-9e78.html
昨日悩んでいた、修理コードの加算処理ですが、データを降順に並べ替えたとしても、並び順に処理が進む訳ではないという事が判り、インデックスを固有から重複ありに変更しました。
変更方法が判らず、一旦削除して、再度作る事で、対処しました。
【VBAコード】
'M_料金のインデックス設定変更
tb.Indexes.Delete "修理コード"
Set idx = tb.CreateIndex("修理コード")
idx.Fields.Append idx.CreateField("修理コード")
idx.Unique = False
'作成したIndexを追加
tb.Indexes.Append idx
フォームにも挿入のコマンドボタンを追加しました。
前後の関連で、見通しの良い、マスターデータが作成できるようになります。
今のところは、加算処理が終わっただけですが、同じ流れで、減算処理も可能です。
加算、減算が出来れば、変更処理の実装は出来ますが、変更ボタンの意味を理解してもらえる画面作りの方が、難しそうです。しばらく使いながら、フォームは判り易く変更していきます。
修理コードの挿入処理に挑戦中ですが、立ち往生しています。
文字列の数値化は、なんとかなったのですが、固有インデクッスを貼っている為に、加算処理しようとすると、エラーが発生します。
先日の、フィールドの削除時に、インデックスを削除したことを思い出し、同様に処理しようとしましたが、フォームを開いた状態では、インデックスの削除も不可でした。
残る手段として思いつくのは、インデックスの削除を別なタイミングでやるか、テーブルを降順で並べ直してから処理するかぐらいです。
インデックスの削除は、速度の低下を懸念しなければならず、やるとしても、固有インデックスではなく、重複可能なインデックスに変更する事になります。
どちらにしても、もう少し検討しなければ、という状況です。
最近のコメント