Archive for the ‘Programs Tips’ Category

SQL Tips

August 8 | Posted by postman | Programs Tips

今回はすぐに業務で使えるSQLを公開します。 ・同一データのときは表示しない 一覧表などを表示するときに、コードや名称で並べ替えることはよくあります。 同一コードや同一名称で 並べたときに同じコードや名称が並ぶのは見づらいですよね。そこで、同一コー ドや同一名称の場合は空 白表示にするSQLです。今まではプログラムで実行していましたが、SQL文 のほうが簡単ですし、応用が利きます。 例によってSQL Serverの使用例となります。 SELECT case when t2.[コード] is null then t1.コード else 0 end コード ,case when t2.名称 is null then t1.[名称] else ” end 名称 , t1.商品名 , t1.数量 , t1.伝票番号 FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY 伝票番号 ORDER BY 伝票番号) SEQ , 伝票番号 , コード , 名称 from テーブル) t1 left outer join (select ROW_NUMBER() OVER (PARTITION BY 伝票番号 ORDER BY 伝票番号) SEQ , 伝票番号 ,コード ,名称 from テーブル) t2 on t1.伝票番号=t2.伝票番号 and t1.SEQ=t2.SEQ+1 解説:行番号を返すROW_NUMBER関数がキモになります。 ROW_NUMBERの解説 http://msdn.microsoft.com/ja-jp/library/ms186734.aspx ROW_NUMBER関数は自身の行番号を返す関数です。この関数を使用し、同一テーブ ルを結合するのですが、 1つずらした行番号を結合します。こうすることで自分の行と次の行の関係がわ かりますので同一データかどうかの判断 ができるようになります。例では空白に変換していますが、別な文字(たとえば 『〃』)を表示することも簡単にできます。 また、グループ化することで、たとえば同一日付をグループ化したSQL文を適 用すると同じコードでも日付が変わればコード 表示されるようになります。工夫次第で様々な活用ができます。 ... Read more

joomla1.7登場

August 6 | Posted by postman | Programs Tips

最近、よく使っているJoomlaですが、ついにバージョン1.7になりました。 (といっても 少し前ですが)1.6のバグ修正版という感じです。まだ、細かなところで動作 が不安なとこ ろをもありますが、実サイトに使ってもいいかな?というレベルだと思います。 そのJoomlaですが、最近T3フレームワークなるものの存在を知り、さらなる可能性 を見出しています。 T3 FrameworkのWiki http://wiki.joomlart.com/wiki/JA_T3_Framework_2/Overview これは、Joomlaのテンプレートでは有名なJa Purity iiを作成したJoomlartが作 成したフレームワークで、 カスタマイズしやすいように工夫されています。また、ヘルプも充実していて英 語ベースではありますが、 なんとなくどこをいじくればいいのかわかります。 また、公開サイトに『PANEL』という簡易コントロールパネルが表示され、 メニュー色や表示幅、フォントサイズ 等を変更することが可能です。 まだまだ1.7対応のテンプレートや拡張機能は少ないですが、今後の展開に期 待しましょう。 私がJoomlaで使用している拡張機能をご紹介します。すべて1.7対応です。 Admin Tools https://www.akeebabackup.com/ Joomlaのアップデートやパーミッションの設定、データベースの整理などを行っ てくれる拡張機能です。 管理者パスワードとは別に管理エリアにパスワードをつけることができます。こ れはjoomlaで作ったサイト であれば /administratorの下にログイン画面があることがわかってしまうた め、この領域にBasic認証をかけ 2段階のパスワード設定にすることで、セキュリティを強化します。 JCE http://www.joomlacontenteditor.net/ Joomla定番のエディタです。バージョンが上がり、より見やすくなりました。 Xmap http://joomla.vargas.co.cr/ サイトマップを自動で作成してくれます。Xmap2.0になって1.7対応になりま した。 ... Read more

DataGridView Tips

August 5 | Posted by postman | Programs Tips

