ソフトウェア&ライブラリを公開して半月、Vectorさんからダウンロード数のお知らせがありました。
数字は公表するほどでもなく(予想通りですが)、公式サイトのダウンロード数と合算すると、2桁オーバーしたところです。
ところで、Vectorさんはダウンロード数はメールでのみのお知らせなんですが、何ででしょうね?
ランキングをやっているので、ダウンロード件数は把握してるでしょうし、一覧で見れるようにするのは容易いと思うのですが。。
ダウンロード数はフリーウェアである以上、モチベーション維持の1つの要素ですので、とりあえず地道に手集計します。
目指せ、3桁オーバー(^o^)/
SQL Browser というソフトウェアを開発しています。ベンダ製 .NET データプロバイダや ODBC.NETによる ODBC 接続で、SQLの実行や一覧の取得が可能です。ブログにて開発履歴や課題などを書いていきます。
2010年6月30日水曜日
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風のスタートページを作ってみました。
どうですかね?
登録:
投稿 (Atom)