2011年12月27日火曜日

Telerik FileExplorerのエラー

現象:Telerik FileExplorerを使用したWebページで以下のエラーが表示される。
Invalid Characters In Folder Name

原因:Telerik FileExplorerのInitalPathが無効だと表示されるエラーでした。

2011年12月16日金曜日

文字列に特定の文字列が含まれているかを調べるには?

文字列に特定の文字列が含まれているかを調べるには?(Contains編)

string str = "ろうにゃくなんにょ";
Console.WriteLine(str.Contains("にゃく")); // 出力:True
Console.WriteLine(str.Contains("にゃん")); // 出力:False


ある文字列の部分文字列として特定の文字列が含まれているかどうかを調べるには、Stringクラス(System名前空間)のIndexOfメソッドを用いればよい。

 IndexOfメソッドは本来、ある文字列において、パラメータで指定した検索文字列が最初に見つかった位置を得るためのものだ。もし検索文字列が見つからなかった場合には、戻り値は-1となる。よって、IndexOfメソッドの戻り値が0以上かどうかをチェックすれば、文字列が含まれているかどうかを調べることができる。


static bool HasString(string target, string word) {
if (word == "")
return false;
if (target.IndexOf(word) >= 0) {
return true;
} else {
return false;
}
}

XML

実体参照・文字参照

XMLで使われる特殊な文字は実体参照で表す。

また、文字コードを使って表すことも出来る(文字参照)。

どちらも「&」で始まり「;」で終わる。


実体参照 & &
&lt; <
&gt; >
&apos; '
&quot; "
文字参照 &#n; 十進数で文字コードを指定
&#xh; 十六進数で文字コードを指定

2011年12月9日金曜日

C# 改行

C# 改行

@"\r\n"

.NetでDiff 実装

いろんな場所で必要になってきた、Diff

以下の場所に.Netライブラリとしてありました。
http://www.codeproject.com/KB/recipes/diffengine.aspx

2011年12月8日木曜日

LINQ to SQL でクエリを直接実行

var db = new HgeHoge(@"c:\Hoge.mdf");
var r = db.ExecuteQuery<table>("SELECT * FROM Fuga WHERE Id ={0}", 5);

元ネタ
http://blogs.wankuma.com/rti/archive/2009/09/16/181295.aspx

Group Byとか、直接SQLを記述したい場合などに使えそう。

windows installer にアクセスできない

TOP > itやweb/情報系ソフトやWEBサービスなど, pcerror/パソコンのエラー対応 >
インストールエラー発生の原因と対処、windowsインストーラサービスにアクセスできませんでした…とは?

Inst_errorインストールエラー発生。「windowsインストーラサービスにアクセスできませんでした」というエラーメッセージ。新しいアプリケーション(プログラム)をインストールできない状況だ。これはどういうことか?これはWindowsインストーラのレジストリが壊れている可能性が高い。

Windowsインストーラは便利なプログラムだが、何かの拍子にインストール処理に失敗すると、ファイルとレジストリが不整合を起こす(レジストリが壊れる)らしい。それ以後Windowsインストーラが起動時にエラーを発生するようになる場合がある。
Windowsインストーラを使用してアプリケーションをインストールすると、レジストリにアプリケーションのインストール情報が書き込まれ、%SystemRoot%\Installerという隠しフォルダ内に、Windowsインストーラ・パッケージやWindowsインストーラ修正パッケージが保存される。

何らかの理由で、これらの隠しファイルとレジストリ情報が不整合性になることがある。この状態になると新しいアプリケーションがインストールエラーになりインストールできなくなってしまう。
また、最近のアプリケーションは、レジストリなどを正しく設定しないと実行できないことが多いため、Windowsインストーラが使えなくなるとアプリケーションも使えないことが起こりえる。

対策としては、Windows インストーラを登録解除してから再登録する。

Msiexec_unregister



※以下はマイクロソフトオンラインサポートより(アプリケーションのインストール時にエラー メッセージ "Windows インストーラ サービスにアクセスできませんでした" が表示される)

方法 1 : Windows インストーラを登録解除してから再登録する

1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。

2. 次に、MSIEXEC /regserver と入力し、[OK] をクリックします。この操作を正しく実行しても、処理が行われていないように見えるか、または砂時計が一瞬表示されることがあります。このコマンドを実行したら、操作は完了です。

3. Windows インストーラ ベースのアプリケーションを再実行します。

2011年12月7日水曜日

UniPaasで、Windows制御

UniPaasで、Windows制御

閉じるボタンを無効にするだけなら、
メインプログラムのタスク前に

アクション 式 CallDLL('USER32.EnableMenuItem', '4444', CallDLL('USER32.GetSystemMenu', '444', CallDLL('USER32.GetAncestor', '444', WinHWND(0), 2), 0), 61536, 2)


ついでにこれを書いておけばシステムメニューの閉じるも消せます。

アクション 式 CallDLL('USER32.DeleteMenu', '4444', CallDLL('USER32.GetSystemMenu', '444', CallDLL('USER32.GetAncestor', '444', WinHWND(0), 2), 0), 6, 1024)

アクション 式 CallDLL('USER32.DeleteMenu', '4444', CallDLL('USER32.GetSystemMenu', '444', CallDLL('USER32.GetAncestor', '444', WinHWND(0), 2), 0), 5, 1024)

2011年12月6日火曜日

IE8以降のタブセッション

はじめに

IE8は、今までのIE6/IE7とは異なり、IEのアイコンから新規にウインドウを起動しても、最初に起動したウインドウとセッションが共有されてしまいます。

* IE8


IE6/7の考え方は通用せず、上記のようなやり方であればいずれもセッションを共有します。プロセスが違うウィンドウであっても。

そもそもIE6/7であればウィンドウの数よりプロセスの数が多くなることはありませんでしたが、IE8の場合はプロセスがひとつであっても、タブを増やすと複数のプロセスが出来たりします。

IE8でセッションを共有しない新しいウィンドウを開きたい場合は、「ファイル」→ 「新規セッション」でウィンドウを開きます。

[Browser]IEのウィンドウごとのセッション共有・非共有 はてなブックマーク - [Browser]IEのウィンドウごとのセッション共有・非共有

このため、IE8を新規セッションで起動するには、ユーザ側で意図的に新規セッションを開始するようにしないといけません。IE8を新規セッションで起動するには、以下の2つの方法があります。
IE8を新規セッションで起動する(メニューから)

IE8のメニューから「ファイル」-「新規セッション」で新規ウインドウを立ち上げると新たにセッションが開始され、既存のウインドウとはセッションが別ものになります。

f:id:replication:20100517233322j:image
IE8を新規セッションで起動する(コマンド)

また、IE8のexeファイルをnomergeオプションつきで起動することで、新規セッションで立ち上げることができます。

IE8のインストールディレクトリへ移動

cd C:\Program Files\Internet Explorer

IE8をnomergeオプションをつけて起動する

iexplore.exe -nomerge

【一般的なWindow別セッションの実現方法】

1.コマンドプロンプトから、「iexplorer -nomerge」起動する。

 ※-nomergeオプションを付けてIE8を起動すると、既にIE8が起動していてもCookieは引き継ぎません。

2.IE8の「ファイル」→「新規セッション」を選択して別ウインドウを起動する。

どちらの場合でもユーザ操作が必要であるため、運用を徹底するしか方法はありません。

IE8でのWindow別セッションの実現 (プログラミングワークショップ) はてなブックマーク - IE8でのWindow別セッションの実現 (プログラミングワークショップ)

2011年11月24日木曜日

SQL階層の実行で、以下のエラーが表示された。

Types don't match between the anchor and the recursive part in column "ColumnName" of recursive
query "CTE_Name"

通常は、項目属性をCASTで統一すればOKだが
データベースの参照順位がBIN2になっていなかった為に、SQLは問題ないけど
エラー表示されるようだ。

データベース参照順位を、Japaness90BIN2にしたら、OKになった。

2011年11月1日火曜日

UniPaas1.5もXPS印刷可能

UniPaas1.5もXPS印刷可能でした。

UniPaas1.9gからXPS印刷可能

UniPaas1.9gからXPS印刷可能

UniPaas1.9gのプリンタ印刷で、XPSを指定します。
入出力ファイルの式で、出力ファイル名を指定します。
うまく、上記式で指定したファイル名で、XPSが作成出来ました。

ASP.NETでボタンから印刷

protected void btnPrint_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(this.GetType(), "PrintOperation", "print()", true);
}

2011年10月27日木曜日

LINQPad

LINQ to SQLで発行されているSQLを調べるのに使用

http://www.linqpad.net/

基本機能では、無料
自分は基本機能で十分だった。

VisualStudio ASP.NETでデバッグが出来ない

VisualStudio ASP.NETでデバッグが出来ない
PF5を押しても、単体テストが出来なくなった。

理由
SilverLightのプロジェクトを追加した時に
開始オプションが、SilverLightのテストページを指定するようになっている。

ASP.NETの単体ページをテストする場合は
プロパティページを表示(プロジェクトの右クリックで表示)
開始オプションで、現在のページを使用するを選択する。

2011年10月26日水曜日

MAGIC 項目先頭に項目変数を表記

dbMAGICはビュー項目をAを起点とする記号で表示します。
プログラムを作りこむ時、指定するのはビュー項目ではなく記号を指定します。
A,B,Cと順番に増加していくのですが、開発時に煮詰まってくるともう何がなんだか分からなくなってしまいます。

dbMAGICの設定を指定するmagic.iniの値を変えると
[dbMAGIC_ENV]の中のShowItemSymbolSelect = Yの「;」を取ります。
[dbMAGIC_ENV]は[WINDOWS_PRINTER]の上でmagic.iniの最後のほうです。
henkou.bmpになります。どこが変わったかって。ビュー項目の前にAやBと言う記号がついていますよね。
項目が100とか200になると大変重宝します。

元ネタ
http://magic4423.seesaa.net/article/213986022.html?reload=2011-10-26T21:56:48

Windows7 64bit版でodbc 32bitの設定を行う方法

■Windows7 64bit 版で odbc を使ってデータベースに接続するための注意点Add Star

Windows7 64bit 版の odbc には 32bit と 64bit 用の2種類の設定が別々に存在しているようです。

どちらを参照するかは実行するアプリケーションによって異なるようなので、場合によっては両方それぞれに設定することも必要なようです。

デフォルトの

コントロール パネル\すべてのコントロール パネル項目\管理ツール\データ ソース (ODBC) は 64bit 用の設定のようです。

32bit用の設定は以下からできます。

C:\Windows\SysWOW64\odbcad32.exe

2011年10月20日木曜日

IIS7 64bitで32bitを実行するおなじない