DataGridViewのTipsその2です。 今回はセルの初期についての覚書です。 セルのフォントを変更したり、背景色を変えたりするにはCellsプロパティ の書式を 設定すれば変更することは可能です。 まず、全体の書式を設定するには、DefaultCellStyleプロパティを使用してセル のスタイルを 設定します。 DataGridコントロールの背景色を黄色にする。ヘッダー部分も黄色になります。 DataGridView1.DefaultCellStyle.BackColor = Color.Yellow; ある特定のセルだけを変更したい。 この場合はセルを直接指定しセルスタイルを変更します。 DataGridView1[1,1].Style.BackColor = Color.Yellow; セル(1,1)の背景色を黄色にします。 ある特定の行、列を変更したい。 データの区切り行や、変更できない列など特定のセルではなく、行全体、列全体の 背景色を変えたいときは次のようになります。 特定の行を変更したい DataGridView1.Rows[1].DefaultCellStyle.BackColor = Color.Red; 特定の列を変更したい DataGridView1.Columns[1].DefaultCellStyle.BackColor = Color.Red; セルスタイルの継承 上記のようにいろいろな方法でセルスタイルが設定できるため、セルスタイルは 有効になる 順序があります。セルスタイルが設定されていない場合は最初に設定されたセル スタイルが有効に なります。 1.System.Windows.Forms.DataGridViewCell.Style 2.System.Windows.Forms.DataGridViewRow.DefaultCellStyle 3.System.Windows.Forms.DataGridView.AlternatingRowsDefaultCellStyle (奇 数のインデックス番号を持つ行のセルのみ) 4.System.Windows.Forms.DataGridView.RowsDefaultCellStyle 5.System.Windows.Forms.DataGridViewColumn.DefaultCellStyle 6.System.Windows.Forms.DataGridView.DefaultCellStyle 上位で設定されたセルスタイルが有効になります。 ... Read more

SQL Server ユーザー定義関数

July 31 | Posted by postman | Programs Tips

SQL Serverではユーザー定義関数を定義して、機能を拡張させることができます。 たとえば、先日のTipsで使用した3ケタごとの区切り文字を返すSQL式を関数化します。 CREATE FUNCTION [DBO].[MONEYFORMAT] ( @VALUE MONEY –対象数値 ) – 三桁区切り文字列形式で返します RETURNS VARCHAR(20) AS BEGIN – MONEYデータ型からVARCHAR に変換し – 小数点以下の0を削除します RETURN REPLACE(CONVERT(VARCHAR, @VALUE, 1), ‘.00′, ”) END このユーザー定義関数をSQL SERVERに登録しておくと 次のように記述できます。 SELECT DBO.MONEYFORMAT(数量),DBO.MONEYFORMAT(金額) FROM 売上テーブル 使ってみると以外に便利です。 これができるんであれば配列のような値を返したい。という要望もでてきますよね。 はい。できますよ。その名もテーブル値関数と呼びます。 例)各得意先の最終請求日の一覧をテーブルにして返す CREATE FUNCTION [DBO].[UFN_最終請求日] (@SEIKYUDATE INT) RETURNS @T TABLE ( 得意先コード INT PRIMARY KEY NOT NULL ,最終請求日 INT NOT NULL ) AS BEGIN INSERT @T SELECT 得意先コード ,MAX(請求日) FROM 請求履歴テーブル WHERE データ削除年月日=0 AND 請求日 < @SEIKYUDATE GROUP BY 得意先コード RETURN のように使用します。 テーブル値関数はビューに似ていますが、ビューと決定的に違うのはパラメータを指定して フィルタをかけることができる点です。 また、ストアードプロシージャのかわりに使用することもよくあります。 ローカル一時テーブル、ユーザー定義関数は今まであまり使用しませんでしたが、 使ってみると便利な機能です。それぞれの特徴に注意して使い分けることでSQL文が 見やすくなり、構文が整理されます。 ... Read more

SQL Tips

July 30 | Posted by postman | Programs Tips

