Apache2.2 でDelphi2010 TWebModule使うとPOSTが取れない
Delphi2010 のTWebModuleを使ったCGIアプリケーションを作成する場合
<form method="post">の内容が取得できない
s := Request.ContentFields.Values['***'];
sが空になる
これはDELPHIのライブラリ内CGIHTTP.pasのバグみたい
修正箇所
--------------
function TCGIRequest.GetFieldByName(const Name: AnsiString): AnsiString;
function AdjustHTTP(const Name: AnsiString): AnsiString;
const
SHttp = AnsiString('HTTP_'); { do not localize }
begin
//ここコメントアウトif AnsiStrPos(PAnsiChar(SHttp), PAnsiChar(Name)) = PAnsiChar(Name) then
if AnsiStrPos(PAnsiChar(Name),PAnsiChar(SHttp)) = PAnsiChar(Name) then
//↑これ追記
Result := Copy(Name, 6, MaxInt)
else
Result := SHttp + Name;
end;
--------------
でCGIHTTP.pasをコンパイルすると CGIHTTP.dcu が出来るのでパスの効く場所にコピーする
標準インストールなら「C:\Program Files\Embarcadero\RAD Studio\7.0\lib」←ここにコピー
※この作業前にRADStudio2010のUpdate4, Update5は終わらせておく事が必要
<form method="post">の内容が取得できない
s := Request.ContentFields.Values['***'];
sが空になる
これはDELPHIのライブラリ内CGIHTTP.pasのバグみたい
修正箇所
--------------
function TCGIRequest.GetFieldByName(const Name: AnsiString): AnsiString;
function AdjustHTTP(const Name: AnsiString): AnsiString;
const
SHttp = AnsiString('HTTP_'); { do not localize }
begin
//ここコメントアウトif AnsiStrPos(PAnsiChar(SHttp), PAnsiChar(Name)) = PAnsiChar(Name) then
if AnsiStrPos(PAnsiChar(Name),PAnsiChar(SHttp)) = PAnsiChar(Name) then
//↑これ追記
Result := Copy(Name, 6, MaxInt)
else
Result := SHttp + Name;
end;
--------------
でCGIHTTP.pasをコンパイルすると CGIHTTP.dcu が出来るのでパスの効く場所にコピーする
標準インストールなら「C:\Program Files\Embarcadero\RAD Studio\7.0\lib」←ここにコピー
※この作業前にRADStudio2010のUpdate4, Update5は終わらせておく事が必要
AnsiString と RawByteString
AnsiString は指定しないと(0)が使われる
この場合 コードページ環境は ロケールが「日本」であればCP932(Shift_JIS)らしい
なんで他の言語を入れる場合
RawByteString が良いらしい。RawByteString = type AnsiString($FFFF)との事
いままで同様、日本語で使ってるぶんにはAnsiStringは指定しないで良いのかな?
この場合 コードページ環境は ロケールが「日本」であればCP932(Shift_JIS)らしい
なんで他の言語を入れる場合
RawByteString が良いらしい。RawByteString = type AnsiString($FFFF)との事
いままで同様、日本語で使ってるぶんにはAnsiStringは指定しないで良いのかな?
theme : プログラミング
genre : コンピュータ
tag : Delphi AnsiString
SQL SERVER DATENAME
時間を分けて取り出すにはDATENAMEって言う関数があるのでそれを使う
select DATENAME(hh, getdate()) as [時];
select DATENAME(MM, getdate()) as [月];
select DATENAME(MI, getdate()) as [分];
select DATENAME(ss, getdate()) as [秒];
select DATENAME(hh, getdate()) as [時];
select DATENAME(MM, getdate()) as [月];
select DATENAME(MI, getdate()) as [分];
select DATENAME(ss, getdate()) as [秒];
DELPHI ディスクの空き容量などを返す
DelphiにはDiskFreeとDiskSizeって関数が用意されている
中身はWin32のGetDiskFreeSpaceExをラップしてるだけです
var
iDiskFree: Int64;
iDiskSize: Int64;
begin
iDiskFree := DiskFree(3);
Memo1.Lines.Append('ディスク空き容量 = ' + FormatCurr('#,',iDiskFree));
iDiskSize := DiskSize(3);
Memo1.Lines.Append('ディスク全体 = ' + FormatCurr('#,',iDiskSize));
end;
TMemoに書いてみました

DiskFreeとDiskSize両方の引数に3と入れてますけどコレは1=A:, 2=B:,3=C...ドライブ名を数字にしたものです
中身はChar(Drive + $40);です引数 = 3なので「Cドライブ = Char(3 + $40);」
中身はWin32のGetDiskFreeSpaceExをラップしてるだけです
var
iDiskFree: Int64;
iDiskSize: Int64;
begin
iDiskFree := DiskFree(3);
Memo1.Lines.Append('ディスク空き容量 = ' + FormatCurr('#,',iDiskFree));
iDiskSize := DiskSize(3);
Memo1.Lines.Append('ディスク全体 = ' + FormatCurr('#,',iDiskSize));
end;
TMemoに書いてみました

DiskFreeとDiskSize両方の引数に3と入れてますけどコレは1=A:, 2=B:,3=C...ドライブ名を数字にしたものです
中身はChar(Drive + $40);です引数 = 3なので「Cドライブ = Char(3 + $40);」


