ラベル プログラム の投稿を表示しています。 すべての投稿を表示
ラベル プログラム の投稿を表示しています。 すべての投稿を表示

2009年9月10日木曜日

c++ isnumeric?

最近またC++をやっています。
地獄です。
と、やる前は思っていたけどTrial&Errorが出来る環境なので楽しい。
こういうやりながら直すという環境があれば結構楽しいと思うのかもしれない。
考えてみれば、C#にしろVBにしろそういう今までそうだったように思う。
ちょっと画面に何か表示されたりちょっと変数に値が入るのを見るのが楽しい。

でで、C++でIsNumericみたいなのがあるかなぁと探したらあった。
ttp://www.sasaraan.net/program/cpp/cpp_ctest.html

一文字ずつ回さないといけないけれどこれで結構事足りるのです。
いいことを知った。
あと、STLでvectorなんかも使うとあまりポインタを意識しないで済む。
まぁ、char配列で一個参照先間違えてVC++が即死とかなったけど。

2009年4月24日金曜日

C# oracle 連想配列 配列 CLOB

C#でoracleのTableにCLOBのデータを格納したい。
一レコードではなく、複数レコードあるのでまとめて格納したい。

知っている知識として、連想配列を使用する方法を試してみたがエラーが出る。
マニアックなプログラミング備忘録
「内部エラー・コード、引数: [15419],[severe error during PL/SQL execution],[],[],[],[],[],[]」

CommandTypeはTextを指定していたのでそれがいけないのかと思い、ストアドにしてみた。
結果同じエラーが発生。

CLOB以外はうまく行くのでどうやらCLOBでは連想配列を使用出来ないみたい。
10gを使っているので、もしかしたら11gならうまく行くかもしれないけどね。

以下通常版
using(OracleCommand cmd = new (sql, con))
{
cmd.BindName=true;
cmd.CommandType = CommandType.Text;
OracleParameter parm = new OracleParameter("iINPUT", value);
cmd.Parameters.Add(parm);
cmd.ExecuteNonQuery();
}

以下連想配列版
OracleParameter parm = new OracleParameters("iINPUT", OracleDbType.Varchar2, valueList.Count);
parm.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
parm.Direction = ParameterDirection.Input;
parm.Value = valueList.ToArray();
cmd.Parameters.Add(parm);

以下配列
cmd.ArrayBindCount = valueList.Count;
OracleParameter parm = new OracleParameters("iINPUT", OracleDbType.Clob, valueList.Count);
parm.Direction = ParameterDirection.Input;
parm.Value = valueList.ToArray();
cmd.Parameters.Add(parm);

配列バージョンだとCLOBで格納できた。
配列のままをストアドに渡すのか、渡した配列数分繰り返しストアドを実行するのか。
どっちが良いかわからんけど、CLOBでは配列しか出来ないので悩む必要はないかな。
一回一回クライアント側から引数渡して実行するよりは圧倒的に早いだろう。
たぶん。

2009年2月18日水曜日

Visual Studio 2005 C# エディタ内でタブの表示が・となる。

変なショートカットキーを押したらしく、タブ入力している部分が・で表示されるようになった。

Ctrl+R後、Ctrl+Wで治った。

以前もこんなことやったようなのでメモ。

2009年2月17日火曜日

VisualStudio2005 検索するファイルが見つかりませんでした

まったく同じことが起こった人がいた。
そして解決方法も書いてあった。

ttp://d.hatena.ne.jp/RIP/20080827

検索をしてもファイルが見つからないとか言われる。
検索を中断したとかウインドウに表示されてウキー!となる。

ネットで調べてすぐに上記のサイトを発見。
[Ctrl+Scroll Lock]を検索と置換ウインドウが表示されていない状態で押下する。と治る
と書いてあってほんと?とか思ったらほんとに治った。

そんなボタン押してないのになんでだろうね。