One of the performance benefits of the x64 platform is that it increases virtual address space, making more memory available. We recommend that you configure IIS to use a 32-bit worker processes on 64-bit Windows. Not only its compatibility better than the native 64-bit, performance and memory consumption are also better.

Set the Web server to enable this globally so that you do not need to set it for each application pool. Unlike previous versions of IIS, you can now configure specific worker processes to run in 32-bit or 64-bit mode independently of each other on the same server.

To configure 32-bit mode for the server

Open a command prompt and run the following:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

Note: This setting applies only to 64-bit servers.

2011年10月18日火曜日

MS-SQLでオラクルのExportとImportを実装する

BCPコマンドでテーブルエクスポート用バッチファイルを作成 [SQLServer]
先日、SQLServer2005にてBCPコマンドを使用した
テーブルの全レコードをエクスポートするバッチファイル(拡張子「bat」)を
作成しました。

BCPコマンドは使用したことがなかったのですが、
書籍やネットで調べながら、何とか作る事ができました。

やっぱりバッチファイル(スクリプト)はGUIでマウス操作するよりも楽でいいですね。

バッチファイルを一度作ってしまえば、
次からはバッチファイルをダブルクリックするだけで、
やりたいことは全てバッチファイルが実行してくれますので、
かなり時間短縮できて効率的ですね。

以下、仕事で作成したバッチファイルを修正して、サンプルを作ってみました。
自分にとっての備忘録としても活用します(笑)

================================================================================
テーブルのエクスポートサンプル(バッチファイル[.bat])
================================================================================

rem テーブルのエクスポート(タブ区切りファイルでエクスポートする)

rem 実行結果ログ出力ファイル名を含むフルパスを設定する
set logfile=d:\ExportTable.log

rem テーブルのエクスポートを行う
bcp "testdb.dbo.table1" out "d:\table1.txt" -S TESTPC -U testuser -P test -c -t"\t" > %logfile%
bcp "testdb.dbo.table2" out "d:\table2.txt" -S TESTPC -U testuser -P test -c -t"\t" >> %logfile%

echo. >> %logfile%
echo "テーブルのエクスポートが正常に終了しました。" >> %logfile%

pause "テーブルのエクスポートが正常に終了しました。詳細は「" %logfile% "」をテキストエディタで開いて確認してください。"



================================================================================
テーブルのインポートサンプル(バッチファイル[.bat])
================================================================================

rem テーブルのインポート(タブ区切りファイルからインポートする)

rem 実行結果ログ出力ファイル名を含むフルパスを設定する
set logfile=d:\Import_Table.log

rem テーブルのインポートを行う
bcp "testdb.dbo.table1" in "d:\table1.txt" -S TESTPC -U testuser -P test -c -t"\t" > %logfile%
bcp "testdb.dbo.table2" in "d:\table2.txt" -S TESTPC -U testuser -P test -c -t"\t" >> %logfile%

echo. >> %logfile%
echo "テーブルのインポートが正常に終了しました。" >> %logfile%

pause "テーブルのインポートが正常に終了しました。詳細は「" %logfile% "」をテキストエディタで開いて確認してください。"

2011年10月17日月曜日

Subversion 1.7.0

Subversion 1.7.0
tortoisesvnも1.7.0になったが、アクセス出来ない
http://tortoisesvn.net/

1.6から1.7にファイルフォーマットを変換しないといけない。

ASP.NET Ajax クライアント側フレームワークを読み込めませんでした

ASP.NET Ajax クライアント側フレームワークを読み込めませんでした。
dllに埋め込みされたjavaScriptがasp.net toolkitを使用している為
上記エラーメッセージが表示されると思われる。
(Telerikコンポーネントを使用していた場合、発生しました。)

解決方法
codeplexで公開されている、Ajax Control Toolkit をdownloadして
binフォルダに、dllをコピーする。

2011年10月14日金曜日

request format is unrecognized for URL eunexpectedly ending in

webサービスでエラー表示
request format is unrecognized for URL eunexpectedly ending in

解決方法
http://aspadvice.com/blogs/ssmith/archive/2007/09/04/FIX-Request-format-is-unrecognized-for-URL-unexpectedly-ending-in.aspx

web.confiに以下の文を追加
<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>

Open source ERP for C#

C#でオープンソースのERPがあった。

XERP.NET
http://xerpdotnet.codeplex.com/

SilverLightのモジュールも存在するらしい。

2011年10月12日水曜日

Microsoft Project Server

Microsoft Project Server 2010 のインストール
必須要件が、Share Point 2010と、MS-SQL 2005以上の64bit
社内に64bitOSが、無いので、VMPlayerで構築
Project Serverは、インストールするまで、ハードルが高い。

vmplayer nat 設定

vmplayer nat 設定
VMPlayerを使用する時のネットワーク設定がデフォルトではNATになっている。
通常はこれで良いけど、サーバなどのサービスが、社内ネットワークから
参照出来ない。
VMPlLayer設定のネットワークをブリッジにすると
社内ネットワークから参照できた。

2011年10月8日土曜日

LINQ To Entity

MSDNのサンプル
http://msdn.microsoft.com/ja-jp/library/bb399367.aspx

LINQ to Entity

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var onlineOrders =
from order in context.SalesOrderHeaders
where order.OnlineOrderFlag == true
select new
{
SalesOrderID = order.SalesOrderID,
OrderDate = order.OrderDate,
SalesOrderNumber = order.SalesOrderNumber
};

foreach (var onlineOrder in onlineOrders)
{
Console.WriteLine("Order ID: {0} Order date: {1:d} Order number: {2}",
onlineOrder.SalesOrderID,
onlineOrder.OrderDate,
onlineOrder.SalesOrderNumber);
}
}

2011年10月7日金曜日

VMware vSphere Hypervisor 無料のVMWare

VMware vSphere Hypervisor
VMPlayerが無料になっているのは、知っていましたが
サーバも無料版があるのは、知りませんでした。

2011年10月6日木曜日

Titanium Studio

Titanium Studio
iPhone(iOS)と、Androidの両方の開発が可能な、IDE
JavaScriptを使用して両方のプラットフォームをカバーしているらしい。
しかも、開発環境は無料なので、時間があったら使用してみたい。

http://developer.appcelerator.com/get_started

asp.net 4.0で、JavaScritからpostする方法

<script type="text/javascript">
function rowSelected(sender, args) {
var key = args.getDataKeyValue("ChildPN");
var theForm = document.forms['form1'];
theForm.method = "post";
theForm.action = "BOMSubmit.aspx?pt=" + key;
theForm.submit();
}
</script>

2011年10月5日水曜日

Windows 自動ログインの方法

セキュリティを無視して自動でログインしたい、パスワードの入力を省略したい、なんて無茶な要求が来ると思うので、何かの参考になれば。

やり方は、XPやVistaと同じで、

ファイル名を指定して実行 から control userpasswords2 を起動して設定するだけでOKでした。

2011年9月30日金曜日

MS-SQLで階層を表現する

LevelPath順に表示したい場合
ItemNo+LevelのItemNoを追加した
ただし、ItemNoが数字属性なので、すべてにおいてCASTしないと
下記のエラーが表示される
Types don't match between the anchor and the recursive part in column "ColumnName" of recursive
query "CTE_Name"


WITH BOM(Lv1, ItemNO, ChildPN, ChildPartName, Quantity,
ParentPN, LevelPath)
AS
(SELECT 1 AS Lv1, ItemNo, ChildPN, PartName, Quantity, ParentPN, CAST('/' + RIGHT('000' + CAST(ItemNo as varchar(256)),3) as varchar(256)) as LevelPath
FROM UP_BOM
INNER JOIN UP_Item I1 ON i1.PartNo = ChildPN
WHERE ParentPN = 'J073-185 '
UNION ALL
SELECT h.Lv1 + 1, d.ItemNo, d.ChildPN, i2.PartName, d.Quantity, d.ParentPN, CAST((RTRIM(h.LevelPath) + '/' + RIGHT('000' + CAST(d.ItemNo as varchar(256)),3)) as varchar(256)) as levelPath
FROM UP_BOM d
INNER JOIN BOM h ON h.ChildPN = d.ParentPN
INNER JOIN UP_Item I2 ON i2.PartNo = d.ChildPN)
SELECT Lv1, ItemNo, ChildPN, ChildPartName, Quantity, ParentPN, LevelPath
FROM BOM
ORDER By LevelPath

MS-SQLで階層を表現する

with c as (
select '/'+cast(billID as varchar(49)) as path,BillID
from dbo.bill b
where b.parentBillID is null
union all
select cast(c.path+'/'+CAST(b.billID as varchar(4)) as varchar(50)), b.billID
from dbo.bill b join c on b.parentBillID = c.billID)
select c.path+'/',b.descr
from c join dbo.bill b on c.billID = b.billID
order by 1;

MS-SQLの階層にRowNumみたいな順番が無いので、一番最初の項目にlevelを表現している。

2011年9月29日木曜日

asp.net MVCを使用する場合、ASPXエンジンは無効化しておこう

[参考]ASPXエンジンは無効化しておこう

 ASP.NET MVC 3はデフォルトで、WebFormViewEngine(ASPX)/RazorViewEngineエンジンを有効にしている。しかし、アプリケーションでRazorしか利用していないならば、ASPXエンジンは除去しておくのが望ましいだろう。

 これによって、ASPXテンプレート検索のオーバーヘッドがなくなるので、わずかながらパフォーマンスが改善する(この事情は、部分ビュー検索の場合だけでなく、通常のビュー、レイアウトでも同じだ)。

 ASPXエンジンを除去するには、Global.asaxのApplication_Startイベント・ハンドラーに以下のようなコードを記述すればよい。
protected void Application_Start() {
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
……中略……
}
Sub Application_Start()
ViewEngines.Engines.Clear()
ViewEngines.Engines.Add(New RazorViewEngine())
……中略……
End Sub

2011年9月28日水曜日

asp.netで、戻るボタンを無効にする

<body onload="history.forward();">

asp.netで、本番では、InProcでセッション管理をしない

ビューステート/セッション を使用する際に注意する点を改めてまとめておきます。

ビューステート
・ビューステート には他人に知られて困るデータ格納しない
・ビューステート のサイズに気をつける
・ビューステート の暗号化はしっかりとテストしてから使う

セッション
・InProc を使わない
・セッションがあることを前提に処理を行わない

InProcの場合、iis再起動でWebApplicationも再起動が必要なので
出来れば、本番環境では、InProcを使用しない。

セッションモードMSDNの資料
http://msdn.microsoft.com/ja-jp/library/ms178586%28VS.80%29.aspx

2011年9月27日火曜日

Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()

Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()

