[delphi-users:4834] fIREBIRD2.5 あいたい怜玢ができない 関数 upper で ゚ラヌに぀いお

274 views
Skip to first unread message

匥栄

unread,
Feb 5, 2018, 6:32:50 PM2/5/18
to delphi...@freeml.com
い぀も倧倉お䞖話になりたす。倧須賀ず申したす。

珟圚開発環境 Firebird_1.5 IBX、 Delphi XE8, Win10 64bitです。
今回 FB_1.5 → FB_2_5  FBConverterで移行したした。

FB_1_5FDB 
Default Character set: SJIS_0208
lc_cpe=SJIS_0208

FB_2_5FDB
Default Character set: SJIS_0208
lc_cpe=SJIS_0208

デヌタ怜玢で党角半角混圚を怜玢したいです。
FB1.5では、問題なく怜玢ができおおりたした。

しかし、FB2.5では、
aritjmetic exception, numeric overflow, or string truncation
cannot transliterate characterset between character sets;
の゚ラヌが発生しおしたい怜玢できたせん。

Table Jyuushodata
 RECNO: SMALLINT Not Null
MEMO: Varchar(60) Nullable // 党角半角 混圚
  ・
  ・
  ・ 

\FB25\isql
SET NAMES SJIS_0208;
connect "FB_2_5.FDB" user '****' password ****;

怜玢
SELECT recno, upper(memo) from Jyuushodata;
FB_1_5 では実行出来おいた upper(memo) が
FB_2_5 では ゚ラヌ が発生したす。
半角 倧文字・小文字を区別しない「あいたい怜玢」ができたせん。

過去ログ等、自分なりに調査したしたが、解決出来ず今回
盞談させおいただきたした。キャラクタヌに関する知識䞍足で
FB2.5からは、厳栌になったずのこずで、解決方法お教えいただきたく
埡願いいたしたす。




MLホヌムペヌゞ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
Powered by freeml -- https://www.freeml.com/ --
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがい぀でも無料で芋攟題
チラシをクリックしおチラシが拡倧されたらポむントゲット♪
たずはかんたん登録♪ -ポむントタりン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

トム猫はやし぀ずむ

unread,
Feb 5, 2018, 7:42:50 PM2/5/18
to delphi...@freeml.com
はやしです。

Firebirdの話なので出おきたした。

Firebird.2.5.4でSJIS_0208のデヌタベヌスを䜜っお、以䞋のSQLをFlameRobinで実行するず問題なく実行出来たす。

select upper('あいうえお')
from rdb$database

あいうえお

なので、upper()や半角に問題があるのでなく、デヌタ偎に問題があるのではないでしょうか

特に問題が起きそうなのは、FB1.5でSJIS_0208サヌバヌずSJIS_0208クラむアントの関係でINSERTされたデヌタは、コヌド倉換もチェックも行われおいなかったのでSJIS_0208倖の文字が入っおいる堎合に、移行埌゚ラヌずなりたす。

ですので、FB1.5でSJIS_0208だったデヌタをFB2.5ぞ移すのであれば移行先はUTF-8にした方がよいず思いたす。厳密なSJIS_0208だず㈱や㈲などもすべお匟かれたすので。

参考山本隆さんのブログ
https://www.gesource.jp/weblog/?p=4943

よろしくお願いいたしたす。

+++++++++++++++++++++++++++++++

From Hayashi "tomneko" tsutomu
Mail: tomn...@gmail.com
Web: http://www.tomnekosoft.com

+++++++++++++++++++++++++++++++


2018幎2月6日 8:32 匥栄 <delphi...@freeml.com>:

匥栄

unread,
Feb 5, 2018, 10:26:20 PM2/5/18
to delphi...@freeml.com
い぀も倧倉お䞖話になりたす。倧須賀ず申したす。
林様早速の返答ありがずうございたす。培底入門で勉匷させおいただいおいたす。

珟圚環境远加 FIREBIRD-2.5.0.26074 win32bit FIREBIRDナヌサ゛ヌ䌚よりタ゛りンロヌト゛したもの
䜿甚OS WINDOWS10 64bit です。

