SQLの窓 イラストAC フリー素材

2008年05月30日

【SQL】副問合せのよくあるサンプル



1) 同姓同名を検査
     having は、group by 命令による加工後の処理と思えば良いです。
     それは、order by にも言える事で、列指定に別名が使えるのもそのせい。

2) インラインビューによる自己結合
     副問い合わせの結果をテーブルに見立てて使うと思えば、
     特別なSQL的要素はまったくありません。
     開発では、テーブル(またはVIEW)なんか勝手に作成
     できませんから、無いと困ります。

3) ランダムに選ばれた社員10人のデータ
     アプリ側で行えば済む事なので必要とは思えませんが、
     トップN分析と言えば Oracle 。
     dual 表といい特殊ではあります。
     でも、ROWID だけは他でも欲しいですね。



posted by at 2008-05-30 18:17 | DB関連 | このブログの読者になる | 更新情報をチェックする

【VB.NET】開発用TextBoxをバージョンアップ



1) 前回DataType を編集タイプとして、先行ゼロを追加
2) AllowChar プロパティを実装する
     指定された文字列に含まれる1つ1つの文字以外入力できなくなる
3) CheckType プロパティを実装する
     (0) : なにもしない
     (1) : 必須入力
4) CheckValue プロパティを実装する
     カンマ区切りで指定された各文字列以外は入力エラーメッセージを表示( validate )


( イマ時、和暦フィールドとかいらないだろうなぁ・・・ )




posted by at 2008-05-30 17:28 | VB.net | このブログの読者になる | 更新情報をチェックする

【VB.NET】簡易行番号エディタコントロール



まだ作ったばかりで、最低限の機能しか実装できてませんが、
TAB と SHIFT+TAB で一括インデントできるので、仕様書
作るだけでいいかもですが・・・

できりゃ、コメント部分だけでも色変え処理はしたいし、
URL リンクをデフォルトで ブラウザ開けたりはしたい。


いろいろ検索してて見つけたテキストページのソースコード
から、基本コントロールの配置だけいただいて変更しました。
( そのページもうどこだかわかんないんですけど )

ここでは、PAINT メッセージ使ってるので、
じゅうぶん高速な書き換えが行われてます
(表示可能範囲の行番号全部描画ではありますが)

しかし、VSCROLL イベントって Microsoft では
「クリックした時」とか書いてたのに、しっかり ON SCROLL
WM_VSCROLL とかも取得して比べたりしたけど
なんか同じかもしれない。


あとは、RichTextBox のイベントを
UserControl のイベントへ全て pass すれば
良いのだけれど・・・面倒なのでまた今度。




posted by at 2008-05-30 17:19 | VB.net | このブログの読者になる | 更新情報をチェックする

2008年05月19日

【VB.NET】COM経由のデーターベース

もともと、SQL を書かないオブジェクト任せの ADO更新は
他の言語にコンバートできないので殆ど使いませんでしたが、
ケース・バイ・ケースで便利な時もあります。

何より、SQL を書けない要員で作らなければいけない場合は
他に選択肢も無く。

というか、ADO.NET ってMicrosoft のいいなりっぽいんですが。
COM はそれなりに歴史があって安定してます。
Framework って、変遷の内容見ると、「え゛ーーーー」って
ところもあって、あんまり信用もできない。

大きなコストが動くプロジェクトならば、
安全策 = Microsoft のいいなりもありですが・・・

ま、いろいろ選択肢があってもいいんじゃ無いでしょうか。









posted by at 2008-05-19 15:40 | VB.net | このブログの読者になる | 更新情報をチェックする

【VB.NET】Excel処理




.NET で COM 経由の Excel を扱う時、最も気を使うのは
使用したオブジェクトのインスタンスの開放です。

テキトーにやると、Excel を終了できなくなるからです。

また、Microsoft は、次々バージョンを新しくしてくれますが、
エンドユーザの実行環境は必ずしも一様ではありません。
よって、「理屈」より「役に立った」が重要になります。

そもそも、Excel を アプリから使うのは飛び道具的です。
まわりを「運用」で固めないとえらい目にあいます。
そういう場合は、Microsoft を悪者にするに限ります。



それと、解決方法の一つとして、VBScript として Excel を
呼び出す方法も付加してあります



posted by at 2008-05-19 14:31 | VB.net | このブログの読者になる | 更新情報をチェックする

【VB.NET】開発用TextBoxのサンプル



極端な話、Windows アプリケーションは
テキストボックス と ボタン さえあればなんとかできてしまいます。
( 昔々はボタンすら無かったですからね ) 