With the .NET 3.5 build of RadGrid for ASP.NET AJAX and LINQ filter expressions enabled (EnableLinqExpressions = true), the filter expressions set for the grid either internally by its filtering mechanism or manually in code should conform to the LINQ expression syntax instead of the old T-SQL syntax. Only thus they will be evaluated properly by the control.

EnableLinqExpressions = False is T-SQL

通常は、EnableLinqExpressions=trueだからLinq形式になっている。
T-SQL形式にする場合はm上記をfalseにする。

2011年9月22日木曜日

C# ASP.NET mappath

Pageが有る場合
Label1.Text = Server.MapPath("./");
// 出力例:C:\WebSites\WebSite1\

Pageが無い場合
HttpContext.Current.Server.MapPath("./");
// 出力例:C:\WebSites\WebSite1\

2011年9月17日土曜日

asp.netでenterkeyを無効にする方法

http://msdn.microsoft.com/ja-jp/library/cc766700.aspx

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

form1.Attributes("onkeydown") = "if(event.keyCode==13){
if(window.event.srcElement.type!='submit' &&
window.event.srcElement.type!='textarea'){
return false;
}
}"

End Sub

2011年9月14日水曜日

LINQ TO SQLのUpdateが失敗する

LINQ TO SQLのUpdateが失敗する。

テーブルにプライマリーキーが無いと更新してくれないらしい。
エラー表示もしないので、気が付かなかった。

2011年9月8日木曜日

Oracle11g ユーザー期限切れ

とりあえず、10gまで通り(パスワードは無期限有効)にする設定、ロックされたアカウントを復旧させる設定をメモっておく。
1. SQLPlusを起動:
   sqlplus /nolog
2. SYSDBAでログイン:
   conn /as sysdba
3. アカウントのプロファイルがデフォルトのままである場合は、デフォルトプロファイルの設定でパスワードを無期限有効に変更:
   alter profile default limit password_life_time unlimited;
4. ユーザのパスワードを再設定:
   alter user ユーザ名 identified by 新パスワード;
5. ロックされていたアカウントをロック解除
   alter user ユーザ名 account unlock;

2011年9月1日木曜日

Telerik RadGridのFilterで大文字小文字の区別をしない

Telerik RadGridのFilterで大文字小文字の区別をしない

たぶん
<groupingsettings CaseSensitive="false" />
コレを追加すると解消される

2011年8月31日水曜日

Telerik ReportのDrilldownを使用する方法

http://tv.telerik.com/watch/reporting/creating-drilldown-reports-with-telerik-reporting

項目にActionを追加
Toggle Visibilityを選択して、次のグループ名をEdit Toggle targetsで選択する

2011年8月25日木曜日

String or binary data would be truncated.

String or binary data would be truncated.

MS-SQLで桁数オーバーした場合、上記のエラーが表示される。

2011年8月12日金曜日

Telerik RadAsyncUploadで、uploadする時、dialogが表示される

Telerik RadAsyncUploadで、uploadする時、dialogが表示される。

http://www.telerik.com/community/forums/aspnet-ajax/upload/radasyncupload-control-asking-for-login-in-sharepoint.aspx

web.configに以下の設定を追加する。

<location path="Telerik.Web.UI.WebResource.axd">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>


追加場所は、
<connectionstrings>と <system.web>の間です。

2011年8月9日火曜日

2011年8月4日木曜日

Windows7のSendToフォルダ

windows7のsend toフォルダは

C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\SendTo

2011年8月3日水曜日

2011年7月28日木曜日

VisualStudioで使用できるSubverion Addin ankhsvn

http://ankhsvn.open.collab.net/

VisualStudioから操作出来るのが便利

SQLの1項目の文字列に改行を入れたい

MS-SQL
NCHAR(13) + NCHAR(10)

UPDATE hoge
SET notes = 'test strings' + NCHAR(13) + NCHAR(10)
+ ' second rows.'


Oracleなら
NCHAR(13) || NCHAR(10)

UPDATE hoge
SET notes = 'test strings' || CHR(13) || CHR(10)
|| ' second rows.'

2011年7月27日水曜日

小数点があるかの判定

// 小数を含むかどうかをチェックする
if (Validation.IsDecimal(12.001)) {
MessageBox.Show("小数を含みます");
}

public static bool IsDecimal(double dValue) {
if (dValue - System.Math.Floor(dValue) != 0) {
return true;
}

return false;
}

元ネタ http://jeanne.wankuma.com/tips/csharp/validation/isdecimal.html

2011年7月25日月曜日

int?をintに変換できない

ストアドプロシジャの受け渡しパラメータがint?になっている。

