わいえむねっと

Contents
Categories
Calendar
2026/05
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.053 sec
Chashed: -
2010/04/20 Tue
気は抜けないといってるそばから気を抜いて熱出してダウン。
朦朧としながら隠し機能をつくりこむ。(なにやってるんだ)
2010/04/19 Mon
ベータリリース当日。
午後からの予定だったのを、余裕をみて午前からにしましょう!ということになったのだけれど、午前中に可能な作業が30分であっさり完了。
セキュリティ関連でひっかかるよなーと思っていたのだけれどまさかのザル。いいのあれ。
まぁ、本番は移動を挟んで午後からの作業なのです。これからなのです。 本番も完了。
加熱されてべろべろになったりとかはありましたが、大きな問題はなく。
正式リリースは来週。気は抜けない。
2010/04/18 Sun
ドキュメントを一本書き上げたのが7時半。
洗濯して一眠りして昼。
ついでだからもう一本書くかーと書き始めて、書き上げたのが19時半。
明日は朝から客先なのでその準備をしてとかしてたら一日が終わる。

あまり忙しい感覚ではないのだけれど、少し時間の経過が早過ぎる気はする。
2010/04/17 Sat
5時。始発が17分だったと思うので、ぼちぼあがろうー。 あられが降っていて歩くとザクザク音がする中を帰ってきて
寒すぎだろこれとエアコンをかけて布団にもぐって
一眠りして
起きて
まだ寒くて
シキさんにそそのかされて真っ昼間っから酒を飲んで
少し温まって
エアコンのリモコンを見たら除湿で
室温上がるどころか下がるだろこれ!バカ!!

暖房にしたらあっというまに暖かくなりました。
そもそも4月半ばなのにこんなに寒いのが悪い!
2010/04/16 Fri
雨が降っていたけど会社に傘が2本置きっぱなしの状態だったので傘を持たずにでかける。
傘がないわけではないのです。まぁいいかというか、そもそも家から駅までも駅から会社までも大した距離じゃないので。

そしてまぁいいかと今日は家に帰るのをやめる。
終電がないわけではないのです。まぁいいかというか。明日の朝には帰るよ!
2010/04/15 Thu
昨日までのあらすじ。
送るの忘れてましたーと元請様から送られてきた書類を見たら驚愕の事実が記載されていてギャーーー!?と叫んだ。 4時までコードを書いて ある程度片を付けて、
横になったもののテンションが上がりきっているせいで眠いのに眠れなくて5時になって、
いつの間にか落ちていて7時に目が覚めて、
次に気が付いたら9時でした。うえ。

会社行こう。
「ナンだ?! \126-」
ナンです。
2010/04/14 Wed
2時に寝て6時に目が覚めて9時まで仕事して、そろそろ仕事いくかと出社して。
なにかがおかしい。 rbindかと思っていたらbindだった上にrbindがなかった。 HTML→Excelのスペースの扱いについてちょと調べたのでメモ。

<table>
  <tr>
    <td>Narrow</td>
    <td><span>foo   bar</span></td>
    <td><span style="mso-spacerun:yes;">foo   bar</span></td>
  </tr>
  <tr>
    <td>Wide</td>
    <td><span>foo   bar</span></td>
    <td><span style="mso-spacerun:yes;">foo   bar</span></td>
  </tr>
  <tr>
    <td>NBSP</td>
    <td><span>foo&nbsp;&nbsp;&nbsp;bar</span></td>
    <td><span style="mso-spacerun:yes;">foo&nbsp;&nbsp;&nbsp;bar</span></td>
  </tr>
</table>



・mso-spacerun の値に関わらず、半角スペースはまとめられる
・mso-spacerun:yes; では、全角スペースが半角になる
・mso-spacerun:no; では、NBSP が 0x3F になる

Excel上の見た目では0x3Fでも問題ないのだけれど、他アプリケーションとの連携を考えると嬉しくない。
さりとて、全角スペースが半角にされてしまうのも嬉しくない。

ここでスペースを数値文字参照にすると、

<table>
  <tr>
    <td>Narrow</td>
    <td><span>foo&#x20;&#x20;&#x20;bar</span></td>
    <td><span style="mso-spacerun:yes;">foo&#x20;&#x20;&#x20;bar</span></td>
  </tr>
  <tr>
    <td>Wide</td>
    <td><span>foo&#x3000;&#x3000;&#x3000;bar</span></td>
    <td><span style="mso-spacerun:yes;">foo&#x3000;&#x3000;&#x3000;bar</span></td>
  </tr>
</table>



・全角スペースの扱いは同様
・半角スペースは数値文字参照にするとまとめられない

WEBブラウザの場合は数値文字参照であってもまとめられるはずだけど。ExcelはExcelだものということなのか。

というか、Excel→HTMLの場合は連続した半角スペースに対してのみ mso-spacerun を適用するようになっているので、そもそも mso-spacerun の適用範囲に全角スペースが含まれることがないわけであって HTML→Excelの場合もそうすべきだよねとかなんとか。
炭酸せんべいをかじりながら。
2010/04/13 Tue
ベータリリースのスケジュールが確定したので来週は波乱の予感。
まぁ、要件定義から設計、製造、試験およびサポートも含めてピンのプロジェクトなのでどうとでもしていきたい。 入力支援が強力だと生産性が上がった気になるけどそんなこともないんじゃないかと思う。 ここ数年で大量にでた退職者が集まって飲むという話を聞きつけたのでヒャッハー乱入だぜぇぇぇ!と思ったら、思いっきり定例会とバッティングしていたので、なる様にご相談。

