前めもの続き
■IIFのやばいやつ
Public Function a(value As Variant)
a = IIf(IsNumeric(value), CCur(value) & "a", value)
End Function
これを実行すればわかるけど、もしvalueが文字なら型が一致しないエラーとなる
IIFは式の結果にかかわらずとりあえずTRUE部もFALSE部も通る仕様らしい
たぶんSwitchも同じ
参考http://kuroeveryday.blogspot.jp/2015/02/vba-iif.html
■vbaでsql流してテーブル作成
短いテキストってchar(文字数)で指定するじゃないですか、するとデザインビュー上じゃ短いテキストになってるのに
勝手に空白埋めしてくれるんですよ、マジクソ
■式に未定義関数xxxがあります
SQLで関数を使おうとしてた時に、関数名が日本語だと発生(´・ω・`)
ただ、関数名日本語=必ず発生するわけではなさげ
関数と変数名に日本語を多用していることがばれてしまう(´・ω・`)
変なローマ字だと区別つきづらくなるし意味がパッと見分からなくなったりするじゃん(・3・)
□自作じゃない関数でも発生
とりあえずDBの最適化をして(たぶん直らないけど)、そのあとにACCESS自体の修復をすれば直るかもしれない
■このレコードセットは更新できません
主キーの設定されていないテーブルを結合してレコードソースにしたら更新できなくてなんかマズい
ダイナセット(矛盾を許す)にすると更新はできるけどやらない方がいいらしい
■主キー
主キーにnullはだめ
なのでワークテーブルには主キーを入れない方がいい
■ このマシンのほかのセッションによってロックされているので、更新できませんでした。
項目をDBに連結させてて、モジュールでUPDATEとかしてて、
メモ型にめっちゃ文字入れたら出る
■「型変換エラーのため、0個のフィールドをNullに設定しました。」みたいなやつ
そもそもテーブルにデータを登録できるか確認したほうがいい
・値要求項目が「はい」になっている
・ワークテーブルに主キーが設定されている
・列数がワークテーブル<テーブルになっている
■「引数が無効です」
長いテキスト型を短いテキストにすれば解消されるかもしれない
そもそも長いテキスト型を使っていない場合、テーブルが内部的に壊れている可能性が高い
https://support.microsoft.com/ja-jp/help/2480088
■これ以上データベースを開くことができません
最適化したらなおった
■フィルタを掛けたときに、フォーム名.項目名.FileURLのパラメータを聞かれる
SF_フォーム名.ナントカコード.FileURLみたいな感じ
テーブルでフィルタを使った場合も発生
原因は不明らしい?
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_access-mso_winother/access/0a562f6c-a7f2-4ab4-9fbd-9534993151fe
http://tenten100.blog123.fc2.com/blog-entry-679.html
1ケタの数値項目で発生?でも前日付型でも似たようなことが起きたような気がする
■配置バグ
http://hatenachips.blog34.fc2.com/blog-entry-408.html
■インポート
ファイル名に.があると失敗する
https://hamachan.info/win7/Access/inport_error.html
■shellからpdf起動時エラー
-2147024894-'Run' メソッドは失敗しました: 'IWshShell3' オブジェクト
ファイル名とかパスに空白があると出る
https://oshiete.goo.ne.jp/qa/9338065.html
このへんからDBとかSQLとか
■AccessにはLIMITが無い!
■SELECTしてINSERT
なんかNOT EXISTSつかってSELECT INSERTしようとしたら、
「insert into ステートメントに、認識できないフィールド があります。」とか何とか言われてINSERTできなかった。
テーブルを作り直しても改善しなかったので、INSERT INTO テーブル名の後ろにINSERTする項目名入れたらなぜかうまくいった。
意味わからん
同じ構成のテーブルだから、select *でいいじゃんね
■ODBCからテーブルをインポートすると
主キーの設定が消える
■order byでのnull
oracleにリンクしている場合とaccessにリンクしている場合の挙動が違う
oracleだと descでnullが先頭に
accessだとnullは最後
バージョンにもよるんかな
■JOIN
ACCESSでは基本的に3つ以上の表は結合できない
が、括弧でくくるとJOINできる
□こんな感じ
SELECT T1.*,T2.*,T3.* FROM ( T1
LEFT JOIN T1 ON ( T1.b = T2.id ) )
LEFT JOIN T3 ON ( T1.c = T3.id ) ;
■UNIONでnull文字の使い方が正しくありません
なんかUNIONする列でエラーを吐いているやつがあると出る
■最初の1件を取得
SELECT TOP 1 * FROM テーブル名
□注意
SELECT TOP 1 * FROM テーブル名 ORDER BY 項目
とかにすると、項目が一意でないときに複数件とれる
■UNIONしてINSERT
http://www.accessclub.jp/bbs3/0116/superbeg41047.html
注意:はまりました。
上記のインサート文、mdbのクエリ上等ではすんなり通るのですが、
asp上にSQL書いて実行してもエラーが帰ってきます。
『クエリの値と出力するフィールドの数が一致しません』と。
試行錯誤の結果、insert文2行目の『*』ではダメだ ということがわかりました。
明示的にcol名を指定してあげないと、うまく動きません。
http://www.servercan.net/bbp/topic.php?id=6
■ACCESSじゃ仕様が違った
http://d.hatena.ne.jp/CAMUS/20070609/1181354100
ところでACCESS CLUB何があったんや。。。