コール元のC#では、以下の定義を行う。
private Int32 getCardNumber(string iEntityCode)
{
System.Nullable<int> vCardNumber = 0;
using (var db = new ExpenseDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnStr"].ToString()))
{
var c1 = db.usp_getNewCardNumber(Session["EntityCode"].ToString(), ref vCardNumber);
return (int)vCardNumber;
}
}

2011年7月23日土曜日

Linqでstored procedureを実行 戻り値あり(一つ)

Linqでstored procedureを実行
Linqでstored procedureを実行 ※戻り値あり

using (var db1 = new aDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnStr"].ToString()))
{
var c1 = db1.usp_getNewClaimNumber(Session["Code"].ToString(), ref po_Number);
}

1.LINQ To SQLクラスにストアドプロシージャを含める。
2.LINQで、通常通りに、上記オブジェクトを指定する
3.これで、ストアドが実行される。
4.戻り値は、ストアドを記述する時、受け渡しパラメータで、outputを記述
5.C#(Linq)からは、refで受け取る。

LINQの良い所、受け渡しパラメータを自動生成してくれるから、パラメータの設定コードを
記述する必要が無い。

stored procedure
CREATE PROCEDURE usp_getNewClaimNumber
@pi_EntityCode [char](2),
@po_ClaimNumber NVARCHAR(9) OUTPUT

2011年7月21日木曜日

asp.netでJavascriptからpostする方法(.NET3.5)

<script type="text/javascript">
aspnetForm.method = "post";
aspnetForm.action = "DetailEditCard.aspx?q=" + Args;
aspnetForm.submit();
</script type="text/javascript">

RAMDISK

Windows7 64bitにも対応した、RAMDISK

http://memory.dataram.com/products-and-services/software/ramdisk#download-ramdisk

注意:VisualStudio2010をインストールする時、Tempフォルダが無いとインストール出来ない。
RAMDISKの初期フォルダをTEMPにしておく。

2011年7月20日水曜日

Telerik RadGrid上の項目上のヘッダ行を取得する方法

GridHeaderItem headerItem = GridHeaderItem)RadGrid1.MasterTableView.GetItems(GridItemType.Header)[0];

Boolean vfound = ((CheckBox)headerItem.FindControl("chkHeadConfirm")).Checked;

RadGridのヘッダ部分にcheckboxを追加、checkboxのon/offで明細を変更したい時に使用

2011年7月11日月曜日

Magic uniPaaSのウィンドウやパレットが見えなくなってしまった

Magic uniPaaSのウィンドウやパレットが見えなくなってしまった

Magic uniPaaSは、直前に表示していたウインドウ(例えば、式エディタ)やパレット(例えば、ナビゲータ)の位置情報を以下の場所に保存しています。

1. レジストリ

HKEY_CURRENT_USER\Software\MSJ\uniPaaS

たとえば、Magic uniPaaS Ver1.9のチェッカーのパレット位置は、以下で保存されています。

HKEY_CURRENT_USER\Software\MSJ\uniPaaS\1.9\Checker

フローモニターは以下に保存されています。

HKEY_CURRENT_USER\Software\MSJ\uniPaaS\1.9\FlowMonitor

2. 追加情報が保存されているXMLファイル

C:\Documents and Settings\user name\Application Data\MSJ\uniPaaS\FormsUserState_jpn.xml



これらのレジストリ情報やXMLファイルを削除すると、すべてのウインドウとパレットはデフォルトの位置にリセットされます。

Magic uniPaaSの終了後に(すべての値は、終了時に書き込まれます)ときに、情報を削除してください。Magic uniPaaSが再起動されると、デフォルトの位置にウインドウが表示されます。

2011年7月7日木曜日

Telerik ComboxBoxでAllを追加

Telerik ComboBoxを使用する時、データソースに無い情報をALLにして
すべて選択させたい場合がある。
AppendDataBoundItems=”true”にして
アイテムレコードを追加する。







選択するデータセットの条件式に
SelectCommand="if (@Type <> '0') begin
.... WHERE 条件式 = 上記ComboBoxの値 end else begin SELECT * FROM ... end

ComboBoxの値が0以外なら、条件式を適用、0ならSQLの条件WHERE句無しとする。
※MS-SQLなら記述出来るけど、OracleはNGかも

Telerikのコントロール値をJavaScriptで取得

var combo = $find("<%= cbxComboBox.ClientID %>");
var item = combo.get_value();

2011年7月4日月曜日

html(web)で絶対値で表示させたい

html(web)で、WinFormみたいに、絶対値表示させたい場合がある。

style="left: 700px;position: absolute;"

上記スタイルを使用して、絶対値表示を行った。
(あまりやりたくないけど)

IIS7.5 Windows認証 その2

IIS7.5 Windows認証をIIS側で設定終了後
端末のIEのセキュリティ設定が必要
接続するIISのアドレをイントラネットとして認識させる必要がある。

ADを使用しているなら、グループポリシーで設定するのが簡単
ただし、グループポリシーで設定する場合、個人で設定されていた
イントラネットの設定は無効になるので注意が必要です。
(ADの設定が上書きされます。)

2011年6月28日火曜日

Evalで、文字編集

通常は
<%# Eval("Price") %> で、項目名を設定すれば良いが
数字の場合、編集して表示させたい時がある。

<%# DataBinder.Eval(Container.DataItem, "Price", "{0:c}") %>

Excel Biff

Excel Biff形式で出力

http://www.codeproject.com/KB/office/biffcsharp.aspx

2011年6月23日木曜日

microsoft reportviewer

microsoft reportviewer
開発PCには、インストールされているが、実行サーバにはインストールされていなかった。

ココから、downkload出来る。
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6442

2011年6月22日水曜日

Linux Terminal Server

Linux Terminal Server
とういものがあるそうな、今度評価してみたい。

2011年6月16日木曜日

LINQでラムダ式でソートを行う方法

using (var db = new ExpenseDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnStr"].ToString()))
{
var t1 = db.TaxRate.OrderByDescending(x => x.StartDate).FirstOrDefault(a => a.EntityCode == iEntityCode && a.StartDate.Date <= iStartDate.Date);
if (t1 != null)
{
return t1.TaxRate1;
}
else
{
return 0;
}
}

この場合、1件だけを取得する、それとソート順はDESC
ソート順はASCにしたい場合は、OrderByを使用する。

LINQで日付比較

where rc.Status == "Py"
&& (rc.DatePayment.Value.Date >= RadDatePickerFrom.SelectedDate.Value.Date
&& rc.DatePayment.Value.Date <= RadDatePickerTo.SelectedDate.Value.Date

linqでデータを取得

using (var db = new ExpenseDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnStr"].ToString()))
{
var records =
from rc in db.ClaimHeader
where rc.UserName == Session["UserName"].ToString() && rc.Status != "De"
select rc;

//
foreach (var r in records)
{
Response.BinaryWrite("");
}
}

2011年6月14日火曜日

Asp.net C# DowpdownListの初期値設定

Asp.net C# DowpdownListの初期値設定

ddlSelectCategory.DataBind();

int index = 0;

//Loop items Dropdown
foreach (ListItem item in ddlSelectCategory.Items)
{//found
if (item.Value.Trim() == s1.CategoryId.ToString().Trim())
{ //select item
ddlSelectCategory.SelectedIndex = index;
break;
}
index++;
}

Linqでstored procedureを実行

Linqでstored procedureを実行 ※戻り値無し

using (var db1 = new aDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnStr"].ToString()))
{
var c1 = db1.usp_ClaimDetail_Del(Session["CLaimID"].ToString());
}

1.LINQ To SQLクラスにストアドプロシージャを含める。
2.LINQで、通常通りに、上記オブジェクトを指定する
3.これで、ストアドが実行される。

LINQの良い所、受け渡しパラメータを自動生成してくれるから、パラメータの設定コードを
記述する必要が無い。

2011年6月13日月曜日

LINQ の Insert

using (var db = new ExpenseDataClassesDataContext(ConfigurationManager.ConnectionStrings["ConnStr"].ToString()))
{
RecordHeader i1 = new RecordHeader();

//set columns
i1.Id = Session["ClaimID"].ToString();
i1.Type = Session["Type"].ToString();
i1.DataAdded = DateTime.Now;
i1.UserName = Session["UserName"].ToString();

// Add the new object to the Orders collection.
db.RecordHeader.InsertOnSubmit(i1);

// Submit the change to the database.
db.SubmitChanges();
}

2011年6月9日木曜日

LINQの全件件数を取得する

LINQの全件件数を取得する(Total Record count)

var mSite =
  from qc in db.指定テーブル
  orderby qc.Code
  where qc.Code == args[0]
  select qc;

//検索件数の取得
int rec = (mSite).Count(); //件数の取得

iis handlers error 500.19

iis handlers error 500.19

Windows2008英語版で開発する必要があったので、VMマシンとして標準でインストールして
もらいました。

その後、IIS管理からWebアプリを登録して、接続しようとすると
HTTP Error 500.19 - Internal Server Error

エラー詳細を見ると、web.configのhandlersの部分でエラー発生となっている。
自分のIISではOKなので、何で?って考えていると、もしかして
おまじないしていないから?

c:\windows\microsoft.net\framework\v2.0\aspnet_iisreg.exe /i

.NETをインストールしても、IISとの、ひもづけしていないからダメよ~

あと、.NET2.0から.NET3.5までは、2.0ベースだから、v2のaspnet_iisregを実行
.NET v4の場合、v4のaspnet_iisregを実行する必要がある

2011年6月7日火曜日

LINQ to SQLで1件だけを抽出する方法

LINQ to SQLで1件だけを抽出する方法
LINQ to SQLで1件だけ抽出するにはFirst拡張メソッドを使えばよいのだが、ラムダ式を使ってサクッと作れる。

var o1 = db1.参照テーブル.First(a=>a.Title=="ほげほげ");

但し、この欠点は抽出結果が0件だとエラーになる。
そこで0件でもエラーとならないFirstOrDefault拡張メソッドを使用する。

Var o1 = db1.参照テーブル.FirstOrDefault(a=>a.Title=="ほげほげ");
if (o1 != null){o1.name = "ふむふむ" ;}

抽出結果が0件の場合、結果はNULLとなるのでNULLでなければオブジェクトにアクセスするようにすれば良い。


元ネタ
http://blog.motdotnet.com/?eid=381

LINQでUPDATE

LINQでUPDATEを行う

string vId = "12345";
using (var db = new ExpenseDataClassesDataContext(ConfigurationManager.ConnectionStrings["ExpenseConnectionString"].ToString()))
{
ClaimHeader ch = db.ClaimHeader.Single(s => s.Id == vId);
ch.Status = "De";

db.SubmitChanges();
}

2011年6月6日月曜日

IIS7.5 Windows認証

IIS7.5 Windows認証は、標準では設定されないので、注意が必要。
IIS6までは、認証の部分に、Windows認証があったが
IIS7.5は、インストール時に設定しないといけなくなった。

2011年6月2日木曜日

SQL Audit

MS-SQLで監査用の履歴を作成する

http://sourceforge.net/projects/sqlaudit/

MS-SQL 接続ユーザーの取得

MS-SQLで接続ユーザーの取得する場合

SELECT SYSTEM_USER

確認Ver SQL2005

パケットモニター

LANケーブルをループ状にした為、ネットワークがダウンしました。

その時、パケットを見る為のモニターが、MicroSoftから無償で提供されています。

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en

説明は、こちら
http://www.microsoft.com/japan/powerpro/TF/column/am_01_3.mspx

2011年6月1日水曜日

MS-SQLで、メタ情報からCREATE TABLEを作成

MS-SQL2005以上で使用出来る

DECLARE @Table_Definition VARCHAR(MAX),
@TableName VARCHAR(25)

SET @TableName = 'Attachments'

SET @Table_Definition = 'IF NOT EXISTS(SELECT 1 FROM sys.tables WHERE name = ' +
QUOTENAME(@TableName,'''') + ')' + CHAR(13) + 'BEGIN'

SET @Table_Definition = COALESCE(@Table_Definition + CHAR(13),'') + 'CREATE TABLE ('

SELECT @Table_Definition = COALESCE(@Table_Definition,'') +
CHAR(13) + '[' + COLUMN_NAME + ']' + SPACE(1) + '[' + DATA_TYPE + ']' +
CASE
WHEN UPPER(DATA_TYPE) IN ('REAL','MONEY','DECIMAL','NUMERIC') THEN
'(' + CONVERT(VARCHAR(3),COALESCE(numeric_precision,'')) + ','+
CONVERT(VARCHAR(3),COALESCE(Numeric_Scale,'')) + ')'
WHEN UPPER(DATA_TYPE) IN ('CHAR','NVARCHAR','VARCHAR','NCHAR') THEN
'(' + CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 THEN 'max' ELSE CAST(isnull(CHARACTER_MAXIMUM_LENGTH,'') AS VARCHAR) END + ')'
ELSE '' END +
CASE WHEN IS_NULLABLE = 'NO' THEN ' not null' ELSE ' null' END +
CASE WHEN COLUMN_DEFAULT IS NULL THEN ',' ELSE 'default ' + COLUMN_DEFAULT + ',' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName

SET @Table_Definition = STUFF(@Table_Definition,LEN(@Table_Definition),1,CHAR(13) + ')' + CHAR(13) + 'END')

PRINT @Table_Definition

--EXEC (@Table_Definition)

MS-SQL でOracleのUser_tab_columnsみたいなメタ情報を参照するには?

MS-SQL でOracleのUser_tab_columnsみたいなメタ情報を参照するには?
MS-SQL 2005以降だけど、INFORMATION_SCHEMA.COLUMNS で参照出来ます。

http://msdn.microsoft.com/ja-jp/library/ms188348.aspx

select * from INFORMATION_SCHEMA.COLUMNS

2011年5月30日月曜日

RedmineClient

Redmine用クライアントモジュール
C#で作成されていました。

http://sourceforge.net/projects/redmineclient/
License:BSD

2011年5月26日木曜日

2011年5月19日木曜日

SilverLight5 BetaのTrick Play

SilverLight5 BetaのTrick Play評価をする必要があったので、3時間だけど評価しました。
1.起動がSilverLight4に比べると、良くなっている。
2.Trick Playですが、Mediaタグだけを追加するだけで、簡易playerになっている。

実際は、playボタンなどもついてくるだろうと思い、正式版が早く出ることを願います。

元ネタ
Silverlight 5 Beta Rough Notes–Trick Play Video
http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2011/05/03/silverlight-5-beta-rough-notes-trick-play-video.aspx

2011年5月17日火曜日

Delphiの逆アセンブル

Dede
http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/DeDe.shtml

log4delphi

log4net log4jと同じく
Deplhiにも log4delphiがありました。
http://log4delphi.sourceforge.net/

区切りのある文字列からの抜き取り:StrToken

文字列のトークン
区切り文字で区切られている文字列のトークンが返ります。

構文: StrToken(ソース文字列,トークンインデックス,区切文字列)

パラメータ: ソース文字列 …… 複数の文字列で構成される文字列。区切文字で区切られ、トークンが置かれています。
トークンインデックス …… 取り出したいトークンで、その位置をインデックス(順番を示す番号)で指定します。
区切文字列 …… 区切文字の文字列。1文字以上の文字列を指定できます。
戻り値: 文字列(トークン) …… トークンが見つからなかった場合は、空白が返ります。

例: StrToken(A,2,',')

Aが'abcd,cdef,ghik,lmnp'の時、'cdef'が返ります。

.NET用デコンパイラ

.NET用デコンパイラ
今までは、.NET Reflectorを使用していましたが、2011年5月31日以降、有償になります。

Tererikから、無償のデコンパイラが配布されました。

JustDecompile
http://www.telerik.com/account/your-products/product-versions/single-download.aspx?pmvid=2438&pid=845

EPPlus シート名一覧表示

foreach (ExcelWorksheet sh in xlPackage.Workbook.Worksheets)
{
Console.WriteLine(sh.Name.ToString());
}

これで、シート名の一覧を取得出来る

2011年5月11日水曜日

Sedna Native XML Databas

Sedna Native XML Databas

XMLDBを調べていたら、評価してみたいプロジェクトがあった。

License
Apache License V2.0

http://sourceforge.net/projects/sedna/

C# OleDBでストアドプロシージャを起動 戻り値あり

private OleDbConnection connection;

//商品CDより画像情報を取得する。
connection = new OleDbConnection(ConfigurationManager.ConnectionStrings["SD"].ToString());

OleDbCommand cmd = new OleDbCommand("prc_GetProductPhoto", connection);
cmd.CommandType = CommandType.StoredProcedure;

//ストアドプロシージャの引数に渡す値の設定
cmd.Parameters.Add("pi_商品cd", OleDbType.VarChar).Value = GridView1.SelectedRow.Cells[1].Text;

//ストアドプロシージャのout用パラメータ作成
OleDbParameter pPhoto = new OleDbParameter("po_Photo", OleDbType.VarChar);
pPhoto.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pPhoto);

//ストアドプロシージャの実行
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();

2011年5月6日金曜日

過去 1 時間以内に実行された経過時間(elapsed_time)の長い Top 5 SQL を表示する場合。

alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
col "CPU_TIME(s)" for 9,990.00
col "ELAPSED_TIME(s)" for 9,990.00
set lines 100 pages 100

select * from
(
select
sql_text,
sql_id,
plan_hash_value,
executions,
last_active_time,
cpu_time/1000000 "CPU_TIME(s)",
elapsed_time/1000000 "ELAPSED_TIME(s)"
from
v$sqlstats
where
last_active_time > sysdate - 1/24
order by
elapsed_time desc
)
where rownum <= 5;



元ネタ、http://www.insight-tec.com/technical-information/2804.html

2011年4月25日月曜日

バッチで日付+時刻の入ったファイルを作成する(ログファイルで使用)

datetime.bat

このバッチを実行すると環境変数に日付・時刻が保存されます。

%yyyy% 年4桁

%yy% 年2桁

%mm% 月

%dd% 日

%hh% 時

%mi% 分

%ss% 秒

%sss% ミリ秒2桁

%datetime% 年4桁~ミリ秒2桁

@echo off
set date_tmp=%date:/=%
set time_tmp=%time: =0%
set yyyy=%date_tmp:~0,4%
set yy=%date_tmp:~2,2%
set mm=%date_tmp:~4,2%
set dd=%date_tmp:~6,2%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set ss=%time_tmp:~6,2%
set sss=%time_tmp:~9,2%
set datetime=%yyyy%%mm%%dd%%hh%%mi%%ss%%sss%
set time_tmp=
set date_tmp=

test.bat

datetime.bat の実行用サンプルです。

@echo off

setlocal

call datetime.bat

echo %datetime%
echo %yyyy%-%mm%-%dd% %hh%:%mi%:%ss%.%sss%
echo %date% %time%

endlocal

実行してみる。

>test.bat
2007112302443090
2007-11-23 02:44:30.90
2007/11/23 2:44:30.92

2011年4月20日水曜日

CommonLibrary.NET

CommonLibrary.NET
C#共通のライブラリー
元はJavaから派生している

http://commonlibrarynet.codeplex.com/

Windows7で3Gスイッチの方法

管理者権限でコマンドプロントから次のコマンドで設定

3Gの場合は
BCDEDIT /Set Increaseuserva 3072

解除は
BCDEDIT /deletevalue increaseuserva

2011年4月14日木曜日

SQL CASE文の書き方

WHENの後に評価させる式を書く

SELECT (CASE
WHEN expression1 = '0' OR expression2 = '0' THEN 'hoge'
WHEN expression1 = '1' OR expression2 = '1' THEN 'fuga'
ELSE 'piyo' END) AS fieldname
FROM tablename

C#のforeach文で、自分が何回目の繰り返しか知る方法

using System;
using System.Linq;

namespace CountForeach
{
class Program
{
static void Main(string[] args)
{
// テスト用配列
var array = new[] { "aaa", "bbb", "ccc" };

// Selectメソッドで値をインデックスのペアを作ってそれをforeachでまわす
foreach (var item in array.Select((v, i) => new { v, i }))
{
// 匿名型から値とインデックスを取り出して使える
Console.WriteLine("value = {0}, index = {1}", item.v, item.i);
}
}
}
}

LINQ to SQLのorderby

LINQでのorderbyの書き方

OrderedQueryable hireQuery =
from emp in db.Employees
orderby emp.HireDate
select emp;

EPPlus

ExcelPackageから派生したプロジェクト
http://epplus.codeplex.com/
こっちの方が開発は活発

ExcelPackage

今までExcel2007を扱う場合、CodeplexのexcelPackageを使用していました。
http://excelpackage.codeplex.com/

でも、複数シートのテンプレートを扱うと、saveメソットでエラー発生
解決方法は
http://excelpackage.codeplex.com/discussions/7005?ProjectName=excelpackage
562 of ExcelWorksheet.cs from:
XmlNode pageSetup = _worksheetXml.SelectSingleNode("//d:pageSetup", NameSpaceManager);

to:
XmlNode pageSetup = WorksheetXml.SelectSingleNode("//d:pageSetup", NameSpaceManager);

だそうで、ソースを修正する必要がある
修正したら、最新版をUPして欲しい

ExcelPackageから派生したプロジェクト
http://epplus.codeplex.com/
こっちの方が開発は活発

2011年4月12日火曜日

MS-SQL2005 DTS 単体実行はOKだが、SQL Agentにするとエラーになる

MS-SQL2005のDTSを単体テストでは、OK。
これをファイルベースで、MS-SQL2005のエージェント(Agent)で実行すると
パスワードの暗号化が解除出来ない為、エラーになる。

解決方法
http://support.microsoft.com/kb/918760/ja
1.パスワードを使用して暗号化するパッケージを変更します。
2.EncryptSensitiveWithUserKey に ProtectionLevel プロパティを変更するのに
オペレーティング システム (cmd Exec) SQL Server エージェント ジョブのステップで
Dtutil.exe ユーティリティを使用します。
 このプロセスは、パスワードを使用して、パッケージを re-encrypting し、
 パッケージを暗号化解除では。
パッケージの暗号化に使用されるユーザー キーは、SQL Server エージェント ジョブの
 ステップを 別のユーザーとして実行 ] 一覧で設定です。

Dtutil.exeを実行して暗号化を解除するそうです。

2011年4月6日水曜日

Delphi Fix

VCLのFixなど公開しているblog

http://andy.jgknet.de/blog/

MAGIC 論理値を数値にした時

MAGICで論理値をDBに格納する時は、数値型になる。
false:0
true:1

確認ver:UniPaas1.8
DB:MS-SQL2008R2

2011年3月30日水曜日

MAGICの漢字入力制御

MAGICの漢字入力制御

値 入力モード サイズ 入力方法 入力例
0 OFF - - -
1 全Rかな 全角 ローマ字 かな
2 全かな 全角 直接 のちみち(KANA )
3 全Rカナ 全角 ローマ字 カナ
4 全カナ 全角 直接 ノチミチ(KANA )
5 半Rカナ 半角 ローマ字 カナ
6 半カナ 半角 直接 ノチミチ(KANA )
7 全英数 全角 直接 kana
8 半英数 半角 直接 kana

UniPass OSコマンドの上限

UniPaasのOSコマンドの文字列上限が、たぶん4000文字
OSが、Windows98,2000までは、コマンドパラメータが4000までだった。
XPから8000まで拡張されていたが、UniPaasは対応していないようだ。

確認Ver. UniPaas 1.5
OS:Windows7 SP1

2011年3月28日月曜日

MemoryテーブルのDBDELは失敗する

親タスクでトランザクションはNoにしている。
サブフォームでメモリーテーブルをオープンしている。
親タスクの検索ボタンでメモリーテーブルを作成後
サブフォームを再表示して、親タスクでDBDELを発行しているが、うまく動作しない。

どうも、サブフォームで使用しているから、DBDEL自体がテーブルDROP出来ないと思われる。
DBDELでは無く、レコードを削除するタスクで対応するようにする。

UniPaas DB SQLの文字列

UniPaas DB SQLの文字列で、Where句でそのまま文字列を渡したい場合は
:変数の前に@をおく

2011年3月24日木曜日

MS-SQL 一時テーブルの作成方法

if OBJECT_ID('tempdb..#temp_table1') is not null
drop table #temp_table1

create table #temp_table1 (
ID int,
NAME varchar(50),
VALUE varchar(255)
)

2011年3月23日水曜日

PDFから画像ファイルを作成(GhostScriptLiteを使用)

PDFから画像ファイルを作成(GhostScriptLiteを使用)
複数ページ対応する為に、tiff形式にしました。

pdfを一旦、画像ファイル(tiff)に変換後
画像下部を白抜き編集した後に、再度pdfを作成しました。

pdfから画像を作成するのは、GhostScriptLiteを使用 Ver9.0
画像の編集は、PdfSharpを使用しました。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using PdfSharp;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System.Drawing;
using System.Drawing.Imaging;

namespace PDF得意先発注Clear
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("コマンドライン引数はありません。");
return;
}

String vTempFile = args[0] + "_.bmp";

// ファイルを削除する
if (System.IO.File.Exists(vTempFile))
{
try { File.Delete(vTempFile); }
catch { };
}

if (System.IO.File.Exists(vTempFile))
{
try { File.Delete(vTempFile); }
catch { };
}

//PDFを画像に変換 PDFConvertはPDFtoImage.csにある
PDFConvert converter = new PDFConvert();
bool Converted = false;

//Setup the converter
converter.RenderingThreads = -1;

converter.TextAlphaBit = -1;

converter.OutputToMultipleFile = false;
converter.FirstPageToConvert = -1;
converter.LastPageToConvert = -1;
converter.FitPage = false;
converter.JPEGQuality = 100; //100は圧縮しない
//converter.OutputFormat = "jpeg";
converter.OutputFormat = "tifflzw";

Converted = converter.Convert(args[0].ToString(), vTempFile);

// Open the output document
PdfDocument outputDocument = new PdfDocument();

//複数ページに対応 2011/03/23
//画像の読み取り
var ReadImage = Image.FromFile(vTempFile);

//ディメンジョンリストを作成する
Guid[] DimensionList = ReadImage.FrameDimensionsList;

//ディメンジョンが続く限りループ
foreach(Guid dimens in DimensionList )
{
//フレームディメンジョンを作成し
var fd = new FrameDimension(dimens);

//ページ数を取得する
int Pages = ReadImage.GetFrameCount(fd);

//全頁処理対象
for (int frameIndex = 0; frameIndex < Pages; frameIndex++)
{
//アクティブフレームを切り替える
ReadImage.SelectActiveFrame(fd, frameIndex);

//新しいビットマップにコピーする
var img = new Bitmap(ReadImage);
img.SetResolution(ReadImage.HorizontalResolution, ReadImage.VerticalResolution);

//ページ追加
PdfPage page = outputDocument.AddPage();

using (XImage image = XImage.FromGdiPlusImage(img))
{
page.Width = image.PointWidth;
page.Height = image.PointHeight;

using (XGraphics gfx = XGraphics.FromPdfPage(page))
{

gfx.DrawImage(image, 0, 0);
var options = new XPdfFontOptions(PdfFontEmbedding.Always);

XPen pen = new XPen(XColors.White, Math.PI);

gfx.DrawRectangle(pen, XBrushes.White, 360, 640, 600, 870);
gfx.DrawRectangle(pen, XBrushes.White, 0, 720, 600, 870);
}
}
}
}
outputDocument.Save(args[0]);

ReadImage.Dispose();

//元ファイルを削除
File.Delete(vTempFile);
}
}
}

Windows CommandLineの文字列制限

 Microsoft Windows XP 以降を実行しているコンピュータでは、コマンド プロンプトで使用できる文字列の最大長は 8191 文字です。

 Microsoft Windows 2000 または Windows NT 4.0 を実行しているコンピュータでは、コマンド プロンプトで使用できる文字列の最大長は 2047 文字です。

 この制限は、コマンド ライン、他のプロセスによって受け継がれる個別の環境変数 (PATH 変数など)、およびすべての環境変数の展開結果に適用されます。[コマンド プロンプト] を使用してバッチ ファイルを実行する場合は、この制限がバッチ ファイルの処理にも適用されます。

 長いコマンド ラインを必要とするプログラムは、パラメータ情報を格納したファイルを使用するように変更し、そのファイル名をコマンド ラインに含めます。

 使用する環境変数が長いプログラムは、環境変数に格納される値が (使用するオペレーティング システムに応じて) 2047 文字または 8191 文字を超えないように変更します

2011年3月16日水曜日

MS-SQL で OracleのTO_DATEを

MS-SQLでOracleのTO_DATE関数を実装

CREATE FUNCTION [dbo].[TO_DATE]
(
-- Add the parameters for the function here
@piStrDate varchar(512),
@piFORMAT varchar(512)
)
-- =============================================
-- Author:アスカクリエイト
-- Create date: 2011/03/16
-- Description: 文字列をFORMAT文字列で日付型を返す
-- =============================================
RETURNS DateTime
AS
BEGIN
-- Declare the return variable here
DECLARE @vDate AS DateTime

-- 文字8
IF (@piFORMAT IS NULL) OR (UPPER(@piFORMAT) = 'YYYYMMDD')
BEGIN

SET @vDate = CONVERT(datetime, @piStrDate, 112)
END
ELSE
BEGIN
SET @vDate = CONVERT(datetime, @piStrDate, 112)
END

-- Return the result of the function
RETURN @vDate

END

MS-SQL で OracleのTO_CHARを

MS-SQL で OracleのTO_CHARを使用したい

CRAETE FUNCTION [dbo].[TO_CHAR]
(
-- Add the parameters for the function here
@piDateTime DateTime,
@piFORMAT varchar(512)
)
-- =============================================
-- Author:アスカクリエイト
-- Create date: 2011/03/16
-- Description: 日付を FORMATの文字列で返す
-- =============================================
RETURNS VARCHAR(2000)
AS
BEGIN
-- Declare the return variable here
DECLARE @vStrDate AS VARCHAR(2000)

-- 文字8
IF (@piFORMAT IS NULL) OR (UPPER(@piFORMAT) = 'YYYYMMDD')
BEGIN

SET @vStrDate = CONVERT(char(8), @piDateTime, 112)
END
ELSE
BEGIN
SET @vStrDate = CONVERT(char(8), @piDateTime, 112)
END

-- Return the result of the function
RETURN @vStrDate

END

2011年3月14日月曜日

支援

かみさんの実家が、福島県福島市ですが
土曜日からメールで安否は確認したのですが
ライフライン(電気、ガス、水道)が、止まっているらしく
電話が不通なのです。

早く復旧するように、お祈りします。

Yahooの支援に支援しました。
http://volunteer.yahoo.co.jp/

2011年3月10日木曜日

JPEG画像の「品質」

JPEG画像の「品質」

JPEG Quality は0から100まで
これは、圧縮率なので、100は圧縮しない

PDFSharpを使って、画像からPDFを作成

PDFSharpを使って画像からPDFを作成

画像をPDFにまとめる
以下のコードで画像をPDFにまとめることができる。

string SavePath = "ImageTest.pdf";
string[] ImagePaths = { "無題.bmp" };

using (PdfDocument Document = new PdfDocument())
{
foreach (string ImagePath in ImagePaths)
{
PdfPage page = Document.AddPage();
using (XImage image = XImage.FromFile(ImagePath))
{
page.Width = image.PointWidth;
page.Height = image.PointHeight;
using (XGraphics gfx = XGraphics.FromPdfPage(page))
{
gfx.DrawImage(image, 0, 0);
}
}
}
Document.Save(SavePath);
}
Process.Start(SavePath);

元ネタ
http://d.hatena.ne.jp/aont/20090823/1251021218

2011年3月9日水曜日

Command-LineでPDF印刷

フォルダにあるPDFを一括で印刷する必要があった。

PDF X-Change Viewerで以下のバッチを作成

"C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" /print ファイル名.pdf

出力先は、デフォルトプリンタ

wdCalendar for ASP.NET , OSS

wdCalendar for ASP.NET

http://wdcalendar.blogspot.com/

2011年3月8日火曜日

ファイルをリードオンリーにする

ファイルをリードオンリーにする方法

OS コマンドのattribを使用する

最近、DOSのコマンドを使っていないから忘れていた。

Coderun WebベースのIDE

http://www.coderun.com/

ブラウザでココまで出来るとは、感動ものです。

Google Calendar like asp.net

Google Calendarに似た予定表

2011年3月8日時点

wdCalendar
http://plugins.jquery.com/project/wdCalendar
License:LGPL

日本語化
http://www.okushin.co.jp/kodanuki_note/2011/02/googlejquerywdcalendar.html
月表示と週表示がある。


DayPlot
www.daypilot.org/
License:Apache 2.0
OutLookに似ているインターフェース
c#で作成されているので、asp.netで作りやすい


JQuery Week Calendar
http://jsajax.com/Articles/jqueryweekcalendar/1439
License:MIT or LGPL
週表示のみ


JQuery-frontier-calendar
http://code.google.com/p/jquery-frontier-calendar/
License:MIT
月表示のみ

2011年3月7日月曜日

Delphi O/Rマッパー

Delphi Open SourceのO/Rマッパー
DelphiXEで使用できる。

InstantObjectもあるけど、こちらは開発が停滞しています。

http://sourceforge.net/projects/tiopf/
License:LGPL or MPL

O/Rマッパーとかでコーディングを少しでも楽にしたい。

iTextSharpで線を書く

iTextSharpで線を書く
iTextSharpでLineを書く

参考url
http://www.mikesdotnetting.com/Article/88/iTextSharp-Drawing-shapes-and-Graphics

確認Ver:5.0.5.0

Sample 今回は四角の枠

string pdfpath = Server.MapPath("PDFs");
Document doc = new Document();
try
{
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(pdfpath + "/Graphics.pdf", FileMode.Create));
doc.Open();
PdfContentByte cb = writer.DirectContent;
...
cb.SetColorStroke(new CMYKColor(255, 255, 255, 255));
cb.SetColorFill(new CMYKColor(255, 255, 255, 255));
cb.MoveTo(0, 850);
cb.LineTo(0, 810);
cb.LineTo(590, 810);
cb.LineTo(590, 850);

//cb.Fill(); //塗りつぶすならFillを使用
cb.ClosePathStroke(); //線を描くだけならClosePathStrokeを使用する

2011年3月2日水曜日

Excel2007 FileFomat

Excel2007 FileFormat
 定数:xlExcel8 56
 定数:xlExcel9795 43

2011年2月28日月曜日

MS SQL Server テーブル一覧の取得

select name
from sysobjects
where xtype = 'U'
order by name

Delphi ADOのConnect接続文字列のウィザード

procedure TADODBTest.EditConnStrClick(Sender: TObject);
begin
Connection.Close;
Connection.ConnectionString := ConnectionString.Text;
if EditConnectionString(Connection) then
begin
ConnectionString.Text := Connection.ConnectionString;
ConnectionStringClick(Sender);
end;
end;

上記で接続文字列のウィザードが表示される

2011年2月24日木曜日

FileListGet

FileListGet関数
指定したフォルダ内のファイル名を取得する場合に使用する。

1.一次元ベクトル変数を作成します。
2.FileListGetで1番に作成したベクトルに代入
項目更新 1番の変数 FileListGet(フォルダ名, 抽出拡張子※1, サブフォルダ対象判定※2)

3.VecSizeでベクトルレコード分、処理を行う
BlockのWhileを使用しても良いが、タスクにした方が後でメンテしやすい。
終了条件:VecSize(BB)
4.VecGetで取り出し
レコード後処理で、VecGet(1番の変数,Counter(0)) で取り出し出来る。

確認Ver:MAGICv9

2011年2月22日火曜日

UniPaas 実行時のPFキーの動作がおかしい

UniPaas 実行時のPFキーの動作がおかしい時がある。

サブフォームのシステムメニューはNoにしていたが
メインフォームのシステムメニューがYesになっていた。
上記により、メインフォームのWindowsシステムメニューにカーソルが
パーキングしているから、キーが無効になっていた。

対応:メインフォームもシステムメニューをNoにすること

IIS7 Express

以下のリンクが詳しい
http://blogs.msdn.com/b/osamum/archive/2011/01/19/iis-7-5-express.aspx

WindowsXPでも、IIS7相当の機能

2011年2月21日月曜日

MAGIC LIKE関数

文字列の比較(パターンマッチング)

文字列が指定したパターンに一致するかどうかを判断し、論理値を返します。

パターンには、通常の文字とワイルドカード文字を含めることができます。次の文字がワイルドカードに使用されます。

* … 0個以上の文字列
? … 1個の文字

SQLのWHERE句にLIKE文を記述出来る。

確認Ver:MAGICv9.4Plus

2011年2月17日木曜日

Delphi Open Source Projects synapse

ネットワークアクセスコンポーネント

ライセンス:修正BSD
http://ararat.cz/synapse/doku.php/start

Delphi TEditのPasswordCharに「*(アスタリスク)」を指定すると「●(黒丸)」で表示されてしまう

TEditのPasswordCharに「*(アスタリスク)」を指定すると「●(黒丸)」で表示されてしまう
MSDNによるとCommon Controlのバージョン6以降のEditコントロールの
パスワード文字のデフォルト値が●に変更になってて
Delphiの方でもテーマが有効でPasswordCharが*の時は
コントロールのデフォルトに合わせる様になってるのが問題みたいですね。

Formの宣言の上に下記を追加したら良いかと

TEdit = class(StdCtrls.TEdit)
procedure CreateWnd; override;
end;

procedure TEdit.CreateWnd;
begin
inherited;
if PasswordChar <> #0 then
SendMessage(Handle, EM_SETPASSWORDCHAR, Ord(PasswordChar), 0);
end;


ソース:Delphi Q&A
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201102/11020018.txt

2011年2月16日水曜日

MAGICのDB2サポート状況

MAGICのDB2サポート状況、2010/01/28時点

MAGIC v10までは、UDBをサポート
UniPaasからは、AS400用のDB2をサポート、UDBはサポート対象外となった。

2011年2月15日火曜日

ExpCalc

MAGIC(UniPaas)で使用出来る関数

一歩間違うと、訳分からない状態の式が出来る

式の実行
指定された式番号の定義式を実行します。

構文: ExpCalc (式番号)

確認Ver:MAGICv8とUniPaas1.5

iTextSharpでBarcodeのサイズを変更

iTextSharpでBarcodeのサイズを変更する

スケーリング(拡大・縮小)
イメージの大きさを指定してスケーリングをするときには
scaleAbsolute[Width|Height] メソッドを使います。
ある割合 (パーセント) でスケーリングするときは、scalePercent メソッドを使います。
既定では、スケーリングされていないイメージは、解像度が 72dpi と扱われることに注意。
50% でスケーリングされたイメージでは、144 になります。
小さくスケーリングされたイメージは、ピクセルの大きさが小さくなるので解像度は大きくなります。
300dpi で出力したいときには、72/300=24% のスケーリングを使います。
例えば、24% (72/300 = 0.24) のスケーリングで
1500X1500 ピクセル (5X300 = 1500) のイメージを PDF へ配置すると
PDF 中では、1500X1500 ピクセル が 5X5 inch となり
解像度が 300dpi のイメージとなります。
サイズがどうあろうとも、そのイメージはいつでも 1500X1500 ピクセルです。

Barcode39 code39 = new Barcode39();
code39.Code = iBarCode; //出力するバーコードの文字
code39.StartStopText = true; //スタートストップテキスト
code39.BarHeight = 20; //バーコ-ドの高さ
code39.GenerateChecksum = false;

Image image39 = code39.CreateImageWithBarcode(pcb, null, BaseColor.WHITE);
image39.SetAbsolutePosition(20, 550);
image39.RotationDegrees = 90; //回転90度
image39.ScaleAbsolute(250,20);

pcb.AddImage(image39);

2011年2月14日月曜日

入出力デバイスのオープンタイミング

入出力デバイスのオープンタイミング (デフォルト:I=即時)

MAGIC.INIおよびコマンドライン名: IOTiming

対応Ver:MAGICv9

Quick PDF Library Lite

Quick PDF Library Lite

Quick PDF Libraryは有料だけどLiteは無料みたい。
でも使用したい機能は、DrawTextだから、Liteで十分と思われる。

http://www.quickpdflibrary.com/free/lite.php

DelphianWorldのアーカイブ

DelphianWorldをアーカイブしているページ
http://web.archive.org/web/20070517141149/norg1964.hp.infoseek.co.jp/delphianworld/

Delphiの資料および情報が無くなりつつありますが
保存してくれているとうれしい限りです。

情報元は、Mr.XRayさんの掲示板
http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi

2011年2月10日木曜日

Delphi Open Source Projects PasDoc

原文
Pasdoc generates documentation for Pascal units. It takes descriptions from comments within the source code. Documentation output formats include HTML and LaTeX. Object Pascal, FreePascal and Delphi specific features are supported.

翻訳
Pasdocは、Pascalユニットのためにドキュメンテーションを引き起こします。
それは、ソースコードの範囲内でコメントから説明をとります。
ドキュメンテーション出力フォーマットは、HTMLとLaTeXを含みます。
オブジェクトPascal、FreePascalとデルファイに特有の特徴は、サポートされます。

http://sourceforge.net/projects/pasdoc/
http://pasdoc.sipsolutions.net/

ライセンス:GPL

2011年2月9日水曜日

C++ コマンドパラメータ

C++のコマンドパラメータ
VisualStudio2008のデフォルト文字がUniCodeだったので
正しく入力パラメータを認識しなかった。

対応
コンパイルオプションのUnicodeを無効にする。
構成:全般:文字セット

Delphi Open Source Projects SKRegexp

Delphi OpenSource

Delphi用正規表現ユニット
ライセンス:MPL1.1
開発者:日本人
http://komish.com/softlib/skregexp.htm

すべてDelphiで書かれている。

Open Source Haru Free PDF Library

Open Source Haru Free PDF Library
作成元は、日本人
ソースはC言語
ライセンスはZLib
現在は外人さんがメンテを行っている。

昔は、http://sourceforge.net/projects/libharu/ 2.0.8
現在は、http://libharu.org/ 2011/02/09時点で、2.2.1

インターフェースがそろっているので、.Net(C#),Delphi,Ruby,Pythonなどからも
コール出来る。

日本語解説
http://terusan.kage-tora.com/harupdf.html 確認日 2011/02/09

2011年2月8日火曜日

Delphi Open Source Projects

Delphi Open Source Projects

OmniXML
OmniXML is a XML parser
Mozilla Public License (MPL) 1.1.
http://www.omnixml.com/

Open Source Delphi components for MIDAS
http://sourceforge.net/projects/midess/
PDFsharp - A .NET library for processing PDF

http://pdfsharp.codeplex.com/

.net用のPDFライブラリ

ライセンスはMIT

2011年2月7日月曜日

Ascii 文字コード一覧

chr 0 : ヌル(空白文字)
chr 1 : バイト値1(「ヘッダ開始」という意味らしい)
chr 2 : バイト値2(「テキスト開始」という意味らしい)
chr 9 : 水平タブ([TAB] キー一回分)
chr 10 : 改行(カーソル位置をそのままに、次の行へ移動)
chr 13 : 復帰(カーソル位置を行頭へ移動)
chr 32 : 空白(半角スペース " ")
chr 33 : 感嘆符(エクスクラメーション "!")
chr 34 : 二重引用符(ダブルクォーテーション '"')
chr 35 : シャープ("#")
chr 36 : ドル("$")
chr 37 : パーセント("%")
chr 38 : アンパサンド(&記号 "&")
chr 39 : (右)一重引用符(シングルクォーテーション "'")
chr 40 : 始め小括弧("(")
chr 41 : 終わり小括弧(")")
chr 42 : アスタリスク(米印 "*")
chr 43 : プラス("+")
chr 44 : カンマ(",")
chr 45 : マイナス("-")
chr 46 : ピリオド(".")
chr 47 : スラッシュ(わり算記号 "/")
chr 58 : コロン(":")
chr 59 : セミコロン(";")
chr 60 : 始め山括弧("<") chr 61 : 等号(イコール記号 "=") chr 62 : 終わり山括弧(">")
chr 63 : 疑問符(クエスチョンマーク "?")
chr 64 : アットマーク("@")
chr 91 : 始め大括弧("[")
chr 92 : 円記号("\")
chr 93 : 終わり大括弧("]")
chr 95 : アンダーライン("_")
chr 123 : 始め中括弧("{")
chr 124 : 縦線("|")
chr 125 : 終わり中括弧("}")
chr 126 : チルダ("~")

MS-SQL 半角から全角の変換

http://d.hatena.ne.jp/babydaemons/20080226
コピペさせてもらいました。
非常に助かります。


CREATE FUNCTION dbo.ToWide(@s VARCHAR(512))
RETURNS VARCHAR(512) AS
BEGIN
/* ASCII文字はコード順に処理する */
SET @s = REPLACE(@s COLLATE Japanese_BIN, ' ', ' ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '!', '!')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '"', '”')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '#', '#')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '$', '$')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '%', '%')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '&', '&')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '''', '’')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '(', '(')
SET @s = REPLACE(@s COLLATE Japanese_BIN, ')', ')')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '*', '*')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '+', '+')
SET @s = REPLACE(@s COLLATE Japanese_BIN, ',', ',')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '-', '-')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '.', '.')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '/', '/')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '0', '0')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '1', '1')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '2', '2')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '3', '3')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '4', '4')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '5', '5')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '6', '6')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '7', '7')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '8', '8')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '9', '9')
SET @s = REPLACE(@s COLLATE Japanese_BIN, ':', ':')
SET @s = REPLACE(@s COLLATE Japanese_BIN, ';', ';')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '<', '<') SET @s = REPLACE(@s COLLATE Japanese_BIN, '>', '>')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '?', '?')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '@', '@')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'A', 'A')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'B', 'B')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'C', 'C')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'D', 'D')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'E', 'E')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'F', 'F')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'G', 'G')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'H', 'H')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'I', 'I')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'J', 'J')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'K', 'K')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'L', 'L')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'M', 'M')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'N', 'N')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'O', 'O')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'P', 'P')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'Q', 'Q')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'R', 'R')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'S', 'S')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'T', 'T')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'U', 'U')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'V', 'V')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'W', 'W')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'X', 'X')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'Y', 'Y')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'Z', 'Z')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '`', '`')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'a', 'a')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'b', 'b')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'c', 'c')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'd', 'd')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'e', 'e')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'f', 'f')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'g', 'g')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'h', 'h')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'i', 'i')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'j', 'j')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'k', 'k')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'l', 'l')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'm', 'm')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'n', 'n')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'o', 'o')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'p', 'p')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'q', 'q')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'r', 'r')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 's', 's')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 't', 't')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'u', 'u')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'v', 'v')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'w', 'w')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'x', 'x')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'y', 'y')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'z', 'z')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '{', '{')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '|', '|')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '}', '}')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '~', ' ̄')