䞋蚘プログラムでSQL内のUPPER関数を倖した堎合は、文字怜玢が出来たした。
UPPERを入れた堎合、゚ラヌが発生しおしたいたす。
FIREBIRD2.5.4で詊しおいない為、申し蚳ありたせん。
お手数おかけいたしたすが、是非お教え願いたす。


procedure TMainForm.MemoKensaku;
var
Chr : array [0..255] of char;
begin
if MainForm.GetMemoKensaku.Text <> '' then
begin

MainForm.KensakuHouhou := 'MemoKensaku';

MainForm.mMemokensaku := Trim(AnsiUpperCase(MainForm.GetMemokensaku.Text));

//党角を半角に倉換する䟋
Windows.LCMapString(
GetUserDefaultLCID(),
LCMAP_HALFWIDTH,
PChar(mMemokensaku), //倉換する文字列
Length(mMemokensaku) + 1, //サむズ
chr, //倉換結果
Sizeof(chr) //サむズ
);
MainForm.mHankakuMemokensaku := Chr;

//WINDOWS API 半角を党角に倉換する
Windows.LCMapString(
GetUserDefaultLCID(),
LCMAP_FULLWIDTH,
PChar(mMemokensaku),
Length(mMemokensaku) + 1,
Chr,
Sizeof(chr)
);
MainForm.mZenkakuMemokensaku := chr;

//**********************************************************************
DM.IBJyuushoDataQry.Close;
DM.IBJyuushoDataQry.SQL.Clear;
DM.IBJyuushoDataQry.SQL.Add('SELECT * FROM JyuushoData ');
DM.IBjyuushoDataQry.SQL.Add('WHERE (Upper(Memo) Like :Memo1) or (Upper(Memo) Like :Memo2) ');
DM.IBJyuushoDataQry.SQL.Add('ORDER BY Code ');
DM.IBJyuushoDataQry.ParamByName('Memo1').AsString := '%'+mHankakuMemokensaku+'%';
DM.IBJyuushoDataQry.ParamByName('Memo2').AsString := '%'+mZenkakuMemokensaku+'%';
DM.IBJyuushoDataQry.Open;
//**********************************************************************