2008年9月29日月曜日

vss2005の再インストールに失敗した

Error code 1603 for this component means
C:\WINDOWS\WinSxSにあるPoliciesフォルダを削除した。
また失敗した。。。

2008年9月27日土曜日

クラスに定義してあるプロパティの呼び出し

System.ReflectionのGetPropertyを使うとプロパティを呼び出せる。
DLLにあるプロパティを呼ぶのに使用出来る。
メモ。

追記
読み返してみたら結局調べなおさないといけない。
めんどーなので追記する。

例)あるクラスのプロパティをあるクラスにコピーする
object obj = null;
object[] obj2 = null;
Type type = typeof(ClassA);
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
obj = type.InvokeMember(property.Name, BindingFlags.GetProperty, null, copyMotoClass, null);
obj2 = new object[1] { obj };
type.InvokeMember(property.Name, BindingFlags.SetProperty, null, copySakiClass, obj2);
}
ClassAはクラスの名前。
copyMotoClassはインスタンス化したクラスの変数名。コピー元。
copySakiClassはインスタンス化したクラスの変数名。コピー先。

MemberwiseClone()を使用しても良いけど、必要な場合もあるので。

2008年9月16日火曜日

OracleのConnect byを忘れてはいけない

循環結合?みたいなものですな。

項目同士が親子関係になっている場合に良く使う。
今回これがあるお陰でかなり速度向上が図れた。
忘れるな俺。

2008年7月26日土曜日

その月の日数

DateTime date = new DateTime(2008, 7, 1);
date.AddMonths(1).AddDays(-1);

これで2008年7月の日数を求めていた。
さっき、もしかしたら使えるのでは?と思ったメソッド。

CalendarクラスのGetDayOfMonthメソッド。
これを使えばいちいち足したり引いたりしなくてすむかも。

試してはいない。

2008年7月25日金曜日

オートコンプリート コンボボックス

コンボボックスにオートコンプリートを適用する方法。

// オートコンプリートに使用するSource
comboBox.AutoCompleteSource = AutoCompleteSource.ListItems;
// オートコンプリート時の動作
comboBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

AutoCompleteSourceは他にAllSystemSources、AllUrl、FileSystem、HistoryList、RecentlyUsedList、CustomSource、None がある。

AutoCompleteModeは他にAutoAppend、AutoSuggest、AutoSuggestAppend、None がある。

細かいことはネット上に転がっているのでそちらを参照。

これだけでは問題はないが諸事情により、オートコンプリート状態をクリアすることになった。
例えば
0001:AAAA
0002:BBBB

というデータがコンボボックス上にあり、0001入力後、0002と入力した場合BBBBを表示したい。
そこでオートコンプリートをクリアしようと思ったがそれらしいメソッドが見つからず。
SendKeys.Send()メソッドにてESCを送信するようにした。
とりえあずはこれでうまくいった模様。

2008年7月23日水曜日

System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error

SourceGridを使用。
ユーザーコントロール1に貼り付け。
ユーザーコントロール2にユーザーコントロール1を貼り付け。
ユーザーコントロール2をデザイナで開くとエラーとなる。

エラーはすっごい長いエラーが出て最後に
System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error
こんなのが出てた。

意味不明。

色々とネットで探し回る。
コード開いてShift+F7で大丈夫だとか。
Spliterの最小値に変な設定するとおかしくなるとか。
プロジェクトの入っているフォルダの検索インデックスを無効にすると大丈夫だとか。

一体何がいけないのか。
SouceGridをユーザーコントロールに貼り付けるのがいけないのか。
はたまた、Serialize化に関する記述が抜けているのか。

だんだんとVS2005が重くなってきたので一旦落とした。
開きなおしてみるとデザイナで開けた。

なんだったんだこの三時間は!

こんなこともあるんだな。

追加
Excel.Application が定義されていません。
と出たりするのもVS2005再起動すると直る。