/* 濁点・半濁点を先に処理する */
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ガ', 'ガ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ギ', 'ギ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'グ', 'グ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ゲ', 'ゲ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ゴ', 'ゴ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ザ', 'ザ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ジ', 'ジ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ズ', 'ズ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ゼ', 'ゼ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ゾ', 'ゾ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ダ', 'ダ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヂ', 'ヂ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヅ', 'ヅ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'デ', 'デ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ド', 'ド')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'バ', 'バ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ビ', 'ビ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ブ', 'ブ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ベ', 'ベ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ボ', 'ボ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'パ', 'パ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ピ', 'ピ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'プ', 'プ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ペ', 'ペ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ポ', 'ポ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヴ', 'ヴ')
/* 残りはコード順に処理する */
SET @s = REPLACE(@s COLLATE Japanese_BIN, '。', '。')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '「', '「')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '」', '」')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '、', '、')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヲ', 'ヲ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ァ', 'ァ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ィ', 'ィ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ゥ', 'ゥ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ェ', 'ェ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ォ', 'ォ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ャ', 'ャ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ュ', 'ュ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ョ', 'ョ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ッ', 'ッ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ー', 'ー')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ア', 'ア')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'イ', 'イ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ウ', 'ウ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'エ', 'エ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'オ', 'オ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'カ', 'カ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'キ', 'キ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ク', 'ク')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ケ', 'ケ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'コ', 'コ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'サ', 'サ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'シ', 'シ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ス', 'ス')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'セ', 'セ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ソ', 'ソ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'タ', 'タ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'チ', 'チ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ツ', 'ツ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'テ', 'テ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ト', 'ト')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ナ', 'ナ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ニ', 'ニ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヌ', 'ヌ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ネ', 'ネ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ノ', 'ノ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ハ', 'ハ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヒ', 'ヒ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'フ', 'フ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヘ', 'ヘ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ホ', 'ホ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'マ', 'マ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ミ', 'ミ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ム', 'ム')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'メ', 'メ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'モ', 'モ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヤ', 'ヤ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ユ', 'ユ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ヨ', 'ヨ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ラ', 'ラ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'リ', 'リ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ル', 'ル')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'レ', 'レ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ロ', 'ロ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ワ', 'ワ')
SET @s = REPLACE(@s COLLATE Japanese_BIN, 'ン', 'ン')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '゚', '゜')
SET @s = REPLACE(@s COLLATE Japanese_BIN, '゙', '゛')
RETURN @s
END