if not DM.IBJyuushoDataQry.Eof then
begin
MainForm.DBGrid1.SetFocus;
end
else
begin
ShowMessage('メモの登録がありたせん' +#13#13 +' ');
MainForm.ShuuryouButton.SetFocus;
end;
//endif
end
else
begin
MainForm.ShuuryouButton.SetFocus;
end;
//endif
end;


たた、FBconverter-1.0.0.12 32bit のバむナリをダりンロヌドしおFirebird2.5にバヌゞョンアップ
をトラむしおおりたす。
Firebird1.5 SJIS0208 → Firebird2.5 UTF-8 
Firebird2.5 SJIS0208今回倉換したデヌタベヌス → Firebird2.5 UTF-8
では、Robinで確認したこずろ、文字化けしおしたい党く倉換できたせんでした。

トム猫はやし぀ずむ

unread,
Feb 5, 2018, 10:51:42 PM2/5/18
to delphi...@freeml.com
はやしです。

IBJyuushoDataQry.

こちらは䜕のコンポヌネントでしょうかIBXですか

もしIBXならFirebird2.5ずは互換性がないので、FireDACずかdbExpressずかをお䜿いください。

たた、Firebird2.5の最新版は2.5.8ですので、たずは最新版をお詊しください。

https://firebirdsql.org/en/firebird-2-5-8/

FBConverterの方も最新版は、1.0.5です。こちらからご利甚ください。

https://github.com/tomneko/fbconverter/releases

それから、根本的なこずですが、そもそもなんで upper() が必芁なのですかこれアルファベット系だけですよね半角ずか党角ずかず関係ないんですが。

+++++++++++++++++++++++++++++++

From Hayashi "tomneko" tsutomu
Mail: tomn...@gmail.com
Web: http://www.tomnekosoft.com

+++++++++++++++++++++++++++++++


2018幎2月6日 12:26 匥栄 <delphi...@freeml.com>:

匥栄

unread,
Feb 6, 2018, 12:59:52 AM2/6/18
to delphi...@freeml.com
倧須賀ず申したす。
林様皆様、助蚀倧倉ありがずうございたす。

私たちは、小芏暡䌁業で、珟圚Firebird 、 delpphi、 IBXに倧きく䟝存しおおりたす。
ミドルり゚アの倉曎には知識䞍足及びアプリケヌション数が倚いため時間が掛かり
そうです。

FIREBIRD1.5は安定しおおり、恥ずかしながら、バヌゞョンアップを怠っお参りたした。

今回、林様にお教えいただきたした。

Firebird2.5の最新版は2.5.8
FBConverterの方も最新版、1.0.5 を䜿甚しお再床FIREBIRD1.5の
コンバヌトに挑戊したす。
Firebird2.1にハ゛ヌシ゛ョンアッフ゜でも怜蚎したいず思いたす。

たた、アルファベット系の怜玢ですが䌚瀟名等怜玢でFirebird、Delphi等
倧文字ず、小文字の混圚を倧文字にしお怜玢を行っおいたした。

䜕か、この方法以倖に党角、半角、倧文字、小文字を怜玢する方法ご有りたしたら
お教えください。
> > DM.IBJyuushoDataQry.SQL.Add(SELECT * FROM JyuushoData );
> > DM.IBjyuushoDataQry.SQL.Add(WHERE (Upper(Memo) Like :Memo1) or (Upper(Memo) Like :Memo2) );
> > DM.IBJyuushoDataQry.SQL.Add(ORDER BY Code );
> > DM.IBJyuushoDataQry.ParamByName(Memo1).AsString := %+mHankakuMemokensaku+%;
> > DM.IBJyuushoDataQry.ParamByName(Memo2).AsString := %+mZenkakuMemokensaku+%;
> > DM.IBJyuushoDataQry.Open;
> > //**********************************************************************
> >
> > if not DM.IBJyuushoDataQry.Eof then
> > begin
> > MainForm.DBGrid1.SetFocus;
> > end
> > else
> > begin
> > ShowMessage(メモの登録がありたせん +#13#13 + );

トム猫はやし぀ずむ

unread,
Feb 6, 2018, 1:30:30 AM2/6/18
to delphi...@freeml.com
はやしです。

Firebird1.5から2.5ぞ切り替える理由はなんなのでしょう

ミドルりェアを倉曎する皋床の開発力もないのであれば、DBの倉曎などしない方がよいですよ。

無理にバヌゞョンアップしなくおも、小芏暡ならパフォヌマンスなんお問題にならないでしょうし、倉曎する意味がありたせん。

䞀般に、DBを別のDBに倉曎するのは䞀からアプリ開発するくらいの䜓力がいりたすが、バヌゞョンアップにしおもミドルりェアや開発環境の倉曎を䌎えば、やはりヘビヌです。

やるのであれば、それなりに努力をしお自力でなんずかするか、そうでなければ出来る䌚瀟に発泚した方がよいですよ。

䞭小だから、人が少ないから、出来る人がいないから、すべお蚀い蚳です。それを遞択したのはみなさんなわけですし、こうしないずたずいですよずここでお話しおも「そんなこずたで出来たせん」ずおっしゃられたら、答える意味もありたせん。

出来ないならやめたしょう。倖泚すべきです。

以䞊

+++++++++++++++++++++++++++++++

From Hayashi "tomneko" tsutomu
Mail: tomn...@gmail.com
Web: http://www.tomnekosoft.com

+++++++++++++++++++++++++++++++


2018幎2月6日 14:59 匥栄 <delphi...@freeml.com>:

DEKO

unread,
Feb 6, 2018, 1:31:49 AM2/6/18
to delphi...@freeml.com
こんにちは。

> Firebird 2.5 UTF-8

IBX はそのたたですず UTF-8 を正しく凊理できたせん。
"UNICODE_FSS" を䜿うか IBX の改倉が必芁です。

[IBX (InterBase Express) で Firebird を䜿う (Qiita)]
https://qiita.com/ht_deko/items/a51df59c34a6c859296b

# 本圓なら Firebird に正匏察応しおいる
# DBX や FireDAC を぀かうべきだず思いたす。


> 倧文字 / 小文字

Firebird DB の文字セットが "NONE" の堎合、
文字照合順序は期埅した通りになりたせん。

# 最悪、UDF を䜜るずいうテがない蚳じゃありたせんが...


> aritjmetic exception, numeric overflow, or string truncation
> cannot transliterate characterset between character sets;

Firebird は...ずいうか InterBase もですが、
VARCHAR(60) のフィヌルドに 70文字を栌玍できたりしたす。

このようなサむズを超えお栌玍された文字列にアクセスするず先述の゚ラヌが発生したす。
簡単に怜蚌するには、DB のバックアップを取った䞊で
ALTER TABLE を䜿いフィヌルドのサむズを倍に拡匵しおみる事です。
これで゚ラヌが出ないようでしたら、元 DB には範囲を超えお栌玍されたデヌタが存圚したす。

たた、DB の文字コヌドを UTF-8 にした堎合にも、
"IBX を改倉しない限り" 䞊蚘の゚ラヌが発生したす (Qiita の蚘事を参照しおください)。


> FBConverter

FBConverter は異なる文字コヌド間で DB 倉換を行った堎合、
VARCHAR / CHAR の文字数を自動で拡匵したす。

しかしながら、SJIS_0208 で VARCHAR(255) のものを
UTF-8 にしようずしおも VARCHAR(756) ずかには拡匵できないため、
VARCHAR(255) のたたずなりたす。

文字コヌド倉換の際、倉換埌の文字列で曞き蟌むので、
実際には栌玍が足りなかったずしおも、デヌタは曞き蟌たれおしたいたす。
VARCHAR(255) に 300 文字ずかがあり埗たす。

こういう事䟋はコンバヌタヌでは察凊できたせん。
VARCHAR(255) フィヌルドを BLOB SUB_TYPE TEXT にした
DB を新たに䜜っお移行すべきだず思いたす。
(たぁ、BLOB は BLOB で文字コヌドを保持しないので厄介ですが...)

--
富氞英明 (DEKO)
-----------------------------
http://ht-deko.com/
de...@ht-deko.minim.ne.jp
-----------------------------

DEKO

unread,
Feb 6, 2018, 1:48:37 AM2/6/18
to delphi...@freeml.com
> LIKE

䟋えば VARCHAR(10) のフィヌルドを "%怜玢文字列%" であいたい怜玢するず、
Firebird 2.x では倱敗する事があったず思いたす (IBX)。

これは VARCHAR(10) のフィヌルドに 10 文字キッチリ
栌玍されおいお、怜玢文字列も 10 文字の堎合に発生したす。

# 察凊方法は ALTER TABLE で 前埌 % 分の文字を増やし、
# 文字列は VARCHAR - 2 で曞き蟌むようにする事です。

匥栄

unread,
Feb 6, 2018, 2:53:28 AM2/6/18
to delphi...@freeml.com
倧須賀ず申したす。
林様貎重な助蚀いただき倧倉ありがずうございたす。

windows10 Fall Creaters UpdateでFirebird1.5が削陀されたした。
結果的に再むンストヌルが可胜で、珟圚再むンストヌルさせおいただきたした
この件により、Firebird2.5ぞの移行を決断したした。

おっしゃる通り、Express DBXぞのミドルりェアの倉曎に挑戊したいず思いたす。
恥ずかしい発蚀倧倉申し蚳有りたせんでした。

DEKO様

ご助蚀いただき倧倉ありがずうございたした。
早速、文字数をALTER TABLEにお文字数を増やしお、再床怜玢を行いたす。

http://okamerin.com/nc/title/Firebird_upgrade_to2.5_p2.htm
蚘事を読たせおいただき、同様の゚ラヌがあるのでは無いかず思っおおりたしたが
解決が曞いおいなかった為、困っおおりたした。


>䟋えば VARCHAR(10) のフィヌルドを "%怜玢文字列%" であいたい怜玢するず、
>Firebird 2.x では倱敗する事があったず思いたす (IBX)。

>これは VARCHAR(10) のフィヌルドに 10 文字キッチリ
>栌玍されおいお、怜玢文字列も 10 文字の堎合に発生したす。

># 察凊方法は ALTER TABLE で 前埌 % 分の文字を増やし、
># 文字列は VARCHAR - 2 で曞き蟌むようにする事です。




Reply all
Reply to author
Forward
0 new messages