Posts Tagged ‘Windows Server’

InfoPathの日付形式はyyyy-MM-ddです

InfoPathでは、フィールドに入力されたデータは、そのフィールドの「データ型」に設定された表示形式に変換された上で表示されます。例えば日付型(date)に設定されたフィールドに「2010/03/12」と入力すると「2010年3月12日」と表示されます。また、データ型に適合しないデータが入力されると、該当フィールドが赤枠で表示され「日付のみ指定してください」といったデータの修正を促すメッセージが表示されます。

これはこれで便利な機能なのですが、実際のXMLフィールドに格納される生データの書式がわからないという落とし穴も生じます。これが問題になるのはVSTAを使ってVBやC#で記述されたプログラムからフィールドに直接データを入力しようとする場合で、例えば日付データ型で表示形式が「yyyy/MM/dd」と定義されたフィールドに「2010/03/12」というデータを入れると「日付のみ指定してください」というエラーメッセージが表示されてしまいます。原因はInfoPathでは日付データを ISO形式(yy-MM-dd)という形式で格納するため、これ以外のフォーマットのデータは全てエラーとして認識してしまうのです。

そのフィールドの「見た目」を表示形式ではなく、InfoPathで定義されているデータ型の記述フォーマットに厳密に適合した形式で入力してあげる必要がある、というのがミソです。まあ文字列型に数字入れてもエラーにはならないので、ハマるとしたら確実に日付関連のフォーマットぐらいでしょうか。私は見事にそれにハマったわけですが。

フォーマットさえ分かれば、後はこんな↓感じで簡単なコードだけで変換する事が出来ます。

日付の場合:
string todaysDate = DateTime.Today.ToString(“yyyy-MM-dd”);

日付と時刻の場合:
string todaysDateAndTime = DateTime.Today.ToString(“yyyy-MM-ddThh:mm:ss”);

下記のドキュメントにDateの形式に関する情報がちょろっと確認できます

Date のメンバ
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.InfoPath.semitrust.date_members.aspx

ただし上記のMicrosoftの公式ドキュメントにもあるように、この形式は共通言語仕様(CLS)には準拠していないため、たとえばこのデータを別システム(DBなど)に渡そうとする場合は再度データフォーマットの変換が必要になります。特に日付と時刻の型(YYYY-MM-DDThh:mm:ss)は、そのままMicrosfot SQL Serverのdatetime型フィールドに突っ込むとエラーになる(涙)ので、こんな感じで書式を再変換してやる必要があります

SQLServerのdatetime型に変換する
string todaysDateAndTime = DateTime.Parse(todaysDateAndTime).ToString();

しっかしInfoPath情報少ないですね、、、

 

Microsoft SQL Server Management Studioで「変更の保存が許可されていません」と言われた

Microsoft SQL Server Management Studioを使ってテーブルをデザインし、いざ作成(または変更を適用)しようとすると、

「変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要になります。再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になってます。」

と冷たくあしらわれ、キャンセルするかテキストファイルに保存するしかない状況に追い込まれます。

てっきりデータベースのセキュリティ設定に引っかかったと思い、ユーザ追加したりパーミッション変更したりと色々やってみたのですがダメ。

つまるところDB側の問題ではなく、なんとMicrosoft SQL Server Management Studioの初期状態ではテーブルの作成を必要とするような変更はできないようになっている、というオチでした。

解決策:

  1. Microsoft SQL Server Management Studioの「ツール」メニューから「オプション」を選択し、ツリー表示の中から「Designers」をクリック
  2. 「テーブルの再作成を必要とする変更を保存できないようにする」チェックボックスを外す
  3. 「OK」を押して完了

うっかりミスを減らすためとはいえ、サーバ側でなくツール側に制限かけとくってどうなんでしょ。手間が増えるだけであんまり効果はないと思うんですけど。少なくとも僕は引っかかりました。

 

Windows Server 2008でKB967723がWindows Update失敗 (エラーコード:80070490)

KB967723はセキュリティ用の更新プログラムなのですが、こいつがコケます。
しかもコケるので放置しようとすると「インストールしてください」というポップアップが定期的に表示されてイラッとします。
%SystemRoot%\SoftwareDistribution\Download以下のファイルを全て削除するとか、BITS(Background Intelligent Transfer Service)サービス再起動したりとか色々やってみたのですがうまくいかず、結局個別にパッチ落としてインストールしたら問題なくインストールできました。なんなんだ、、、

Windows Server 2008 用セキュリティ更新プログラム (KB967723)

32bit:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=35c1d5a9-a953-4fc6-90c0-d2358c7b89e6

64bit:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6e46822e-f79d-492d-ad01-ee680ad324f5

Service Pack2適用前後で発現しているので、ひょっとしたらこいつ絡みかも。
ちなみに当方ではSP2適用後にKB967723を個別にダウンロード&手動インストールで上手くいきました。64bit版です念のため。

 

Windows Server 2008 の評価期間を延長する

Windows Server 2008 評価版の試用期間は 60 日ですが、これは最大3 回までリセットすることができます。これにより試用期間を最大 240 日まで延長することができます。

  • コマンドプロンプトを表示する 。「スタート」から「コマンド プロンプト」 をクリックするか、「スタート」から「ファイル名を指定して実行」を選択後「cmd.exe」と入力する
  • 「slmgr.vbs -rearm 」と入力する
  • サーバを再起動する
  • 再びコマンドプロンプトを開き「slmgr.vbs -dli」 と入力する
  • 現在のライセンスの状態を示すウィンドウが表示されるので、試用期間が 60 日にリセットされていることを確認する

うーん、まさにチラシの裏。ちなみに元ネタはこちら。

http://support.microsoft.com/kb/948472/ja