2011年2月4日金曜日

MAGIC FileDlg

UniPaasのFileDlg関数

構文:
FileDlg(ファイルタイプ,グループ)

グループにフルパスを設定すると、フルパスの場所で、ファイルダイアログが表示される。

確認Ver UniPaas1.5

FileDlg関数はMAGIC v8から存在しています。

2011年2月3日木曜日

Delphi ダミーファイル作成

procedure CreateNewFile(FileName: String; FileSize: Integer);
var
FileHandle: Integer;
C: Char;
begin
FileHandle := FileCreate (FileName);
FileSeek(FileHandle,FileSize-1,0);
C := Char(0);
FileWrite (FileHandle,C,1);
FileClose (FileHandle);
end;

2011年2月1日火曜日

MAGIC Translate関数

MAGIC Translate関数は
論理名の値を展開してくれる。

発生Ver MAGIC v9

2011年1月28日金曜日

iTextSharpでPDFファイル結合

using iTextSharp.text;
using iTextSharp.text.pdf;

//出力ファイルが存在している場合は削除
//1番目のファイルが合体するファイル
if (File.Exists(args[0].ToString()))
{
File.Delete(args[0].ToString());
}

Document doc = null; // 出力ファイルDocument
PdfCopy copy = null; // 出力ファイルPdfCopy

