jquery セレクタの"@"について

によると1.3からはSizzleを使うことになりXPath?由来の"@"は使用しないことになったらしいが、 昔のソースを眺めていたらまだ使われていた。 そのソースではjqueryは1.3なんだけど動作しているように思え、念の為検証してみた。

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>test jquery 1.3</title>
  <script src="./jquery-1.3.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
     var v0 = $(":radio[@id]:checked").val();
     var v1 = $(":radio[id]:checked").val();
     var v2 = $(":radio['id']:checked").val();
     var v3 = $(":radio[@name='id']:checked").val();
     var v4 = $(":radio[name='id']:checked").val();
     $("#result0").text(v0);
     $("#result1").text(v1);
     $("#result2").text(v2);
     $("#result3").text(v3);
     $("#result4").text(v4);
   });
  </script>
  <style type="text/css">
  font-size: 10px;
  </style>
</head>
<body>
<h1>test result</h1>
<form action="">
  <input type="radio" name="id" value="0">0
  <input type="radio" name="id" value="1">1
  <input type="radio" name="id" value="2" checked="checked">2
  <input type="radio" name="id" value="3">3
</form>
<ul id="result">
  <li id="result0"></li>
  <li id="result1"></li>
  <li id="result2"></li>
  <li id="result3"></li>
  <li id="result4"></li>
</ul>
</body>
</html>

ローカル(Firefox, Chrome, IE11, Edge)で確認してみたところ、やっぱり動いている。 なお、上記のリリースノートにはアップグレードするには単純に"@"を削除しろと書いてあるけど、 [@attr]は['attr']と(当然)しないといけない。

Oracleでユーザまるごと削除しようとしたときのエラーについて

ユーザまるごとオブジェクトを削除しようとして、

SQL> DROP USER FOO CASCADE
行1でエラーが発生しました。
ORA-01940: 現在接続中のユーザを削除することは出来ません。

となるときがあり、もちろん接続しているユーザを確認してから実行したのだけれどなぜかそうなったときは、

SQL> select sid, serial#, username, program from v$session where username = 'FOO';

SQL> alter system kill session '上記のSID, 上記のSERIAL#`;

を実行してから、再度DROP USERを実行してうまくいった。

参考は以下。

https://teratail.com/questions/56956

VB 配列の初期化

VBで配列の初期化をしようと以下のようにしたところ

Public Sub Main()
    Dim index As Integer
    Dim dSample() As Double
    dSample = Array(1.1, 1.2, 1.3)

    'UBoundが参照することで「型が一致しません。」というコンパイルエラー
    For index = 0 To UBound(dSample)
        MsgBox (dSample(index))
    Next
End Sub

実行時エラー '13': 型が一致しません。

となった。 わからなくって、検索しててやっと以下のサイトに到着。

Variant型変数を使わずに配列を初期化する

どうも、型指定がVariantであればエラーにならないらしい(なんで?)。

Public Sub Main()
    Dim index As Integer
    'VariantだとArrayで初期化できる
    Dim sample() As Variant
    sample = Array(1.1, 1.2, 1.3)

    For index = 0 To UBound(sample)
        MsgBox (sample(index))
    Next
End Sub

見つけたサイトに書いてあるように、配列をStringで型指定していて Splitで設定していたときがあったので てっきり型指定しても問題ないもんだと思い込んでいたが違うらしい。

うーん、それなら型指定全部いらなくない?

VBで省略可能な引数の注意点

引数省略は便利なんだが、見た目がいまいちという場合は避けたいところ。

Sub subfunc(ByVal arg1 As String, Optional ByVal arg2 As String = "TEST2", Optional ByVal arg3 As String = "TEST3")
    ....
End Sub

....

subfunc("test1", , "test3")

こう書かれると、ぱっと見わかんないよね。コード可読性として問題なのでレビュー時、ボツにしたい。

省略可能なパラメーター (Visual Basic)

Excelのファイル同士の比較

ExcelにInquireというCOMアドインを入れることでExcel同士のファイル比較ができるらしい。 参照は以下。

https://kokodane.com/2013_waza_087.htm

  1. 「ファイル」ー「オプション」から「アドイン」を選択し、「管理:」からCOMアドインの設定をする。
  2. 「Inquire」をチェックして「OK」。
  3. そうすると「INQUIRE」タブ(2016だと「検査」)タブが追加されているのでそれを選択。
  4. 比較したいExcelを両方開いておく。
  5. 表示したリボンから「ファイルの比較」を選択。
  6. 比較対象のファイル名を選んで「比較」をクリック。

意外と便利ですよ。

VBA(VBS)で複数行を一行に書くには、一行を分割するには。

複数行を一行で書くには

コロン「:」を使う。

Sub debug(): MsgBox("テスト"): End Sub

一行を分割するには

アンダースコア 「_」を使う。

Sub debug()
    MsgBox("テスト",_
        vbYesNo)
End Sub

VBの文字チョイスのセンスが分からない。。。

where, group by, havingとかの評価(優先)順位

where -> group by -> having -> select -> order by

の順で評価するのでhavingにはselectでつけた別名を指定できない。order byには指定できる。

例:年が2010以降で名前ごとの件数が1より大きいものを大きい順で表示。

select name, count(*) cnt
  from TBL
 where year >= '2010'
 group by name
having count(*) > 1
 order by cnt desc
;