MySQLのDELETE

調べるまでもなく...DELETE文だということは想像できる。
しかし、

DELETE table_name WHERE pk = 1

これはダメ。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near...


DELETE FROM table_name WHERE pk = 1

FROMがしっかり入っていないと弾かれてしまう。

SQLServerではFROMがなくてもいきなり削除できるのだが、
MySQLはどうもこういう部分は厳密に書かないといけないようだ。

世界に一つだけのメモ

The PocketMod[http://www.pocketmod.com/]

A4コピー用紙を使ってオリジナルのメモを作ることができる。
画面右上の Create a PocketMod をクリック。
そのあとはHelpを見ればわかるのだが...

1.Widgetsから用紙を選択(カバーなどは情報を編集できる)
2.選択された用紙を右側にドラッグ&ドロップ
3.Print PocketMod! で印刷

捨ててもいいようなちょっとしたメモ書き用に重宝する。
寄付も受け付けているようだ。

Firefox3.6 リンクを新しいタブで開く

最近のFirefoxはタブ関係でいきなり仕様変更がされるようだ。
3.6では新しいタブを開く際に、現在開いているタブのすぐ隣に新しいタブが開くようになった。これはIEに合わせた仕様変更なのかもしれないが、従来の仕様に慣れていると違和感がある。

1.about:config;
2.browser.tabs.insertRalatedAfterCurrent = false (tabs.でインテリセンス )

どちらが使いやすいかはユーザー次第だが、こうやって自分の使いやすいようにすぐにカスタマイズできるのがいいですね。

AJAX.NETのCalendarExtenderのカレンダーを日本語に

日本語にするだけなら……
配置してある ScriptManager の EnableScriptGlobalization=true に。

MySQLのAUTO_INCREMENT取得

INSERTしながら新しく追加したキーをもとに更新をかけたいというケースはよくあると思う。

INSERT INTO test1 (a1) VALUES ('hoge');
INSERT INTO test2 (key) VALUES (LAST_INSERT_ID());

LAST_INSERT_ID()は直前に自動挿入されたキーを取得する。test1 に自動挿入フィールドがあった場合、挿入されたキーを取得し、それを元に test2 を更新する。

MySQLのtopやらrownumやら特定の行を取得するコマンド


limit 0, 1

SQLServer: top 1
Oracle: rownum = 1

Unable to convert MySQL date/time value to System.DateTime

テーブルに途中から日付型のフィールドを追加したケースにて。
すでに存在するレコードには「0000-00-00 00:00:00」が入ってしまう。これはデフォルト値であり、SQLでSELECT文を発行しても普通に取得できる。

しかしながら、これを.NETからMySQL Connector.NET経由で取得した際には話が違うらしく日付型に変換できずに落ちてしまう。


.NETからは不正なデータに見えるようだ。
無効なレコードが発生しないように注意を払わなければいけない。

MySQLの予約語に注意

SQLコマンドにおいて、列名が予約語とかぶっていないかは基本であるのだが。
phpMyAdminでテーブルを作っていたときに実は予約語を使ってフィールドを作っていた。
普通はすぐに気づきそうなものだが……

SELECT * FROM test

このように全フィールドを参照しているとエラーにはならなかった。
しかし、

SELECT show FROM test

このように書くとエラーになった。
エラーが発生しているが原因がいまいちつかめないときはフィールド名が予約語とぶつかっていないかチェックしてみるといいかもしれない。普通はすぐに気づくが(笑)。


ちなみに、MySQLの予約語は以下のようなものがある。
すべてではないが。
ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
BEFORE
BETWEEN
BIGINT
BINARY
BLOB
BOTH
BY
CASCADE
CASE
CHANGE
CHAR
CHARACTER
CHECK
COLLATE
COLUMN
COLUMNS
CONSTRAINT
CONVERT
CREATE
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
DATABASE
DATABASES
DAY_HOUR
DAY_MICROSECOND
DAY_MINUTE
DAY_SECOND
DEC
DECIMAL
DEFAULT
DELAYED
DELETE
DESC
DESCRIBE
DISTINCT
DISTINCTROW
DIV
DOUBLE
DROP
DUAL
ELSE
ENCLOSED
ESCAPED
EXISTS
EXPLAIN
FALSE
FIELDS
FLOAT
FLOAT4
FLOAT8
FOR
FORCE
FOREIGN
FROM
FULLTEXT
GRANT
GROUP
HAVING
HIGH_PRIORITY
HOUR_MICROSECOND
HOUR_MINUTE
HOUR_SECOND
IF
IGNORE
IN
INDEX
INFILE
INNER
INSERT
INT
INT1
INT2
INT3
INT4
INT8
INTEGER
INTERVAL
INTO
IS
JOIN
KEY
KEYS
KILL
LEADING
LEFT
LIKE
LIMIT
LINES
LOAD
LOCALTIME
LOCALTIMESTAMP
LOCK
LONG
LONGBLOB
LONGTEXT
LOW_PRIORITY
MATCH
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT
MINUTE_MICROSECOND
MINUTE_SECOND
MOD
NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL
NUMERIC
ON
OPTIMIZE
OPTION
OPTIONALLY
OR
ORDER
OUTER
OUTFILE
PRECISION
PRIMARY
PRIVILEGES
PROCEDURE
PURGE
READ
REAL
REFERENCES
REGEXP
RENAME
REPLACE
REQUIRE
RESTRICT
REVOKE
RIGHT
RLIKE
SECOND_MICROSECOND
SELECT
SEPARATOR
SET
SHOW
SMALLINT
SONAME
SPATIAL
SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT
SSL
STARTING
STRAIGHT_JOIN
TABLE
TABLES
TERMINATED
THEN
TINYBLOB
TINYINT
TINYTEXT
TO
TRAILING
TRUE
UNION
UNIQUE
UNLOCK
UNSIGNED
UPDATE
USAGE
USE
USING
UTC_DATE
UTC_TIME
UTC_TIMESTAMP
VALUES
VARBINARY
VARCHAR
VARCHARACTER
VARYING
WHEN
WHERE
WITH
WRITE
XOR
YEAR_MONTH
ZEROFILL

ちなみに、ASP.NETから。
データバインドをした際には前述した show フィールドは特にエラーにならずにバインドできていた。

バーベイタム(verbatim)

文字列を扱う際に、「\」(円マーク, バックスラッシュ)は通常エスケープ文字として使用される。したがって、「\」そのものを使用する際には二つつなげてあげる必要がある。

string s1 = "C:\WINDOWS"; // NG (認識できないエスケープ シーケンスです。)
string s2 = "C:\\WINDOWS"; // OK

文字列の前に「@」(アットマーク)を付けてやることで(verbatim文字列)そのまま出力可能。

string s1 = @"C:\WINDOWS"; // OK
string s2 = "C:\\WINDOWS"; // OK
Console.WriteLine(s1); // C:\WINDOWS
Console.WriteLine(s2); // C:\WINDOWS

可読性はこちらの方が良いかもしれないが、好みもあると思う。ただ、覚えておいて損はないと思う。

ちなみにVB.NETでは...

Dim s1 As String = "C:\WINDOWS"
Dim s2 As String = "C:\\WINDOWS"
Console.WriteLine(s1) ' C:\WINDOWS
Console.WriteLine(s2) ' C:\\WINDOWS

そのまま出力可能。

ASP.NET アクセスが拒否されました

ファイルをコピーしてプロジェクトを開いたときにありがちなエラー。


"ASP.NETコンピュータアカウント"にアクセス権を付与する。
コンピュータ名\ASPNET である。

他にも読み取り専用になっていることもあるので解除する。

.NETインデクサによる文字列アクセス

文字列から任意の位置の文字を取り出すことができる。
書き方はまるで配列のようだ。

C#

string s = "あいうえお";
Console.WriteLine(s[1]); // 出力: い

VB.NET

Dim s As String = "あいうえお"
Console.WriteLine(s(1)) ' 出力:い


「○文字目を切り出す」とかいうのが簡単にできるのね。

ASP.NETのマスターページでCSSを即適応

マスターページを使用しているページにて、CSSを変更しても反映されていない時がある。これはマスターページをキャッシュしているためだと思われる。

IISのワーカープロセスのインスタンス(aspnet_wp.exe)を再起動すると適応されるはずだ。

このあたり[msdn.microsoft.com]が勉強になる。

Adobe Acrobatその余計なる読み上げ機能

PDFファイルを読み込む度に読み上げダイアログが出て非常にうっとうしい。調べてみると、どうやらキャンセルできないらしい。最低だ。


スタートアップ時にこれまた余計なものが起動されてしまうので、それを止める。

どうしてこう昔からAdobeは余計なことばっかりするのかね。

追記
C:\Program Files\Adobe\Reader 9.0\Reader\plug_ins にある
accessibility.JPN
Accessibility.api
を削除するといいらしい。

マウスジェスチャ IE,Chrome,Explorer


HandyGesturesも便利だったが、Vista,7,Chromeなどにも幅広く対応しているかざぐるマウス[staticflower.net]が一番便利そうだ。すばらしい。

IE8:セキュリティで保護されたWebページコンテンツのみを表示しますか?


httpsページは暗号化通信を行っているが、http通信でデータ取得を行うコンテンツが混在している場合にはこんなメッセージが出る(以前から出ていた)。


[ツール]-[インターネットオプション]-[セキュリティ]-[レベルのカスタマイズ]-[その他]
「混在したコンテンツを表示する」を「有効」に。

ただし、暗号通信中に暗号化されていないコンテンツが含まれていても警告を出さない。
これはセキュリティ上のリスクが発生するので、わかっている場合のみ設定すること。

iGoogleの友だち表示を消す

FirefoxのStylish用だが。


@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("google.co.jp")
{
#updates_left_nav, #contacts_left_nav, #bottom_nav, #chat_nav, #promo
{
display:none !important;
}
}

消すものは以下の通り。
 更新情報
 友だち
 更新情報を投稿したり友だちとゲームを楽しんだりするにはソーシャル ガジェットを追加します。

逆に使っている人がいるのだろうか…!?

GridViewの背景色を動的に変更する

たいていの場合セルの値の条件によって変更すると思う。そのため、「GridViewのRowDataBound」イベントにて行う。当然、値のフィールドのみ対象とする。


// C#
if (e.Row.RowType == DataControlRowType.DataRow)
{
// なんか条件

// 色変更
e.Row.BackColor = System.Drawing.Color.Yellow;
}


' VB.NET
If e.Row.RowType = DataControlRowType.DataRow Then
' なんか条件

' 色変更
e.Row.BackColor = Drawing.Color.Yellow
End If

MSDN

explorerでもマウスジェスチャを

ブラウザでマウスジェスチャを使っていると、Windowsのエクスプローラ操作時にもつい同じ感覚でマウスジェスチャをしてしまうことがある。当然そんな機能は無いわけだが、そういう願望を実現してくれるソフトもあるようだ。


HandyGesturesはそのひとつであり、
試しにインストールしてみたら使い勝手が良い。ありがとう。
http://www.vector.co.jp/soft/winnt/util/se372511.html

なお、インストールはバッチ処理で自動完了し、再起動等は行わなくてもよいのだが、エクスプローラやIEを開いていた場合は一度全部閉じる必要がある。

GodMode


新しいフォルダを作る。


GodMode.{ED7BA470-8E54-465E-825C-99712043E01C} にリネーム。先頭の文字列は何でも良い。



アイコンが変わる。



Windows7もしくはVistaでも可能(64bitではクラッシュの危険あり)。すごく役に立つわけでもないかもしれないが、この手の隠し機能はワクワクしますね。

The server request timed out


Sys.WebForms.PageRequestManagerTimeoutException: The server request timed out.

ASP.NET AJAXにおいて、処理に時間がかかる場合(サーバからの応答が返ってこなかった場合)にダイアログが出る。サーバ側で処理が正常に行われている場合であっても、レスポンスが返ってこないとこうなってしまう。



ScriptManagerのプロパティを調整する。
最長で10分(600)に設定できるようだ。


この値を変更すればとりあえずダイアログは出ないのだが、
AJAXにおいてこれが出ること自体がおかしいとも言えるかもしれない(処理に時間がかかるものをやるべきではない)。

Visual Studio スペースの表示と非表示


ショートカットキーを多用しているときにミスって別のコマンドを押してしまい、不意に出る矢印(→)とドット(・)。これはタブの位置とスペースの位置に表示されるが、はっきり言ってうっとうしい。

[Ctrl-E] → [S] スペース表示/非表示

で解除。

四捨五入(.NET Framework 2.0)

Math.Roundメソッドを使用するのだが、
パラメータに「MidpointRounding.AwayFromZero」を使用する。

// 小数点第一位にて四捨五入
decimal m = Math.Round (1.55, 1, MidpointRounding.MidpointRounding)

Thunderbird3 & Lightning

Thunderbird3にバージョンアップしたところ、それまで使っていたLightningが未対応だった。
スケジュール管理ができて便利だったのだが。

探してみたところ、ベータ版があった。
https://addons.mozilla.org/ja/thunderbird/addon/4623