try
{
//-------------------------------------------------------------------------------------
// ファイル件数分、ファイル結合
//-------------------------------------------------------------------------------------
for (int i = 1; i < args.Length; i++)
{
// リーダー取得
PdfReader reader = new PdfReader(args[i].ToString());

// 入力ファイル1を出力ファイルの雛形にする
if (i == 1)
{
// Document作成
doc = new Document(reader.GetPageSizeWithRotation(1));

// 出力ファイルPdfCopy作成
copy = new PdfCopy(doc, new FileStream(args[0].ToString(), FileMode.Create));

// 出力ファイルDocumentを開く
doc.Open();

// 文章プロパティ設定
doc.AddKeywords((string)reader.Info["Keywords"]);
doc.AddAuthor((string)reader.Info["Author"]);
doc.AddTitle((string)reader.Info["Title"]);
doc.AddCreator((string)reader.Info["Creator"]);
doc.AddSubject((string)reader.Info["Subject"]);
}

// PDFコンテンツを取得、copyオブジェクトに追加
for (int iPageCnt = 1; iPageCnt <= reader.NumberOfPages; iPageCnt++)
{
PdfImportedPage page = copy.GetImportedPage(reader, iPageCnt);
copy.AddPage(page);
}

// フォーム入力を結合
PRAcroForm form = reader.AcroForm;
if (form != null)
copy.CopyAcroForm(reader);

// リーダーを閉じる
reader.Close();
}
}
finally
{
if (copy != null)
copy.Close();

if (doc != null)
doc.Close();
}