飲み会のバッティングは飲む機会の損失であり、ひいては人生の損失であり、というかそんなことばかり言ったりやったり飲んだり飲んだりしているから前歯を損失したりするんだよこのバカと思ったり、今日もシキさんとネット飲み会したりなんだり。
2010/04/12 Mon
DataTable table1 = new DataTable();
table1.Columns.Add("A");
table1.Columns.Add("B");

DataTable table2 = new DataTable();
table2.Columns.Add("A");
table2.Columns.Add("B");

DataSet dataSet = new DataSet();
dataSet.Tables.Add(table1);
dataSet.Tables.Add(table2);

DataRelation relation1 = dataSet.Relations.Add(
    table1.Columns["A"], table2.Columns["A"]);
Debug.Print(dataSet.Relations.Count.ToString());
//1

table1.Rows.Add(1, "foo");
table2.Rows.Add(1, "bar");

Debug.Print(table1.Rows[0].GetChildRows(relation1)[0]["B"].ToString());
//bar

dataSet.Relations.Clear();
Debug.Print(dataSet.Relations.Count.ToString());
//0

try
{
    DataRow[] rows = table1.Rows[0].GetChildRows(relation1);
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
    //この行は、このリレーションシップと同じ DataSet に属していません。
}

try
{
    table1.Clear();
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
    //ForeignKeyConstraint Relation1 によって制約が実行され、Table2 に子行が存在するため、テーブル Table1 を消去できません。
}

table2.Clear();
table1.Clear();

DataRelation relation2 = dataSet.Relations.Add(
    table1.Columns["B"], table2.Columns["B"]);
Debug.Print(dataSet.Relations.Count.ToString());
//1

table1.Rows.Add(1, "foo");
try
{
    table2.Rows.Add(2, "foo");
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
    //ForeignKeyConstraint Relation1 には親テーブルに存在している子キー値 (2) が必要です。
}
try
{
    table2.Rows.Add(1, "bar");
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
    //ForeignKeyConstraint Constraint1 には親テーブルに存在している子キー値 (bar) が必要です。
}
table2.Rows.Add(1, "foo");

DataSet.Relations.Clear()はなんでこんな中途半端なの。

あげだま2袋と紅しょうが2袋を買って帰る。
あげだまはともかく、紅しょうがはほんともう業務用を買いたい。
2010/04/11 Sun
DataTableをFillした後に手動でAddする分のためにDataColumn.AutoIncrementを設定しているけどそれはなんかタイミング的に駄目な気がするよと思ったので検証。

DataTable table1 = new DataTable();
table1.Columns.Add();
table1.Columns[0].AutoIncrement = true;
table1.Rows.Add();
table1.Rows.Add();
table1.Rows.Add();
foreach (DataRow row in table1.Rows)
{
    Debug.Print(row[0].ToString());
}
//0
//1
//2
通常。

DataTable table2 = new DataTable();
table2.Columns.Add();
table2.Columns[0].AutoIncrement = true;
table2.Rows.Add(1);
table2.Rows.Add();
table2.Rows.Add();
foreach (DataRow row in table2.Rows)
{
    Debug.Print(row[0].ToString());
}
//1
//2
//3
事前に追加された値からインクリメント。

DataTable table3 = new DataTable();
table3.Columns.Add();
table3.Columns[0].AutoIncrement = true;
table3.Rows.Add(2);
table3.Rows.Add(1);
table3.Rows.Add();
foreach (DataRow row in table3.Rows)
{
    Debug.Print(row[0].ToString());
}
//2
//1
//3
事前に追加された最大の値からインクリメント。

DataTable table4 = new DataTable();
table4.Columns.Add();
table4.Rows.Add(1);
try
{
    table4.Columns[0].AutoIncrement = true;
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
}
//'String' 型 の DataColumn AutoIncrement は、一度データが設定されたら変更できません。
数値型でないデータが保持されている場合、AutoIncrement設定不可。

DataTable table5 = new DataTable();
table5.Columns.Add();
Debug.Print(table5.Columns[0].DataType.ToString());
//System.String
table5.Columns[0].AutoIncrement = true;
Debug.Print(table5.Columns[0].DataType.ToString());
//System.Int32
AutoIncrement設定でDataColumn.DataTypeが変化。

DataTable table6 = new DataTable();
table6.Columns.Add();
table6.Columns[0].DataType = System.Type.GetType("System.Int32");
table6.Rows.Add(2);
table6.Columns[0].AutoIncrement = true;
table6.Rows.Add(1);
table6.Rows.Add();
foreach (DataRow row in table6.Rows)
{
    Debug.Print(row[0].ToString());
}
//2
//1
//2
AutoIncrementが設定されてから追加された最大の値からインクリメント。

DataTable table7 = new DataTable();
table7.Columns.Add();
table7.Columns[0].DataType = System.Type.GetType("System.Int32");
table7.Rows.Add(2);
table7.Columns[0].AutoIncrement = true;
table7.Columns[0].Unique = true;
table7.Rows.Add(1);
try
{
    table7.Rows.Add();
}
catch (Exception ex)
{
    Debug.Print(ex.Message);
}
//列 'Column1' は一意であるように制約されています。値 '2' は既に存在します。
AutoIncrementはただインクリメントするだけなので、Unique制約は考慮されない。

Fillする前に設定するか、Fillした後であればAutoIncrementSeedも設定するとか。