要するに、最も重要なコントロールは Microsoft 生バージョン
で使ってはいけません。ユーザコントロールにします。

昔々( BASIC ) は、入力用のサブルーチンを作ってなにもかも
作ってたわけですが、Windows であっても、プロジェクトを
効率良く進めるには特化した入力コントロールが有効です。

そのヒントも含めてあります。

また、解る人には解る validate のコントロールのヒントも
付加してありますので、あとは力仕事で特化させて下さい。




あ、そうそう。
いつもの事ですが、C# が必要な場合は
http://www.developerfusion.com/tools/convert/vb-to-csharp/

で変換して下さい。
このコードはもともと C# で書いて、ここでVB に変換したものですから。

posted by at 2008-05-19 14:05 | VB.net | このブログの読者になる | 更新情報をチェックする

【PL/SQL】テストデータ作成をさらに詳細

前回は初心者用でした。
氏名作成なんかはヒントで終わってましたし。

今回は、ほぼ完成版のあらゆるテストデータ作成に使えるバージョンです。



氏名をランダムで作成して、そのフリガナも正しく作成する為に配列を用います。
元データはカンマ区切りなので、カンマ区切りを分解するプロシージャ 
使用しています。

あまり複雑にしたくなかったので同じ文字が続く姓が発生しますが、
LOOP で排除できます。
同様のサンプルとしてのコードは実装されています( 管理者作成 )






posted by at 2008-05-19 13:45 | DB関連 | このブログの読者になる | 更新情報をチェックする

@WIKIにSyntaxHighlighterを使用する



SyntaxHighlighter は、WEB 上でソースコードを表示する為の
JavaScript ツールですが、それなりの知識が無いと一般的な
ブログ等に組み込むのは難しいかもしれません。

ここではうまくいかなかったので、IFRAME で埋め込むしか無いです・・・。
PHP で作れば、別ドメインのソートコードも取れますしね。






posted by at 2008-05-19 00:00 | 資料 | このブログの読者になる | 更新情報をチェックする

2008年05月12日

【PL/SQL】DBMS_RANDOM.VALUEでテストデータ作成

Oracle のストアードプロシージャでテストデータを作成する


社員マスタと同一フォーマットの社員データを用意して、そこにテストデータを作成する為のヒントです。

コード的に難しい処理はありませんが、以下が知っておくべきポイントです。

1) EXECUTE IMMEDIATE によるSQLの動的実行
2) 内部プロシージャ
3) FOR ループ
4) DBMS_RANDOM パッケージ
CREATE or REPLACE PROCEDURE GET_DATA_LOOP

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	RET_VALUE	VARCHAR2(2000);
	WK_VALUE	VARCHAR2(2000);
	CNT_MAX		NUMBER;

-- *********************************************************
-- 内部プロシージャ( データ作成 )
-- *********************************************************
PROCEDURE INSERT_DATA( idx in NUMBER )
AS
	TARGET_CODE VARCHAR2(4);
	TARGET_NAME VARCHAR2(50);
	TARGET_NAME_SEED VARCHAR2(100) := '山川田海岡';
	TARGET_IDX NUMBER;
BEGIN

	-- 社員コード作成
	TARGET_CODE	:= LTRIM(TO_CHAR( idx, '0000' ));

	-- 社員氏名作成のヒント
	TARGET_IDX := DBMS_RANDOM.VALUE(1,5);
	TARGET_NAME := SUBSTR(TARGET_NAME_SEED,TARGET_IDX,1);
	TARGET_IDX := DBMS_RANDOM.VALUE(1,5);
	TARGET_NAME := TARGET_NAME || SUBSTR(TARGET_NAME_SEED,TARGET_IDX,1);

	INSERT INTO "社員データ" 
		(
			"社員コード"
			,"氏名"
		)
	VALUES (
		TARGET_CODE
		,TARGET_NAME
	);

END;

/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');

	-- ****************************************************
	-- 社員マスタと同一フォーマットの
	-- 社員テーブルをクリア
	-- ****************************************************
	WK_VALUE := 'TRUNCATE TABLE "社員データ"';
	EXECUTE IMMEDIATE WK_VALUE;

	-- ****************************************************
	-- ループを無条件に100回実行する
	-- ****************************************************
	CNT_MAX := 1000;
	FOR i IN 1..CNT_MAX LOOP
		INSERT_DATA( i );
	END LOOP;

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
/




posted by at 2008-05-12 00:00 | DB関連 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します