vbscriptでショートカット(リンクアイコン)を作成

デスクトップ上にシュートカットアイコンを作成します

Set fso = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("WScript.Shell")
desktop = ws.SpecialFolders("Desktop")
' ショートカット作成
Set shortcut = ws.CreateShortcut(desktop & "\Lotus Notes 7.lnk")
With shortcut
.TargetPath = "C:\Program Files\lotus\notes\notes.exe"
.WorkingDirectory = desktop
.Save
End With

2011年1月27日木曜日

iTextSharpの文字印刷

//文字列の出力
//フォントの作成(使用するフォントをあらかじめ準備)
Font font = new Font(
BaseFont.CreateFont(@"c:\windows\fonts\msgothic.ttc,0", BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED));

pcb.BeginText();
//文字の出力(文字の出力時は必ず、BeginTextとEndTextで囲む必要がある)

pcb.SetFontAndSize(font.BaseFont, 16);

//構成・出力文字列・X・Y・rotation(回転):水平時は0
pcb.ShowTextAligned(Element.ALIGN_LEFT, "BarCode", 10, 380, 270);

pcb.EndText();

UniPaas エラーイメージ

UniPaasのエラープロパティにイメージが追加されている

追加されたUniPaasバージョン 1.5

UniPaasエラーログ出力

エラーログ出力の機能

エラーのプロパティー部分にエラーログ出力の属性が追加

追加されたUniPaasバージョン 1.5

2011年1月26日水曜日

iTextSharpでテンプレートを使用する方法

iTextSharpでテンプレートを使用する方法
CodeZineや@ITにも方法が載っていたが、バージョンが古いせいか
コピペで動作しなかった。

iTextSharp 5.0.5で動作確認

using iTextSharp.text;
using iTextSharp.text.pdf;

// step 1: creation of a document-object
Document doc = new Document();

// step 2:
// we create a writer that listens to the document
// and directs a PDF-stream to a file
String vTempFile = iPDFFileName + "_.pdf";
PdfReader pr = new PdfReader(iPDFFileName);
PdfWriter pw = PdfWriter.GetInstance(doc, new FileStream(vTempFile, FileMode.Create));

// step 3: we open the document
doc.Open();

// template.pdfを現在のPDF文書に対して適用
PdfImportedPage page = pw.GetImportedPage(pr, 1);
PdfContentByte pcb = pw.DirectContent; //旧だとGetDirectContent;
pcb.AddTemplate(page, 0, 0);

// step 4: we add content
//iTextSharp.text.Image bmp = iTextSharp.text.Image.GetInstance(iBarCodeFileName);
Image bmp = Image.GetInstance(iBarCodeFileName);
bmp.SetAbsolutePosition(50, 630);

pcb.AddImage(bmp);

//doc.Add(bmp);

// step 5: we close the document
doc.Close();

C# コマンドラインからパラメータを取得する

C# コマンドラインからパラメータを取得する

Mainメソッドのパラメータで取得する方法
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("コマンドライン引数はありません。");
}
else
{
foreach (string arg in args)
Console.WriteLine(arg);
}
}

.NETでPDF帳票を出力する

iTextSharpは、iTextというJavaのライブラリをC#に移植したものです。.NETで動作するiTextには、iTextSharp以外にも、iText.NETという移植版が存在します。
開発者が日本人(氏原さん)のため多国語処理に強く
日本語の情報が充実しているメリットがあります。

ソースは、SourceForgeより

CodeZineの記事
http://codezine.jp/article/detail/462

delphiでプリンター属性を変更する




delphiでプリンター属性を変更する 
以下がソース
ただし、Windows95までは権限が無かったのでOKだったが
NTからはプリンター属性を変更するのに権限が必要
Wins32のDevModeを使用しています

function SetPaper(PaperName: String): boolean;
var
 DrvName, PrtName, PortName: array[0..512] of char;
 h: THandle;
 pDevMode: PDEVICEMODE;
 PaperCount, i: Integer;
 Papers: array[0..255] of array[0..63] of Char;
 PaperNo: array[0..255] of Word;
begin
 Result := False;
 Printer.GetPrinter(DrvName, PrtName, PortName, h);
 Printer.SetPrinter(DrvName, PrtName, PortName, 0);
 Printer.GetPrinter(DrvName, PrtName, PortName, h);
 pDevMode := GlobalLock(h);
 try
   // 用紙サイズ配列数を取得
   PaperCount := DeviceCapabilities(DrvName, PortName, DC_PAPERS,
    nil, pDevMode);
   // 用紙サイズ番号をPaperNoに保存
   DeviceCapabilities(DrvName, PortName, DC_PAPERS, @PaperNo, nil);
   // 用紙サイズ名ををPapersに格納
   DeviceCapabilities(DrvName, PortName, DC_PAPERNAMES, @Papers, nil);
   // 指定した用紙名で用紙サイズ番号を検索
   for i := 0 to PaperCount -1 do
   begin
     if PaperName=Papers[i] then
     begin
       // 検索された用紙サイズのdmPaperSizeを設定
       pDevMode^.dmPaperSize := PaperNo[i];
       Result := True;
       Break;
     end;
   end;
 finally
   GlobalUnlock(h);
 end;
end;

Delphiでファイルのタイムスタンプを変更する

Delphiでファイルのタイムスタンプを変更する

引数 FileName … タイムスタンプを変更したいファイルの名前です。
DateTime … タイムスタンプです。TDateTime 型で指定して下さい。
戻り値 タイムスタンプの変更が成功すれば True、失敗すれば(ファイルが存在しない場合など) False を返します。
 
uses SysUtils;
function FileSetDate2(FileName: string; DateTime: TDateTime): Boolean;
var hFile: Integer;
begin
  hFile := FileOpen(FileName, fmOpenWrite);
  Result := hFile > 0;
  if Result then begin
     Result := FileSetDate(hFile, DateTimeToFileDate(DateTime)) = 0;
     FileClose(hFile);
   end;
end;

C#からVB.NET

C#からVB.NET

C#から、VB.NETにソース変換
逆の VB.NETからC#もこのurl上で出来る
 

Windows DCを降格出来ない

DCを降格出来ない

DCPROMOコマンドでコメインコントローラーを降格出来ない場合
 
DCPROMO /forceremoval   オプションを追加すると、強制的に降格出来る。
 
その後、ADでそのサーバの残骸が削除する
  残骸とは、管理サーバの一覧から削除
  ドメイン参加になっている一覧から削除
 

Oracle DBConsole構築方法

DBConsole構築方法

コマンドプロンプトから
emca -deconfig dbcontrol db
emca -config dbcontrol db

GhostScriptLiteを.Netから使用する

GhostScriptを.Netから使用する。

http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx

.NetのPDFライブラリー

.NetでのPDFライブラリー

http://pdfsharp.codeplex.com/

ライセンスはMIT

UniPaasのファイル名一覧取得

UniPaasのファイル名の一覧を取得する方法

FileListGet関数を使用する

対象Ver:UniPaas 1.5