いつも大変参考にさせていただいており有難うございます。
現在環境 Delphi Xe8 VCL Firebird2.5 FireDAC
Firebird データベースの文字コードを CP943C から UTF8 に移行を試行しています。
(FBconverterを使用して、CP943CからUTF8に変更は成功)
CP943C では 全角/半角/英数/大文字小文字 まじり文の「あいまい検索」をおこなっていました。
以下は現在の 「あいまい検索」CODE です。
procedure TMainForm.GetHinnmeiKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
if MainForm.GetHinnmei.Text <> '' then
begin
////////////////////////
Mainorm.HinnmeiKensaku;/////////////////////////
end;
//endif
end;
//endif
end;
procedure TMainForm.HinnmeiKensaku;
var
Chr : array [0..255] of char;
begin
MainForm.GetHinnmei.Text := Trim(AnsiUpperCase(MainForm.GetHinnmei.Text));
//■全角を半角に変換する
Windows.LCMapString(
GetUserDefaultLCID(),
LCMAP_HALFWIDTH,
PChar(MainForm.GetHinnmei.Text), //変換する文字列
Length(MainForm.GetHinnmei.Text) + 1, //サイズ
chr, //変換結果
Sizeof(chr) //サイズ
);
MainForm.GetHinnmei.Text := Chr;
if MainForm.GetHinnmei.Text <> '' then
begin
//***************************************************************************
DM.FDHacchuMnQry.Close;
DM.FDHacchuMnQry.SQL.Clear;
DM.FDHacchuMnQry.SQL.Add('SELECT * FROM HacchuMn ');
DM.FDHacchuMnQry.SQL.Add('WHERE (Upper(Hinnmei) Like :Hinnmei) ');
DM.FDHacchuMnQry.ParamByName('Hinnmei').AsWideString := '%'+AnsiUpperCase(Trim
(MainForm.GetHinnmei.Text))+'%';
DM.FDHacchuMnQry.Open;
//****************************************************************************
if not DM.FDHacchuMnQry.Eof then
MainForm.DBGrid1.SetFocus;
//endif
end
//endif
end;
しかし
Chr : array [0..255] of char; を Chr : array [0..255] of Widechar;
MainForm.GetHinnmei.Text := Trim(AnsiUpperCase(MainForm.GetHinnmei.Text));を Trim(UpperCase
(MainForm.GetHinnmei.Text))
上記を変更してみましたが「半角英数のみ」ならば大文字/小文字検索はできるのですが「全角まじり文」では
検索できません。
pCharが理解できていません。
UTF-8「全角まじり文」でも検索できるを方法等ございましたら教えてください。
半角大文字変換を行いたいと言うことでしょうか。
//半角大文字変換
function ChangeHalfUpperCase(SrcStr:String):String;
var Buf:array of Char;
begin
Result:='';
if SrcStr='' then exit;
SetLength(Buf,Length(SrcStr)+1);
LCMapStringEx(
LOCALE_NAME_SYSTEM_DEFAULT,
LCMAP_HALFWIDTH or LCMAP_UPPERCASE,
PChar(SrcStr),Length(SrcStr),
PChar(@Buf[0]),Length(Buf),
nil,nil,0
);
Result:=PChar(Buf);
end;
//使用例
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(
ChangeHalfUpperCase('abcde0123FgHijk45')
);
end;
外していたらすいません。
参考URL:
https://mam-mam.net/delphi/vcl_lcmapstring.html
いつも大変お世話になります。
mam様 早速回答ありがとうございます。
例 カメラ で検索を行い カメラ、カメラ 両方検索したいです。
現在 cp943cでは使用出来ておりUTF8にしたら検索漏れがある状態です。
上記mam様 内容 確認試してみます。
もうしばらくお待ちください。
| ツイート |
|