・値によって選択肢を変えたい。 CASE 式を使用します。 例)印刷区分が0のときは×、0以外のときは〇を表示する SELECT CASE 印刷区分 WHEN 0 THEN ‘×’ ELSE ‘〇’ END FROM テーブル CASES式は集計関数内でも使用できます。 たとえば学年別の人数集計をしたい場合通常は SELECT 学年,COUNT(*) FROM SEITO GROUP BY 学年 としますが、これだと学年ごとにレコードができてしまいます。 SELECT 学年, SUM( CASE WHEN 学年=1 THEN 1 ELSE 0 END) AS GAKUNEN1 SUM( CASE WHEN 学年=2 THEN 1 ELSE 0 END) AS GAKUNEN2 SUM( CASE WHEN 学年=3 THEN 1 ELSE 0 END) AS GAKUNEN3 SUM( CASE WHEN 学年=4 THEN 1 ELSE 0 END) AS GAKUNEN4 SUM( CASE... Read more

SQL Server ネットワーク経由で接続

July 29 | Posted by admin | Programs Tips

SQL Server でネットワーク接続できない場合、以下の点を確認してください。 まずは、SQL Server のバージョン。 Expressエディションを使用している場合は デフォルトでTCP/IPは有効になっていないため、ローカルでの接続のみとなります。 SQL Server→構成ツール→SQL Server構成マネージャーを開きます。 次に画面左側のツリーより、SQL Serverネットワークの構成を展開し、SQL EXPRESSの プロトコルをクリックします。 プロトコル名のTCP/IPが無効になっていれば有効に変更します。 次に、ポートの設定を行います。業務アプリなど社内LANなどで使う際は固定 ポートに 設定しておいたほうが無難でしょう。固定ポートを使用するには、先ほどのプロ トコル名 TCP/IPのプロパティを開き、IPアドレスタブをクリックします。 IP1,IP2,..,IP ALLとリスト表示されていますので、最後のIP ALL、TCPポートに1433 TCP動的ポートは空白にします。なお、動的ポートを使用する場合はSQL Server Browser サービスを開始しておく必要があります。開始モードを『自動』にしておくとよ いでしょう。 次に、接続先がWindows Vista,7の場合はファイヤーウォールがオンになってい ますので ポートを開いておく必要があります。 固定ポートの場合は1433を開けます。 手順は『コントロールパネル』→『システムとセキュリティ』→『Windowsファイヤー ウォール』→『詳細設定』を開きます。 『受信の規則』をクリックし、右側メニューの『新しい規則』をクリックします。 規則の種類を『ポート』にして『次へ』をクリックします。 TCPとUDPの選択はTCPにして、その下の『特定のローカルポート』欄に 1433 を入力し、『次へ』をクリックします。 『接続を許可する』を選択し、『次へ』をクリックします。規則の適用条件を 『ドメイン』、 『プライベート』、『パブリック』すべてにチェックを入れ、『次へ』をクリッ クします。 適当な名前『SQL Server 1433』をつけ、完了をクリックします。 これで、リモート接続が可能になります。 ... Read more

SQL Server Tips

July 28 | Posted by postman | Programs Tips

以前はスタンドアロンで使うような業務アプリにはデータベースには ACCESS MDBファイルを 使うことが多かったのですが、開発環境を .NET環境に移行してからは SQL Server Expesssで アプリを構築することが多くなってきました。ACCESSとSQL Server の構文は微 妙に違うため 移植する場合は注意が必要ですが、ACCESSで普通にできていたことが SQL Server ではできな いことが多いですね。 ・3ケタ毎にカンマ区切り表示する ACCESSではFormat書式を使ってできますが、SQL Serverではできません。 conver関数を使下記のように指定します。 SELECT CONVERT(varchar, 数量, 1) FROM 販売履歴 これで3ケタ毎にカンマ編集されて表示されます。ただ、これだけでは小数点以 下2桁まで 表示されてしまいます。小数点以下が不必要な場合はreplaceコマンドと組み合 わせます。 SELECT REPLACE(CONVERT(varchar, 金額, 1), ‘.00′, ”) FROM 販売履歴 これで小数点以下の表示が消えます。 ・日付の扱い 日付の扱いには今も頭を悩ませるところです。たとえば、受発注管理などで発注 日と入荷日 が1レコードにあるとします。発注したときに発注日が登録されますが、入荷日 はそのときには 決まっていませんので未定となります。この未定の扱いをどうするかです。 未定なのでNULLとする。ありえない日付を設定する。 1899-12-31等に設定する。 いまだにうまい方法が見出せません。 最近の手法は日付型を使うのではなく数値型を日付に見立てて処理する方法にし ています。 この方法を使うと未定の場合は0をセットすることができ、プログラムがスッキ リします。 また、数値で比較できますので月ごと、年毎などの条件を指定する場合も日付型 を使ったときと 比べそれほど複雑にはなりません。 末日の判断など日付計算のモジュールさえ作成したおけば数値型を使った場合で もそれほど 気になりません。ぜひ、お試しを ... Read more

余計なお世話 Validation

July 27 | Posted by postman | Programs Tips

入力チェックなどでよく使われるイベントにValidating イベントがあります。 このイベントは Enter → GotFocus → Leave → Validating → Validated → LostFocus のようにLostFocusの前に発生しますので入力した値が正常かどうかを判定し エラーであれば再度入力する場合などに使用します。 Validatingイベントは引数CancelEventArgs で渡された値のCancelプロパティを trueにすることでそのコントロールにとどまります。 ただし、コントロールのCausesValidationプロパティが falseのときは Validating イベントは発生しませんので、いくらValidatingイベントに判定処理を入れていても プログラムが動きませんので判定しません。通常は trueになっているのですが、 プログラム中でCausesValidationをfalseにしていたため、ある処理以降、入力判定 が動作せず、デバッグに悩んだことがありました。 便利なValidatingイベントなのですが、一つ困った問題があり、通常何も考えないと 正常値を入力するまではほかのコントロールへ移れないので、たとえば、終了ボタン をクリックして終了するときや、ESCキーでメニューに戻ったりする場合でも、 正常な値を入力するまではこのコントロールから抜けることができず、操作が面 倒だ。 という話になります。特に業務アプリの場合は、操作する人がパソコンに慣れていな い場合が多いので、余計に面倒に感じるようです。 よく使う手法としてはValidatingイベントで判定するときに空白だったら入力を 許可し コントロールを抜けれるようにします。あとは、WndProcで終了イベントを取得 し判定 する手法なども使いますが、この手法は終了時には使えますが、ある条件のとき だけほか のコントロールへ移動したい時などは使用できません。 使いやすいプログラムを作るのは大変です。 ... Read more

DataGridViewその2

July 26 | Posted by admin | Programs Tips

引き続きDataGridViewに関するプロパティ関係です。 ・新規行かどうかの確認 新規に追加された行かどうかはIsNewRowプロパティで判断できます。 IsNewRowがtrueのときは新規行、falseのときは既存の行になります。 ・新規追加できないようにする 新規追加の行を表示したくないときにはAllowUserToAddRowsプロパティをFalse にすると、最下行の(*)表示が消え、新規登録操作ができなくなります。この場 合でも プログラムで追加することは可能です。 ・1行おきに色を変えたい。 AlternatingRowsDefaultCellStyleプロパティに値を設定します。背景色を変え たい場合は BackColorプロパティを設定します。 myDataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.Green; 同様にAlternatingRowsDefaultCellStyleプロパティの値を設定することで、 フォントや 前景色も変えることができます。 ・行削除をできないようにする AllowUserToDeleteRows プロパティをfalseにするとユーザーが行を削除できな くなります。 trueにすると選択行を【Delete】キーで削除できます。 この場合でもプログラムで削除することは可能です。 ・指定した行や列を表示させない myDataGridView.Columns[0].Visible = false; myDataGridView.Rows[0].Visible = false; のように表示させたくないカラム又は行を指定し、Visibleプロパティをfalseに します。 ・行ヘッダや列ヘッダを表示させない ColumnHeadersVisibleプロパティで列ヘッダの表示・非表示を切り替えます。 myDataGridView.ColumnHeadersVisible = false; RowHeadersVisibleプロパティで行ヘッダの表示・非表示を切り替えます。 myDataGridView.RowHeadersVisible = false; ... Read more

Datagridview

July 23 | Posted by admin | Programs Tips

DataGridViewは業務アプリなどでは必ずと言っていいほど使用するコンポーネン トです。 その分奥が深く、使い込んでいけばいくほどさまざまなプロパティ、メソッドが あります。 機能が多すぎて確かこんな機能あったような気がするけど、何だっけなあ。とい うことが 多いので忘備録として。 以下の例ではDatagridViewコンポ―ネントの名称はmyDataGridViewとして開発言 語はC#を想定して説明します。 セル編 ・現在のセル位置を返す myDataGridView.CurerntCellAddress.X(列) myDataGridView.CurerntCellAddress.Y(行) セルが選択されていないときは CurrentCellAddressプロパティは X,Yともに-1になります。 ・現在のセルのある行を返す myDataGridView.CurrentRow ・現在のセル位置を変更する myDataGridView.CurrentCell = myDataGridView[カラム, 行]; ・フォーカス喪失時に選択位置を非表示にする CurrentCellプロパティに nullを設定すると選択時の青いセル表示が消えます。 ただし、フォーカス取得時には FirstDisplayedCellプロパティに設定されてい るセル が現在のセル位置になります。 ・現在のセルが表示されているかどうかを調べる myDatGridView.Displayed trueのとき、画面上に表示されている(ただし、一部でも表示されていればTrue になります) falseのとき、画面上には表示されていない ・セルの表示を固定する エクセルの機能と同じ機能で、行や列を固定してスクロールさせたくない場合に 使用できます。 長い行や列の見出しとして使用することが多いです。 行を固定する場合 1行目を固定する myDataGridView.Rows[0].Frozen = true; 1列目を固定する myDataGridView.Coulmns[0].Frozen = true; 行が固定されているかどうかは Frozenプロパティを調べればわかります。 ... Read more