Version1.0.0.8 の公開を開始しました。
それに伴い(?)オープンソースとしてソースコードを公開しました。
なかなかアプリのアップデートができない状況で、新しい風を吹き込めたらと思っています。
それでは詳しくは公式サイトでご確認ください。
SQL Browser というソフトウェアを開発しています。ベンダ製 .NET データプロバイダや ODBC.NETによる ODBC 接続で、SQLの実行や一覧の取得が可能です。ブログにて開発履歴や課題などを書いていきます。
2010年12月15日水曜日
2010年8月19日木曜日
開発ブログ移転
開発ブログをアメブロ(http://ameblo.jp/sqlbrowser/)から、Google のBlogger(http://sqlbrowser.blogspot.com/)に移転しました。
アメブロに大きな不満があった訳ではなく、公式サイトを Google サイトで運営していますので、管理の都合での移転です。
移転は地道にコピー&ペーストしました(x_x)
ブログエディタの挙動がそれぞれ異なり結構な手間でした。
プログラムソースを公開するのは 半角スペースを認識してくれる Blogger の方が使い勝手よい感じです。が、2行以上ある文章をペーストすると改行が何故か2倍になるという謎の仕様が。。
※例えば「あ<改行>い」は「あ<改行><改行>い」となってしまう。。
直接ブログエディタでコピー&ペーストしてもそうなってしまうので、若干イラッとすることもありますが、当面は Blogger を利用させて頂きます。。
アメブロに大きな不満があった訳ではなく、公式サイトを Google サイトで運営していますので、管理の都合での移転です。
移転は地道にコピー&ペーストしました(x_x)
ブログエディタの挙動がそれぞれ異なり結構な手間でした。
プログラムソースを公開するのは 半角スペースを認識してくれる Blogger の方が使い勝手よい感じです。が、2行以上ある文章をペーストすると改行が何故か2倍になるという謎の仕様が。。
※例えば「あ<改行>い」は「あ<改行><改行>い」となってしまう。。
直接ブログエディタでコピー&ペーストしてもそうなってしまうので、若干イラッとすることもありますが、当面は Blogger を利用させて頂きます。。
2010年8月10日火曜日
SQL Browser 1.0.0.7 公開
SQL Browser 1.0.0.7 を公開申請中です。
申請が完了しましたら公式ページのお知らせでお伝えします。
<追記>8月17日に申請が完了し、正式リリースされました。
さて今回のリリースは、細かいバグフィックスと、以下の機能追加&強化です。
・グリッドのパフォーマンス向上
・Ctrl+Tabキーによるタブページの切り替え
・文字エンコーディングを指定してのファイルを開き直し
グリッドのパフォーマンスですが、特にデータの編集が大幅に改善していて、列の項目が数十個あるようなマンモステーブルの編集がかなり高速化されます。
※内部的な条件があるため、絶対ではありませんが・・・。
実際に自分で使っていて、編集のコミット待ちになることが結構ありました。
修正はそれなりに大変ではありましたが、やってよかったという出来になっていると思います(^_^)b
文字エンコーディングはファイルの開き直しのみ対応しました。
ファイルを開く際にエンコーディングの自動判別を行なっていますが、自動判別が上手くいかなかったときの救済処置です。
メニューの「ファイル>エンコードの種類」でエンコーディングの指定が可能です。
本当はファイルを開く時点でエンコーディングが選べるようにしたかったのですが、.NET 標準のファイルを開くダイアログ(FileOpenDialog)は拡張性に乏しく、ダイアログにカスタマイズ項目を追加することが困難です。
※手間が自作とほとんど変わらない。
また、ファイルを開くダイアログの後、エンコーディングダイアログを出すか検討しましたが、自動判別がOKの場合、二度手間になり使い勝手が悪いため見送りました。
よさそうな手が見つかったら、機能拡張しますのでそれまでは、上記操作でお願いしますm(_ _)m
申請が完了しましたら公式ページのお知らせでお伝えします。
<追記>8月17日に申請が完了し、正式リリースされました。
さて今回のリリースは、細かいバグフィックスと、以下の機能追加&強化です。
・グリッドのパフォーマンス向上
・Ctrl+Tabキーによるタブページの切り替え
・文字エンコーディングを指定してのファイルを開き直し
グリッドのパフォーマンスですが、特にデータの編集が大幅に改善していて、列の項目が数十個あるようなマンモステーブルの編集がかなり高速化されます。
※内部的な条件があるため、絶対ではありませんが・・・。
実際に自分で使っていて、編集のコミット待ちになることが結構ありました。
修正はそれなりに大変ではありましたが、やってよかったという出来になっていると思います(^_^)b
文字エンコーディングはファイルの開き直しのみ対応しました。
ファイルを開く際にエンコーディングの自動判別を行なっていますが、自動判別が上手くいかなかったときの救済処置です。
メニューの「ファイル>エンコードの種類」でエンコーディングの指定が可能です。
本当はファイルを開く時点でエンコーディングが選べるようにしたかったのですが、.NET 標準のファイルを開くダイアログ(FileOpenDialog)は拡張性に乏しく、ダイアログにカスタマイズ項目を追加することが困難です。
※手間が自作とほとんど変わらない。
また、ファイルを開くダイアログの後、エンコーディングダイアログを出すか検討しましたが、自動判別がOKの場合、二度手間になり使い勝手が悪いため見送りました。
よさそうな手が見つかったら、機能拡張しますのでそれまでは、上記操作でお願いしますm(_ _)m
2010年8月5日木曜日
外部コンポーネント その3
外部コンポーネント その1( http://ameblo.jp/sqlbrowser/entry-10535864608.html )のエントリでご紹介したDockPanel Suite ですが、修正したソースに誤りがありました。すみませんm(_ _)m
元記事を修正しましたので参照してください。
お詫びがてら、おまけで左右にパネルが存在するとき、アイコンを回転させるソースを追記しました。
元記事を修正しましたので参照してください。
お詫びがてら、おまけで左右にパネルが存在するとき、アイコンを回転させるソースを追記しました。
2010年8月3日火曜日
状況のご報告
最近ブログを更新していませんでしたので、状況のご報告を。。
・・と、改まって書く内容もないのですが、開発が止まっている訳ではありません。
利用者の方も増えつつあり、今のうちにソースコードのリファクタリングや各種処理速度の向上、例外処理の強化など裏方作業をメインで進めています。
私も本業でバリバリ使っていますので、色々改良案もでてきました。
時期は未定ですが、大きなバージョンUPを行なう予定です。
・・と、改まって書く内容もないのですが、開発が止まっている訳ではありません。
利用者の方も増えつつあり、今のうちにソースコードのリファクタリングや各種処理速度の向上、例外処理の強化など裏方作業をメインで進めています。
私も本業でバリバリ使っていますので、色々改良案もでてきました。
時期は未定ですが、大きなバージョンUPを行なう予定です。
2010年7月12日月曜日
次回リリースについて
次回は SQL Browser と SqlFormatterライブラリとそのサンプルの3つを同時リリースします。
現在は Vector さんに申請中です。
なお、今回は重要なお知らせがあります。
ソフトウェアのみをご利用の方は特に意識される必要はありません。
ライブラリを利用されている方は名前空間(namespace)が変更となっておりますのでご注意ください。
詳しくは公式ページのお知らせをご覧ください。
http://sites.google.com/site/sqlbrowser/
お手数ですが宜しくお願いしますm(_ _)m
現在は Vector さんに申請中です。
なお、今回は重要なお知らせがあります。
ソフトウェアのみをご利用の方は特に意識される必要はありません。
ライブラリを利用されている方は名前空間(namespace)が変更となっておりますのでご注意ください。
詳しくは公式ページのお知らせをご覧ください。
http://sites.google.com/site/sqlbrowser/
お手数ですが宜しくお願いしますm(_ _)m
2010年7月5日月曜日
括弧の強調表示など
さて、次回のリリースに向けて、追加機能のご紹介。
1つが、対応する括弧の強調表示です。
なが~いSQLになると、どうしても括弧の数が増えていきます。
そのSQLが良いかどうかはさておき、前に作ったSQLでJOINを多用した結果、括弧が数十個並んだことがあります。。
個人的にはマスト機能ですので、今回のリリースで実装しました。
もう1つが、レコード操作バーです。
次のレコードへ移動や、最終レコードへ移動という機能です。
こちらは個人的にはあまり使わない機能ではありますが、実装されているソフトが多いので、必要な機能なんだろうなぁと追加してみました。
あ、それと今までセルの編集はF2キーまたはキー入力が開始されたタイミングで、入力可能になっていますが、ボタンで「編集の開始」と「編集のキャンセル」が行なえるようにしました。
ちなみに編集のキャンセルはEscキーです。
Excelなどと同じ操作ですので、特にボタンがなくてもよさそうですが、あるに越したことはないかと思い、追加しました。
と、最近は小さな機能UPとなっていますが、しばらくはこんな感じでリリースを行なっていこうと思っています。
1つが、対応する括弧の強調表示です。
なが~いSQLになると、どうしても括弧の数が増えていきます。
そのSQLが良いかどうかはさておき、前に作ったSQLでJOINを多用した結果、括弧が数十個並んだことがあります。。
個人的にはマスト機能ですので、今回のリリースで実装しました。
もう1つが、レコード操作バーです。
次のレコードへ移動や、最終レコードへ移動という機能です。
こちらは個人的にはあまり使わない機能ではありますが、実装されているソフトが多いので、必要な機能なんだろうなぁと追加してみました。
あ、それと今までセルの編集はF2キーまたはキー入力が開始されたタイミングで、入力可能になっていますが、ボタンで「編集の開始」と「編集のキャンセル」が行なえるようにしました。
ちなみに編集のキャンセルはEscキーです。
Excelなどと同じ操作ですので、特にボタンがなくてもよさそうですが、あるに越したことはないかと思い、追加しました。
と、最近は小さな機能UPとなっていますが、しばらくはこんな感じでリリースを行なっていこうと思っています。
利用しているコンポーネント その2
久しぶりに利用している外部コンポーネントのご紹介。
クエリーを入力するテキストエディタ部分に、Azuki テキストエディタエンジン(http://azuki.sourceforge.jp/ )を利用させてもらっています。
いくつかエディタエンジンの候補があったのですが、最終的に Azuki を選択しました。
理由は「 .NET Framework 2.0で開発されいる」「オープンソースであり改造可能」であること、何より作者様が鋭意開発を進めていて、機能強化が期待できるからです。
要望事項にも柔軟に応じて頂けるようで、素晴らしい作者様です。
SQL Browser も機能強化を進めていきますが、エディタエンジンが良くなるとこのソフトウェアも良くなったように思えて一石二鳥!なんて思っています(^_^;)
※なお、作者様の掲示板にとぼけたメッセージを書き込んでいる私を見つけてもスルー願います。。
ちなみに「Azuki エディタ」で検索すると、かなりヒットしますので、使われている方も多いのではないかと思います。
クエリーを入力するテキストエディタ部分に、Azuki テキストエディタエンジン(http://azuki.sourceforge.jp/ )を利用させてもらっています。
いくつかエディタエンジンの候補があったのですが、最終的に Azuki を選択しました。
理由は「 .NET Framework 2.0で開発されいる」「オープンソースであり改造可能」であること、何より作者様が鋭意開発を進めていて、機能強化が期待できるからです。
要望事項にも柔軟に応じて頂けるようで、素晴らしい作者様です。
SQL Browser も機能強化を進めていきますが、エディタエンジンが良くなるとこのソフトウェアも良くなったように思えて一石二鳥!なんて思っています(^_^;)
※なお、作者様の掲示板にとぼけたメッセージを書き込んでいる私を見つけてもスルー願います。。
ちなみに「Azuki エディタ」で検索すると、かなりヒットしますので、使われている方も多いのではないかと思います。
2010年7月1日木曜日
SQL Browser 1.0.0.4 公開
毎度お馴染み、怒涛のリリースでございます(x_x)
今回は、前回のブログに書いた、クエリーファイルの一括実行機能と、パラメータマーカの自動判別です。
パラメータマーカの指定が泥臭く、ダサい感じだったので、可能な限り自動判別を行なっています。
例によってすべての環境で動作確認を行なっているわけではありませんが、GetSchema メソッドによるスキーマ メタデータの取得により、パラメータを取得していますので、大抵は大丈夫じゃないかと思います。
※以下で確認済。
・SqlClient Data Provider
・Oracle Data Provider for .NET
・OracleClient Data Provider
・IBM DB2 for i5/OS .NET Provider
・Npgsql Data Provider
・Odbc Data Provider
・OleDb Data Provider
駄目だった場合は、今まで通り手動設定でお願いします。。
今回は、前回のブログに書いた、クエリーファイルの一括実行機能と、パラメータマーカの自動判別です。
パラメータマーカの指定が泥臭く、ダサい感じだったので、可能な限り自動判別を行なっています。
例によってすべての環境で動作確認を行なっているわけではありませんが、GetSchema メソッドによるスキーマ メタデータの取得により、パラメータを取得していますので、大抵は大丈夫じゃないかと思います。
※以下で確認済。
・SqlClient Data Provider
・Oracle Data Provider for .NET
・OracleClient Data Provider
・IBM DB2 for i5/OS .NET Provider
・Npgsql Data Provider
・Odbc Data Provider
・OleDb Data Provider
駄目だった場合は、今まで通り手動設定でお願いします。。
クエリーの一括実行
クエリーの一括実行機能を追加しました。
複数のクエリーファイルを一括して実行する機能です。
DB環境を複写時に、クエリーファイルを用意しておいて一気に実行するというのはよくある作業だと思います。
次回のリリースで使えるようになります。
複数のクエリーファイルを一括して実行する機能です。
DB環境を複写時に、クエリーファイルを用意しておいて一気に実行するというのはよくある作業だと思います。
次回のリリースで使えるようになります。
2010年6月30日水曜日
ダウンロード数
ソフトウェア&ライブラリを公開して半月、Vectorさんからダウンロード数のお知らせがありました。
数字は公表するほどでもなく(予想通りですが)、公式サイトのダウンロード数と合算すると、2桁オーバーしたところです。
ところで、Vectorさんはダウンロード数はメールでのみのお知らせなんですが、何ででしょうね?
ランキングをやっているので、ダウンロード件数は把握してるでしょうし、一覧で見れるようにするのは容易いと思うのですが。。
ダウンロード数はフリーウェアである以上、モチベーション維持の1つの要素ですので、とりあえず地道に手集計します。
目指せ、3桁オーバー(^o^)/
数字は公表するほどでもなく(予想通りですが)、公式サイトのダウンロード数と合算すると、2桁オーバーしたところです。
ところで、Vectorさんはダウンロード数はメールでのみのお知らせなんですが、何ででしょうね?
ランキングをやっているので、ダウンロード件数は把握してるでしょうし、一覧で見れるようにするのは容易いと思うのですが。。
ダウンロード数はフリーウェアである以上、モチベーション維持の1つの要素ですので、とりあえず地道に手集計します。
目指せ、3桁オーバー(^o^)/
2010年6月29日火曜日
入力候補機能を追加しました
入力候補機能を表示する機能を追加し、アップしました(Version 1.0.0.3)。
やはり、あるとないとじゃ大違いで、テーブル名(もしくは別名)とピリオドを入力するだけで、さくさくカラム名の候補が表示されますので、かなり使いやすくなったと思います。
やはり、あるとないとじゃ大違いで、テーブル名(もしくは別名)とピリオドを入力するだけで、さくさくカラム名の候補が表示されますので、かなり使いやすくなったと思います。
SQL Browser の公開
SQL Browser ですが無事に Vector さんの申請が通りました。
以下のURLでダウンロードできますので、是非お試しください。
<SQL Browser>
http://www.vector.co.jp/soft/dl/winnt/business/se484411.html
以下のURLでダウンロードできますので、是非お試しください。
<SQL Browser>
http://www.vector.co.jp/soft/dl/winnt/business/se484411.html
2010年6月25日金曜日
グリッドへの貼り付け
グリッドへの行の貼り付け機能、難産でしたが本日完成しました。
これでエクセルからのコピペ、他の行のコピペなどができるようになります(^_^)b
で、何が難しかったかというと、コピー対象にタブ文字や改行が含まれる場合です。
グリッドには標準機能として、クリップボードへのコピーがあるのですが、例えば3項目の場合は、「項目1(タブ文字)項目2(タブ文字)項目3」とコピーされます。
貼り付けは機能として提供されていないので、タブ文字区切りで独自に分解してグリッドに貼り付ける処理を組み込む必要があります。
上記したとおり、項目にタブ文字が含まれる場合、「項目1(タブ文字)項目2(タブ文字)項目3(タブ文字)項目4」となってしまう訳です。
グリッド処理を行なっていて、タブ文字を上手く扱えてないソフトが結構あります。
※というか、手持ちの類似ソフトでは Obje○t Browser 位しかまともに扱えていない模様
当初は本ソフトも諦め&妥協しそうになったのですが、売りのひとつになるかなぁと考え直して頑張ってみました。
最近リリースしまくっているため、この機能だけでリリースするのは控えますが、今すぐにでも必要だぜ!という人はコメントなど頂ければ、、と思います。
これでエクセルからのコピペ、他の行のコピペなどができるようになります(^_^)b
で、何が難しかったかというと、コピー対象にタブ文字や改行が含まれる場合です。
グリッドには標準機能として、クリップボードへのコピーがあるのですが、例えば3項目の場合は、「項目1(タブ文字)項目2(タブ文字)項目3」とコピーされます。
貼り付けは機能として提供されていないので、タブ文字区切りで独自に分解してグリッドに貼り付ける処理を組み込む必要があります。
上記したとおり、項目にタブ文字が含まれる場合、「項目1(タブ文字)項目2(タブ文字)項目3(タブ文字)項目4」となってしまう訳です。
グリッド処理を行なっていて、タブ文字を上手く扱えてないソフトが結構あります。
※というか、手持ちの類似ソフトでは Obje○t Browser 位しかまともに扱えていない模様
当初は本ソフトも諦め&妥協しそうになったのですが、売りのひとつになるかなぁと考え直して頑張ってみました。
最近リリースしまくっているため、この機能だけでリリースするのは控えますが、今すぐにでも必要だぜ!という人はコメントなど頂ければ、、と思います。
2010年6月24日木曜日
SQL Browser 1.0.0.2 公開
先日の宣言どおり、SQL Browser 1.0.0.2 公開しました。
と、毎日機能追加やら修正やらしているので、上げようと思えば毎日上げられてしまうのですが、きりがない(^_^;)
せっかく使ってくれようとしている人にも迷惑なので、大きな不具合が出ない限りは、公開控えるようにしようかなと思います。
Vectorさんにも、申請依頼の修正をしまくってますが、大丈夫なんだろうか??
と、毎日機能追加やら修正やらしているので、上げようと思えば毎日上げられてしまうのですが、きりがない(^_^;)
せっかく使ってくれようとしている人にも迷惑なので、大きな不具合が出ない限りは、公開控えるようにしようかなと思います。
Vectorさんにも、申請依頼の修正をしまくってますが、大丈夫なんだろうか??
2010年6月23日水曜日
SQL Browser 1.0.0.1 公開
SQL Browser 1.0.0.1 公開しました。
・・って、1.0.0.0 を公開した翌日なんですが、まぁ公開当初だし大目にみてください。
今後もバシバシ更新していきます、たぶん。。
・・って、1.0.0.0 を公開した翌日なんですが、まぁ公開当初だし大目にみてください。
今後もバシバシ更新していきます、たぶん。。
2010年6月22日火曜日
XMLファイルをリソースとして使用する方法
標準的なリソース(Resources.resx など)は文字列、イメージなどを含めることができますが、ちょっと複雑な情報を取り扱うには何かと不便です。
例えば、1つのキーに複数の情報を付加したい場合、文字列リソースを","(カンマ)区切りにするなど、工夫が必要になります(当然、情報にカンマが含まれていてはならない)。
と、いう訳で XMLファイルをリソースとして利用する方法をご照会します。
<例>
プロジェクト名:SampleProject
XMLファイル:Hoge.xml (プロジェクトの直下)
<設定>
Hoge.xml のプロパティを表示します。
ビルドアクションに「埋め込まれたリソース」を選択します。
<ソース>
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream xmlStream = assembly.GetManifestResourceStream("SampleProject.Hoge.xml"))
{
if (xmlStream != null)
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(xmlStream);
// ~XMLファイル操作~
xmlStream.Close();
}
}
以上で、アセンブリに XMLファイルをリソースとして埋め込むことができます。
例えば、1つのキーに複数の情報を付加したい場合、文字列リソースを","(カンマ)区切りにするなど、工夫が必要になります(当然、情報にカンマが含まれていてはならない)。
と、いう訳で XMLファイルをリソースとして利用する方法をご照会します。
<例>
プロジェクト名:SampleProject
XMLファイル:Hoge.xml (プロジェクトの直下)
<設定>
Hoge.xml のプロパティを表示します。
ビルドアクションに「埋め込まれたリソース」を選択します。
<ソース>
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream xmlStream = assembly.GetManifestResourceStream("SampleProject.Hoge.xml"))
{
if (xmlStream != null)
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(xmlStream);
// ~XMLファイル操作~
xmlStream.Close();
}
}
以上で、アセンブリに XMLファイルをリソースとして埋め込むことができます。
SQL Browser 公開のお知らせ
SQL Browser の公開を開始しました。
Vectorさんには申請中ですが、公式ページ( http://sites.google.com/site/sqlbrowser/ )のほうで、一足早くダウンロード可能です。
いっぱい使ってもらってより良いソフトウェアにしていきたいと思っていますので、是非ご利用願いますm(_ _)m
Vectorさんには申請中ですが、公式ページ( http://sites.google.com/site/sqlbrowser/ )のほうで、一足早くダウンロード可能です。
いっぱい使ってもらってより良いソフトウェアにしていきたいと思っていますので、是非ご利用願いますm(_ _)m
2010年6月18日金曜日
数値の取り扱い
現在、ほぼ最終段階(公開予定 7月1日)まで開発が進んでいます。
・・が、数値の取り扱いに頭を悩ましています。
例えば Oracle で NUMBER(10, 4) で定義されているフィールドがあるとします。
結果画面でデータの入力が可能になっていますが、そこで "123456.12345" と小数点の桁あふれが発生する数値を入力します。
手持ちの Oracle.DataAccess だと、自動で四捨五入が行なわれ、結果としては "123456.1235" となります。
値の設定は System.Data.Common.DbParameter 任せにしているため、小数点の桁数の管理など行なっていないがために発生している問題です。
また、例えば NUMBER(38, 0) で定義されているフィールドがあるとします。
このように桁が大きい場合、OCI-22053 が発生し、データ表示が行なえません。
桁の大きい数値を取り扱うとき、は OracleDataReaderクラスの、GetOracleDecimal などを利用しないといけないようです。
と、問題点をつらつらと書きましたが、プロバイダ依存の要素が強く、且つ、すべてのプロバイダでテストすることは不可能なため、現在は制限事項とするしかないかと考えていますm(_ _)m
・・が、数値の取り扱いに頭を悩ましています。
例えば Oracle で NUMBER(10, 4) で定義されているフィールドがあるとします。
結果画面でデータの入力が可能になっていますが、そこで "123456.12345" と小数点の桁あふれが発生する数値を入力します。
手持ちの Oracle.DataAccess だと、自動で四捨五入が行なわれ、結果としては "123456.1235" となります。
値の設定は System.Data.Common.DbParameter 任せにしているため、小数点の桁数の管理など行なっていないがために発生している問題です。
また、例えば NUMBER(38, 0) で定義されているフィールドがあるとします。
このように桁が大きい場合、OCI-22053 が発生し、データ表示が行なえません。
桁の大きい数値を取り扱うとき、は OracleDataReaderクラスの、GetOracleDecimal などを利用しないといけないようです。
と、問題点をつらつらと書きましたが、プロバイダ依存の要素が強く、且つ、すべてのプロバイダでテストすることは不可能なため、現在は制限事項とするしかないかと考えていますm(_ _)m
2010年6月16日水曜日
ソフトウェアのページ
Google Sites (Google サイト)にて SQL Browser 用のページを作成しました。
http://sites.google.com/site/sqlbrowser/
このブログも引き続き更新履歴や技術情報をお届けしますが、ソフトウェアの概要や、ダウンロード、問い合わせなど、総合的なページが必要だと思ったためです。
まだ情報量が少ないですが、今後充実させていきますので、是非ごらんくださいm(_ _)m
http://sites.google.com/site/sqlbrowser/
このブログも引き続き更新履歴や技術情報をお届けしますが、ソフトウェアの概要や、ダウンロード、問い合わせなど、総合的なページが必要だと思ったためです。
まだ情報量が少ないですが、今後充実させていきますので、是非ごらんくださいm(_ _)m
SQL整形ライブラリ(SqlFormatter)公開のお知らせ
先日のブログでお伝えしたとおり、SQL整形ライブラリ(SqlFormatter)の単独公開を開始しました。
Vector さんでダウンロードできますので、是非お試しくださいm(_ _)m
<SqlFormatter>
http://www.vector.co.jp/soft/win95/business/se484189.html
<SqlFormatterのサンプル>
http://www.vector.co.jp/soft/winnt/business/se484190.html
Vector さんでダウンロードできますので、是非お試しくださいm(_ _)m
<SqlFormatter>
http://www.vector.co.jp/soft/win95/business/se484189.html
<SqlFormatterのサンプル>
http://www.vector.co.jp/soft/winnt/business/se484190.html
2010年6月8日火曜日
PropertyGrid
このソフトウェアはデータベースに接続するので、もちろん「データベース接続設定」ダイアログが存在します。
DbConnectionStringBuilder のインスタンスを、PropertyGrid コントロールの SelectedObject プロパティに設定し、はい!完成っ!と、、暫く放置していました。
・・が、よく眺めてみると、Password (または pwd) は「***」とマスクが掛かっているのですが、ConnectionString が表示されていて、そこのパスワードは丸見え(x_x)
パスワードにマスクが掛かっている意味がない。。
設定ファイルを暗号化して保存している意味がない。。。
と、いうことで、PropertyGrid と格闘すること数時間、無事 ConnectionString を非表示にすることができましたので、以下、ソースコード。
PropertyGridの代わりに、以下のCustomPropertyGrid を使えばOKです。
// >> ここから -----------------------------------------------------------------
/// <summary>
/// カスタムプロパティグリッドです。
/// </summary>
public class CustomPropertyGrid : PropertyGrid
{
/// <summary>
/// プロパティタブを生成します。
/// </summary>
/// <param name="tabType">タブタイプ。</param>
/// <returns>プロパティタブ。</returns>
protected override PropertyTab CreatePropertyTab(Type tabType)
{
return new CustomPropertyTab();
}
}
/// <summary>
/// カスタムプロパティタブです。
/// </summary>
public class CustomPropertyTab : PropertyTab
{
/// <summary>
/// プロパティのコレクションを取得します。
/// </summary>
/// <param name="component">対象のコンポーネント。</param>
/// <param name="attributes">属性。</param>
/// <returns>プロパティのコレクション。</returns>
public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes)
{
PropertyDescriptorCollection properties;
if (attributes != null)
{
properties = TypeDescriptor.GetProperties(component, attributes);
}
else
{
properties = TypeDescriptor.GetProperties(component);
}
PropertyDescriptorCollection collection = new PropertyDescriptorCollection(null);
foreach (PropertyDescriptor desc in properties)
{
// ConnectionString は追加しない
if (desc.Name == "ConnectionString")
{
continue;
}
collection.Add(desc);
}
return collection;
}
/// <summary>
/// タブ名を取得します。
/// </summary>
public override string TabName
{
get
{
return "CustomPropertyTab";
}
}
/// <summary>
/// ビットマップを取得します。
/// </summary>
public override Bitmap Bitmap
{
get
{
return new Bitmap(16, 16);
}
}
}
// << ここまで -----------------------------------------------------------------
DbConnectionStringBuilder のインスタンスを、PropertyGrid コントロールの SelectedObject プロパティに設定し、はい!完成っ!と、、暫く放置していました。
・・が、よく眺めてみると、Password (または pwd) は「***」とマスクが掛かっているのですが、ConnectionString が表示されていて、そこのパスワードは丸見え(x_x)
パスワードにマスクが掛かっている意味がない。。
設定ファイルを暗号化して保存している意味がない。。。
と、いうことで、PropertyGrid と格闘すること数時間、無事 ConnectionString を非表示にすることができましたので、以下、ソースコード。
PropertyGridの代わりに、以下のCustomPropertyGrid を使えばOKです。
// >> ここから -----------------------------------------------------------------
/// <summary>
/// カスタムプロパティグリッドです。
/// </summary>
public class CustomPropertyGrid : PropertyGrid
{
/// <summary>
/// プロパティタブを生成します。
/// </summary>
/// <param name="tabType">タブタイプ。</param>
/// <returns>プロパティタブ。</returns>
protected override PropertyTab CreatePropertyTab(Type tabType)
{
return new CustomPropertyTab();
}
}
/// <summary>
/// カスタムプロパティタブです。
/// </summary>
public class CustomPropertyTab : PropertyTab
{
/// <summary>
/// プロパティのコレクションを取得します。
/// </summary>
/// <param name="component">対象のコンポーネント。</param>
/// <param name="attributes">属性。</param>
/// <returns>プロパティのコレクション。</returns>
public override PropertyDescriptorCollection GetProperties(object component, Attribute[] attributes)
{
PropertyDescriptorCollection properties;
if (attributes != null)
{
properties = TypeDescriptor.GetProperties(component, attributes);
}
else
{
properties = TypeDescriptor.GetProperties(component);
}
PropertyDescriptorCollection collection = new PropertyDescriptorCollection(null);
foreach (PropertyDescriptor desc in properties)
{
// ConnectionString は追加しない
if (desc.Name == "ConnectionString")
{
continue;
}
collection.Add(desc);
}
return collection;
}
/// <summary>
/// タブ名を取得します。
/// </summary>
public override string TabName
{
get
{
return "CustomPropertyTab";
}
}
/// <summary>
/// ビットマップを取得します。
/// </summary>
public override Bitmap Bitmap
{
get
{
return new Bitmap(16, 16);
}
}
}
// << ここまで -----------------------------------------------------------------
2010年6月3日木曜日
SQL整形
思い立った(他の開発が疲れたとき(^x^))とき、SQL整形の機能を強化しています。
これまた奥の深い世界で、SQLを書く人により流儀やお作法があります。
C# や Java のようにコーディング規約に従って記述することは稀で、少なくとも僕の経験の範囲では、一度も見かけたことがないという・・
※パフォーマンスに考慮して、ウンタラ・・はもちろんありますが。。
例えば、SELECT文の項目の区切りであるカンマ(,)、皆さんはどこに付けますか?
<Aさん>
SELECT
COL1, -- カンマを後に付ける派
COL2
FROM
TABLE1
<Bさん>
SELECT
COL1
,COL2 -- カンマを前に付ける派
FROM
TABLE1
ちなみに僕はAさんと同じで、後ろに付けるタイプです。
この他にも、AND の位置や、JOIN、UNION と流儀を上げだしたら、きりがありません。
そしてすべての流儀に合わせて整形エンジンを組むのはかなり困難です(T^T)
メインの流儀はオプションで設定できるようにしていくつもりですが、そもそもSQLは、自然言語に近く整形が困難な言語ですので、どこまで作り込める(やる気になる)か。。
もう少し精度が上がったら、SQLの整形エンジン自体を、オープンソースか.NET DLLで再利用可能な形で公開しますので、使って頂いて色々叩いてもらいたいなぁと思っています。
さて、話は変わって最後に本日苦労したところ。
<通常のINSERT>
INSERT INTO
TABLE1
(
COL1,
COL2
)
VALUES
(
'AAA',
'BBB'
)
<SELECT INSERT>
INSERT INTO
TABLE1
SELECT
COL1,
COL2
FROM
TABLE2
何故、INSERTで違う記述を可能にしたんだ、ANSIめ(ToT)
これまた奥の深い世界で、SQLを書く人により流儀やお作法があります。
C# や Java のようにコーディング規約に従って記述することは稀で、少なくとも僕の経験の範囲では、一度も見かけたことがないという・・
※パフォーマンスに考慮して、ウンタラ・・はもちろんありますが。。
例えば、SELECT文の項目の区切りであるカンマ(,)、皆さんはどこに付けますか?
<Aさん>
SELECT
COL1, -- カンマを後に付ける派
COL2
FROM
TABLE1
<Bさん>
SELECT
COL1
,COL2 -- カンマを前に付ける派
FROM
TABLE1
ちなみに僕はAさんと同じで、後ろに付けるタイプです。
この他にも、AND の位置や、JOIN、UNION と流儀を上げだしたら、きりがありません。
そしてすべての流儀に合わせて整形エンジンを組むのはかなり困難です(T^T)
メインの流儀はオプションで設定できるようにしていくつもりですが、そもそもSQLは、自然言語に近く整形が困難な言語ですので、どこまで作り込める(やる気になる)か。。
もう少し精度が上がったら、SQLの整形エンジン自体を、オープンソースか.NET DLLで再利用可能な形で公開しますので、使って頂いて色々叩いてもらいたいなぁと思っています。
さて、話は変わって最後に本日苦労したところ。
<通常のINSERT>
INSERT INTO
TABLE1
(
COL1,
COL2
)
VALUES
(
'AAA',
'BBB'
)
<SELECT INSERT>
INSERT INTO
TABLE1
SELECT
COL1,
COL2
FROM
TABLE2
何故、INSERTで違う記述を可能にしたんだ、ANSIめ(ToT)
2010年6月2日水曜日
スタートページを追加しました
SQL Browser の開発状況です。
基本機能はおおむね実装が完了し、現在は使い勝手や例外処理の見直しの最中です。
「やっぱり SQL整形(崩し)は欲しいよね。。」
「使ったファイルの履歴があったほうが便利だなぁ」
など、自己満足(?)で機能追加をしています。
さて、このアプリはもともとデータベースに接続ありきで開発を進めていました。
SQL整形などの機能追加により、接続していないでも使うケースあるよね。。
ということで、データベースに接続していない状態も管理する必要が出てきました。
修正は大変でしたが、何とか完成。
ただし、データベースに接続していないと、初期表示が何もないさびしい画面に。。
そこで、VS風のスタートページを作ってみました。
どうですかね?
基本機能はおおむね実装が完了し、現在は使い勝手や例外処理の見直しの最中です。
「やっぱり SQL整形(崩し)は欲しいよね。。」
「使ったファイルの履歴があったほうが便利だなぁ」
など、自己満足(?)で機能追加をしています。
さて、このアプリはもともとデータベースに接続ありきで開発を進めていました。
SQL整形などの機能追加により、接続していないでも使うケースあるよね。。
ということで、データベースに接続していない状態も管理する必要が出てきました。
修正は大変でしたが、何とか完成。
ただし、データベースに接続していないと、初期表示が何もないさびしい画面に。。
そこで、VS風のスタートページを作ってみました。
どうですかね?
2010年5月25日火曜日
ConnectionクラスのGetSchemaメソッド
テーブル一覧やビューの一覧の表示ですが、ConnectionクラスのGetSchemaメソッドを使用しています。
このメソッドが曲者で、System.Data.DataTable を返す仕様となっています。
型付ではなく、データプロバイダ任せになっているため、テーブル名を取得するだけでも一苦労掛かります。。
※列名が TableName だったり、TABLE_NAME だったり・・。
また、一覧表示では、TABLE_NAME より テーブル名 と表示されているほうが、分かり易いと思いますので、GetSchemaメソッドの結果を日本語化する必要があります。
辞書ファイルによるマッチング処理を行っていますが、データプロバイダ全てを網羅するのはかなり厳しいと思っています。
どこかに一覧とか公開してませんかね・・(T^T)
このメソッドが曲者で、System.Data.DataTable を返す仕様となっています。
型付ではなく、データプロバイダ任せになっているため、テーブル名を取得するだけでも一苦労掛かります。。
※列名が TableName だったり、TABLE_NAME だったり・・。
また、一覧表示では、TABLE_NAME より テーブル名 と表示されているほうが、分かり易いと思いますので、GetSchemaメソッドの結果を日本語化する必要があります。
辞書ファイルによるマッチング処理を行っていますが、データプロバイダ全てを網羅するのはかなり厳しいと思っています。
どこかに一覧とか公開してませんかね・・(T^T)
2010年5月15日土曜日
外部コンポーネント その1
ソフトウェアをすべて始めから開発するのは非常に大変です。
なので、オンラインリソースを参照したり、無償・有償に限らず外部コンポーネントを利用するのが、一般的な開発スタイルとなっています。
SQL Browser の開発でも類に漏れず、外部コンポーネントをいくつか利用しています。
その中で、今回は DockPanel Suite を紹介します。このコンポーネントは、Visual Studio のツールボックスのようなドッキングウィンドウを実現するためのものです。
フリーで提供されていて、しかもオープンソース(C#)のため、独自の改良も可能です。
また、サンプルソースも充実していますので、やり方がわからず困ることは少ないと思います。
と、いうわけで、非常にお勧めなコンポーネントなのですが、DockPanel_2_3_1_Soruce.zip のバージョンでは、日本語を利用した場合に問題があります。
ドッキングで隠れているとき、タブ表示されますが、文字が切れてしまいます。
また、Visual Studio と異なり、縦書き表示になります。
ソースをざっと眺めてみたら、VS2005AutoHideStrip.cs の 354行目~357行目 に問題があることが分かりました。
if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical);
else
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
DrawString でタブの文字を描画しているのですが、StringFormatTabVertical で縦書きになっています。
また、その前の 277行目~279行目 でタブの幅を算出しています。
int width = imageWidth + ImageGapLeft + ImageGapRight +
TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width +
TextGapLeft + TextGapRight;
ここで、縦書きを考慮していないため、文字が切れてしまう訳です。
Visual Studio に合わせたいので、354行目~357行目 をコメントアウトして、「横書きのまま、90度回転させて描画」という修正を行うことにします。
// if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
// g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical);
// else
// g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
{
Rectangle rectText2 = rectText;
rectText2.X = 0;
rectText2.Y = 0;
rectText2.Width = rectText.Height;
rectText2.Height = rectText.Width;
float originOffsetX = g.Transform.OffsetX;
float originOffsetY = g.Transform.OffsetY;
// g.TranslateTransform(rectText.Width, rectText.Y); 2010/08/05 バグ修正
g.TranslateTransform(rectText.X + rectText.Width, rectText.Y);
g.RotateTransform(90F);
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText2, StringFormatTabHorizontal);
g.TranslateTransform(originOffsetX, originOffsetY);
}
else
{
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
}
と、いうわけで、無事に表示されるようになりました(^o^)/
<2010/08/05 追記>
ついでにパネルが左右に表示されているとき、Visual Studio 風にアイコンを90度回転するソースもご紹介します。
同じく VS2005AutoHideStrip.cs の 344行目 をコメントアウトして、以下の修正を行ってください。
Bitmap bmp = ((Form)content).Icon.ToBitmap();
if ((dockState == DockState.DockLeftAutoHide) || (dockState == DockState.DockLeft)
(dockState == DockState.DockRightAutoHide) || (dockState == DockState.DockRight))
{
bmp.RotateFlip(RotateFlipType.Rotate270FlipX);
}
g.DrawImage(bmp, RtlTransform(rectImage, dockState));
bmp.Dispose();
bmp = null;
// g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState));
なので、オンラインリソースを参照したり、無償・有償に限らず外部コンポーネントを利用するのが、一般的な開発スタイルとなっています。
SQL Browser の開発でも類に漏れず、外部コンポーネントをいくつか利用しています。
その中で、今回は DockPanel Suite を紹介します。このコンポーネントは、Visual Studio のツールボックスのようなドッキングウィンドウを実現するためのものです。
フリーで提供されていて、しかもオープンソース(C#)のため、独自の改良も可能です。
また、サンプルソースも充実していますので、やり方がわからず困ることは少ないと思います。
と、いうわけで、非常にお勧めなコンポーネントなのですが、DockPanel_2_3_1_Soruce.zip のバージョンでは、日本語を利用した場合に問題があります。
ドッキングで隠れているとき、タブ表示されますが、文字が切れてしまいます。
また、Visual Studio と異なり、縦書き表示になります。
ソースをざっと眺めてみたら、VS2005AutoHideStrip.cs の 354行目~357行目 に問題があることが分かりました。
if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical);
else
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
DrawString でタブの文字を描画しているのですが、StringFormatTabVertical で縦書きになっています。
また、その前の 277行目~279行目 でタブの幅を算出しています。
int width = imageWidth + ImageGapLeft + ImageGapRight +
TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width +
TextGapLeft + TextGapRight;
ここで、縦書きを考慮していないため、文字が切れてしまう訳です。
Visual Studio に合わせたいので、354行目~357行目 をコメントアウトして、「横書きのまま、90度回転させて描画」という修正を行うことにします。
// if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
// g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabVertical);
// else
// g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
if (dockState == DockState.DockLeftAutoHide dockState == DockState.DockRightAutoHide)
{
Rectangle rectText2 = rectText;
rectText2.X = 0;
rectText2.Y = 0;
rectText2.Width = rectText.Height;
rectText2.Height = rectText.Width;
float originOffsetX = g.Transform.OffsetX;
float originOffsetY = g.Transform.OffsetY;
// g.TranslateTransform(rectText.Width, rectText.Y); 2010/08/05 バグ修正
g.TranslateTransform(rectText.X + rectText.Width, rectText.Y);
g.RotateTransform(90F);
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText2, StringFormatTabHorizontal);
g.TranslateTransform(originOffsetX, originOffsetY);
}
else
{
g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, StringFormatTabHorizontal);
}
と、いうわけで、無事に表示されるようになりました(^o^)/
<2010/08/05 追記>
ついでにパネルが左右に表示されているとき、Visual Studio 風にアイコンを90度回転するソースもご紹介します。
同じく VS2005AutoHideStrip.cs の 344行目 をコメントアウトして、以下の修正を行ってください。
Bitmap bmp = ((Form)content).Icon.ToBitmap();
if ((dockState == DockState.DockLeftAutoHide) || (dockState == DockState.DockLeft)
(dockState == DockState.DockRightAutoHide) || (dockState == DockState.DockRight))
{
bmp.RotateFlip(RotateFlipType.Rotate270FlipX);
}
g.DrawImage(bmp, RtlTransform(rectImage, dockState));
bmp.Dispose();
bmp = null;
// g.DrawIcon(((Form)content).Icon, RtlTransform(rectImage, dockState));
ソフトについて
今回は、ソフトウェアの主な機能を箇条書きします。
<主な機能>
・ADO.NET にてデータベースに接続する。
・各種クエリーがトランザクション実行可能。
・選択クエリー(SELECT)の結果をグリッド形式の表で表示。
・クエリーのファイル保存が可能。
・DBオブジェクト(テーブルやビュー)をリスト表示可能。
…うーむ、機能だけだと特徴なさすぎですね(^o^;)
皆さんにお使いいただけるよう、アピールをしなくては。。
と、いうことで。
アピールポイントの1つにプレビュー表示があります。
プレビュー機能がある類似ソフトって意外と少ないです。
データを確認する必要があるとき、「SELECT * FROM TABLE1」みたいな SQL で、いきなり実行してしまうことが間々あります。
ところが思っていたよりデータ件数が多く、なかなか結果が表示されず、イライラすることも、しばしば・・。
そんな理由でプレビューはどうしてもつけたかった機能です。
<主な機能>
・ADO.NET にてデータベースに接続する。
・各種クエリーがトランザクション実行可能。
・選択クエリー(SELECT)の結果をグリッド形式の表で表示。
・クエリーのファイル保存が可能。
・DBオブジェクト(テーブルやビュー)をリスト表示可能。
…うーむ、機能だけだと特徴なさすぎですね(^o^;)
皆さんにお使いいただけるよう、アピールをしなくては。。
と、いうことで。
アピールポイントの1つにプレビュー表示があります。
プレビュー機能がある類似ソフトって意外と少ないです。
データを確認する必要があるとき、「SELECT * FROM TABLE1」みたいな SQL で、いきなり実行してしまうことが間々あります。
ところが思っていたよりデータ件数が多く、なかなか結果が表示されず、イライラすることも、しばしば・・。
そんな理由でプレビューはどうしてもつけたかった機能です。
2010年5月8日土曜日
開発ブログ公開します!
はじめまして。開発者の taka です。
SQL Browser というソフトウェアを開発しています。
利用してくださる方はもちろん、.NET Framework開発者の方もオンラインリソースとして使えるような情報が書けたらと思いますので、よろしくお願いしますm(_ _)m
SQL Browser というソフトウェアを開発しています。
利用してくださる方はもちろん、.NET Framework開発者の方もオンラインリソースとして使えるような情報が書けたらと思いますので、よろしくお願いしますm(_ _)m
登録:
投稿 (Atom)