JPH1097449A - 多値局所化ストリング - Google Patents

多値局所化ストリング

Info

Publication number
JPH1097449A
JPH1097449A JP9112058A JP11205897A JPH1097449A JP H1097449 A JPH1097449 A JP H1097449A JP 9112058 A JP9112058 A JP 9112058A JP 11205897 A JP11205897 A JP 11205897A JP H1097449 A JPH1097449 A JP H1097449A
Authority
JP
Japan
Prior art keywords
buffer
user
source
data
locality
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9112058A
Other languages
English (en)
Inventor
Mark J Finger
ジェイ フィンガー マーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Informix Software Inc
Original Assignee
Informix Software Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Informix Software Inc filed Critical Informix Software Inc
Publication of JPH1097449A publication Critical patent/JPH1097449A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Facsimiles In General (AREA)

Abstract

(57)【要約】 (修正有) 【課題】 データ項目をユーザプログラム及びソースプ
ログラムに使用できる方法の提供。 【解決手段】 ユーザ及びソースプログラムがデータ項
目にアクセスするユーザ及びソースインターフェイスを
用意し、ユーザ及びソースのローカル性を与え、データ
項目を記憶するユーザ及びソースバッファを用意し、ユ
ーザバッファ及びソースバッファの内容の状態メモリを
維持し、新たなデータがユーザバッファに記憶されると
きにソースバッファの状態を非カレントにそしてユーザ
バッファをカレントにセットし、新たなデータがソース
バッファに記憶されるときにユーザバッファの状態を非
カレントにそしてソースバッファをカレントにセットす
る。ユーザバッファの状態がカレントの場合はユーザバ
ッファの内容を読み取り、非カレントの場合はソースバ
ッファの内容をソースのローカル性からユーザのローカ
ル性へ変換してその変換された内容をユーザバッファに
記憶する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般に、異なる地
方で異なる表現をもつテキスト、日付及び通貨のような
データの取り扱いに係る。
【0002】
【従来の技術】コンピュータプログラムは、使用プログ
ラム又はユーザプログラムとは異なるソース及び/又は
文字、表現、分類、日時、通貨、番号、等々に対し国又
は言語に特有の慣習で互いに異なるソースにより与えら
れたデータを使用する。使用プログラム及びそのデータ
ソースは、1つのコンピュータにあってもよいし、又は
多数のコンピュータに分散されてもよい。このような分
散の一般的な例として、クライエント/サーバアーキテ
クチャーで実施されている拡張スプレッドシートプログ
ラム及びデータベースが含まれ、この場合、クライエン
トは、ユーザ又はアプリケーションプログラムであり、
そしてサーバ(1つ又は複数)は、ソースであると共
に、データの行先のこともある。
【0003】クライエント/サーバの実施について考え
ると、異なるサーバ間及びサーバとクライエントとの間
でデータの表現の仕方が相違すると、異なるソースから
のデータを使用したり統合したりするのが困難になる。
このような問題は、データ自体について生じると共に、
名前、例えば、データへのアクセスを得るのに使用され
るデータベースのフィールド名についても生じる。
【0004】これらの相違は、キャラクタセットの相違
として最も頻繁に生じる。例えば、中国語をサポートす
る台湾のUNIXシステムは、通常、約59,000文
字のキャラクタセットを有する。又、中国語をサポート
する台湾のマイクロソフトウインドウズシステムは、通
常は、その文字数の半分以下のキャラクタセットしか有
していない。UNIXシステムのデータベースサーバか
らのフィールド名を例えばマイクロソフトウインドウズ
システムで表すべき場合には、幾つかの文字が変換にお
いて失われる。これらの変換不能な文字は、ウインドウ
ズアプリケーションに四角形又は他のデフォールト文字
として現れる。フィールド名をデータベースサーバに変
換して戻した場合は、データベースサーバがデフォール
ト文字を明確に分析することができず、従って、フィー
ルド文字はもはや確認することができない。
【0005】同様の問題が照合(分類順序)でも生じ
る。というのは、ストリングを分類するルールがキャラ
クタセットで異なるからである。例えば、あるキャラク
タセッ
【0006】
【外1】 をNの後に)配置するが、別のキャラクタセットは、ア
クセントのある文字をア
【0007】
【外2】
【0008】
【発明の構成】一般に、本発明は、その1つの観点にお
いて、データを記憶するためのユーザバッファ、ユーザ
のローカル性を表すユーザローカル性情報、データを記
憶するためのソースバッファ、ソースのローカル性を表
すソースローカル性情報、及びユーザバッファ及びソー
スバッファに記憶されたデータの状態を指示するための
状態フラグをコンピュータがメモリに維持するようにさ
せる命令と;新たなデータがユーザバッファに記憶され
るときにソースデータが非カレントでありそしてユーザ
データがカレントであることを指示するために状態フラ
グをセットする命令と;新たなデータがソースバッファ
に記憶されるときにユーザデータが非カレントでありそ
してソースデータがカレントであることを指示するため
に状態フラグをセットする命令と;ユーザローカル性情
報及びソースローカル性情報を用いて、ソースデータが
カレントでそしてユーザデータが非カレントである場合
にソースバッファのデータを変換しそしてその変換され
たデータをユーザバッファに記憶し、次いで、ユーザデ
ータ及びソースデータの両方がカレントであることを指
示するために状態フラグをセットする命令と;ユーザロ
ーカル性情報及びソースローカル性情報を用いて、ユー
ザデータがカレントでそしてソースデータが非カレント
である場合にユーザバッファのデータを変換しそしてそ
の変換されたデータをソースバッファに記憶し、次い
で、ソースデータ及びユーザデータの両方がカレントで
あることを指示するために状態フラグをセットする命令
と;ソースバッファ及びユーザバッファの両方をデータ
項目のインスタンスとして同時に維持する命令とを有す
るプログラムされたコンピュータ読み取り可能な媒体を
特徴とする。
【0009】本発明は、その実施形態において、次のよ
うな特徴を含む。上記命令は、データを記憶するための
第2のバッファ、第2のローカル性を表す第2のローカ
ル性情報、及び第2のバッファに記憶されたデータの状
態を指示するための状態フラグをコンピュータがメモリ
に維持するようにする命令も含む。又、上記命令は、デ
ータに対するユーザ側インターフェイスを形成するため
にコンピュータプログラムルーチンの第1セットを与
え;データに対するソース側インターフェイスを形成す
るためにコンピュータプログラムルーチンの第2セット
を与え;データ項目を読み取る要求に応答し、その要求
がユーザ側インターフェイスからのユーザ側要求である
場合にはユーザバッファから読み取りを行い、そしてそ
の要求がソース側インターフェイスからのソース側要求
である場合にはソースバッファから読み取りを行い;そ
の要求がユーザ側要求であって且つユーザデータが非カ
レントである場合にはソースバッファのデータを変換し
てユーザバッファに記憶させ;そしてその要求がソース
側要求であって且つソースデータが非カレントである場
合にはユーザバッファのデータを変換してソースバッフ
ァに記憶させるようにコンピュータに行わせる命令も含
む。
【0010】一般的に、本発明は、その別の観点におい
て、データ項目をユーザプログラム及びソースプログラ
ムに使用できるようにするためのコンピュータで実施さ
れる方法を特徴とする。この方法は、ユーザプログラム
が読み取り又は書き込みのためにデータ項目へのアクセ
スを得るためのユーザインターフェイスを用意し;ソー
スプログラムが読み取り又は書き込みのためにデータ項
目へのアクセスを得るためのソースインターフェイスを
用意し;ユーザのローカル性を与え;ソースのローカル
性を与え;データ項目を記憶するためのユーザバッファ
を用意し;データ項目を記憶するためのソースバッファ
を用意し;ユーザバッファ内容及びソースバッファ内容
の状態を記憶するように状態メモリを維持し;新たなデ
ータがユーザインターフェイスを経てユーザバッファに
記憶されるときにソースバッファの状態を非カレントに
そしてユーザバッファの状態をカレントにセットし;新
たなデータがソースインターフェイスを経てソースバッ
ファに記憶されるときにユーザバッファの状態を非カレ
ントにそしてソースバッファの状態をカレントにセット
し;ユーザバッファの状態がカレントである場合にユー
ザバッファの内容を読み取り、そしてユーザバッファの
状態が非カレントである場合にはソースバッファの内容
をソースのローカル性からユーザのローカル性へ変換し
てその変換された内容をユーザバッファが読み取られる
前にユーザバッファに記憶することにより、データ項目
を読み取るためのユーザインターフェイスからの要求を
満足し;そしてソースバッファの状態がカレントである
場合にソースバッファの内容を読み取り、そしてソース
バッファの状態が非カレントである場合にはユーザバッ
ファの内容をユーザのローカル性からソースのローカル
性へ変換してその変換された内容をソースバッファが読
み取られる前にソースバッファに記憶することにより、
データ項目を読み取るためのソースインターフェイスか
らの要求を満足するという段階を備えている。
【0011】本発明の実施は次の特徴を含む。上記方法
において、ソースプログラムはサーバであり、そしてユ
ーザプログラムはサーバに対するクライエントである。
上記方法において、ソースプログラムは、データベース
を管理するデータベースサーバ及びデータベースへのア
クセス要求を取り扱うデータベースエンジンであっても
よい。上記方法において、データベースは、データベー
スエンジンを含む関係(リレーショナル)データベース
マネージメントシステムにより管理される関係データベ
ースであってもよい。上記方法において、データ項目
は、データベースの記録のフィールド名であってもよ
い。上記方法において、データ項目のローカル性は、デ
ータソースにおいてデータベースのフィールドに対して
定められたローカル性であってもよい。上記方法におい
て、データ項目のローカル性は、データソースにおいて
データベースに対して定められたローカル性であっても
よい。上記方法において、データ項目のローカル性は、
データソースに対して定められたローカル性である。上
記方法において、データソースは、分散したオブジェク
トの集合であってもよく、そしてデータ項目は、分散し
たオブジェクトの1つにあってもよい。上記方法におい
て、データ項目は、OLEオブジェクトであってもよ
い。
【0012】又、本発明は、その実施形態において、第
2のプログラムが読み取り又は書き込みのためにデータ
項目へのアクセスを得るための第2のインターフェイス
を用意し;第2のローカル性を与え;データ項目を記憶
するための第2のバッファを用意し;第2のバッファ内
容の状態を記憶するように状態メモリを維持し;新たな
データがユーザインターフェイスを経てユーザバッファ
に記憶されるか又はソースインターフェイスを経てソー
スバッファに記憶されるときは第2バッファの状態を非
カレントにセットし;新たなデータが第2インターフェ
イスを経て第2バッファに記憶されるときはユーザバッ
ファの状態を非カレントに、ソースバッファを非カレン
トに、そして第2バッファをカレントにセットし;そし
てソースバッファの状態がカレントである場合は第2バ
ッファの内容を読み取り、そして第2バッファの状態が
非カレントである場合はユーザバッファの内容をユーザ
のローカル性から又はソースバッファの内容をソースの
ローカル性から第2のローカル性へ変換し、この変換さ
れた内容を第2バッファが読み取られる前に第2バッフ
ァに記憶することにより、データ項目を読み取るための
第2インターフェイスからの要求を満足するという段階
を備えている。
【0013】本発明の効果は、とりわけ次の通りであ
る。本発明は、別のキャラクタセットを用いるもののよ
うな異なるローカル性をもつプログラム及びシステム間
を適合できるようにする。本発明は、例えば、更新状態
において文字が失われるという問題を低減する。又、本
発明は、融通性のあるデータ操作を可能にする。
【0014】
【発明の実施の形態】以下、添付図面を参照し、本発明
の好ましい実施形態を詳細に説明する。図1を参照すれ
ば、コンピュータ80上で実行されるユーザプログラム
102は、中間要素を介してデータベース112と通信
する。特に、ユーザプログラム102は、ユーザ側イン
ターフェイス142を経てクライエント側インターフェ
イスサービスを与える多値ストリングクラスで実施され
るクライエントプロセスと通信する。コンピュータ80
は、データベースエンジン110及びデータベースイン
ターフェイス160を経てデータベース112と通信す
る。
【0015】データベース112から記録が要求される
と、データベースエンジン110によりデータベースか
ら記録が検索される。通常、接続層108が存在し、デ
ータベースエンジン110及びコンピュータ80は、こ
の接続層108を経て通信する。例えば、オンラインワ
ークグループサーバv.7.12データベースエンジン
では、インフォーミックスI/コネクトランタイムライ
ブラリーであるデータベースが、インフォーミックスリ
レーショナルオブジェクトマネージャーv.1.0のよ
うなアプリケーションプログラムと通信することがで
き、これらは全てカリフォルニア州、メンロパークのイ
ンフォーミックスソフトウェア社から入手できるもので
ある。
【0016】図2を参照すれば、ストリングであるデー
タ項目を有する記録がデータベースから読み取られる
(ステップ202)。説明を簡単化するため、記録は、
タイプキャラクタストリングの単一データ項目を有する
ものと仮定する。ストリングデータは、最初に、データ
ベースストリングバッファ116に記憶され(ステップ
204)、そしてデータベースフラグ「カレント」が
「真」にセットされる(ステップ206)。データベー
スのストリングバッファ116は、多値局所化ストリン
グバッファの一部分である2つのバッファの一方であ
る。他方のバッファはユーザストリングバッファ114
である。データベースフラグカレント及びユーザフラグ
カレントは、「フラグ」190として記憶される。
【0017】図3を参照すれば、ユーザ又はクライエン
トがデータを要求するときは(ステップ201)、クラ
イエント又はユーザ側インターフェイス142を経て行
い、これは、データベースストリングバッファ116か
らではなくユーザストリングバッファ114からデータ
を得る。ユーザストリングバッファ114の内容は、ユ
ーザフラグ「カレント」が「真」の場合に返送される
(ステップ209)。
【0018】例えば、編集動作中に、データベース項目
をユーザ102に与えるべき場合には、以下に述べるよ
うに、ストリングが変換される(ステップ212)。
【0019】コンバータ118は、データベースストリ
ングを、データベースにおけるその形態から、ユーザ1
02に適した形態へと変換する。通常、これは、簡単な
キャラクタセット変換である。この変換は、使用及びデ
ータ項目の両方のローカル性に基づく。「ローカル性(l
ocale)」とは、文字、分類、日時、通貨、番号等に対す
る国又は言語に特有の慣習に関する情報の集合を意味す
る。データ項目のローカル性は、一般に、その発生ソー
ス、データベース又はデータベースサーバのローカル性
であるが、データベースのフィールドに特定に関連して
いてもよく、例えば、関係データベースにおいては、ロ
ーカル性がカラムに関連している。データベースのロー
カル性情報は、データベースのローカル性バッファ12
4に記憶され、そしてユーザのローカル性情報は、ユー
ザのローカル性バッファ120に記憶される。ユーザの
ローカル性情報は、例えば、コンバータ118のような
コンバータモジュールに内在してもよい。
【0020】コンバータ18は、ローカル性情報を使用
し(ステップ209及び210)、例えば、変換ルック
アップテーブルを用いることにより従来の方法で変換を
行う(ステップ212)。
【0021】変換により生じたストリングは、ユーザバ
ッファ114に記憶され、「ユーザストリング」と称さ
れる(ステップ214)。変換が行われたデータベース
ストリングは、データベースストリングバッファ116
に元の形態で残される。
【0022】この段階において、ユーザストリング及び
データベースストリングの両方は、データベースからの
未編集のデータを表し、ユーザストリングは変換されて
はいるが、未編集のままである。ユーザフラグ「カレン
ト」は、対応するデータベースフラグと一致するように
「真」にセットされる(ステップ216)。
【0023】図4を参照すれば、異なるデータ項目、こ
こに示す例では、異なるストリングが、ユーザ側インタ
ーフェイスを経てユーザストリングバッファ114へ送
られたときに、データベースフラグ「カレント」は、
「偽」にセットされ、データベースストリングがデータ
項目のカレント状態をもはや表さないことを示す。
【0024】図5を参照すれば、データベース側インタ
ーフェイスを経てデータベースにデータを書き戻すべき
ときには、ソース又はデータベースストリングバッファ
116に記憶されたデータベースストリングが与えられ
る(ステップ426)。データベースストリングフラグ
「カレント」が「真」である場合には(ステップ42
8)、データベースストリングが直接与えられる。デー
タベースストリングフラグが「偽」である場合には、ユ
ーザストリングが最初にユーザのローカル性からデータ
ベース又はソースのローカル性に変換される(ステップ
420)。この変換の結果は、データベースストリング
バッファ116にデータベースストリングとして記憶さ
れ(ステップ422)、そしてデータベースストリング
フラグは、「偽」にセットされる(ステップ424)。
両方の場合に、データが必要とされるまで変換を遅延す
ることができる。
【0025】ある場合には、ソースローカル性のあるキ
ャラクタがユーザローカル性に対応キャラクタをもたな
いか或いはそれとは逆の場合に、完全に正しい変換を実
行できないことがある。このため、結局のところ、ユー
ザストリングからデータベースストリングへの(或いは
それとは逆の)変換を呼び出して、両バッファをカレン
ト状態にし(それらのフラグ「カレント」が「真」にセ
ットされる)、そしてフラグ190の変換状態フラグを
セットして、エラー又は例外的状態が生じたかどうか指
示し、もしそうであれば、データのどこに生じたか指示
する(ステップ416)ためのルーチンが設けられる。
これらのルーチン及びフラグは、例えば文字の変換結果
が失われたかどうか決定するために何時でも使用でき
る。
【0026】異なるローカル性から検索され及びそこに
送られるデータの問題は、データベースのアプリケーシ
ョンに限定されない。例えば、データ項目は、2つ以上
のローカル性を有する2つ以上のピアプロセスにより交
換することができる。図1に戻ると、データは、第2の
接続層208からインターフェイス164を経て読み取
られる。同じユーザバッファ114を使用してもよい
が、異なる第2のソースバッファ156が読み取られた
データを保持し、そして第2のソースローカル性158
がローカル性情報を保持する。このように、データは、
1つのソースから読み取られ、ユーザにより編集され、
そしてそれ自身のローカル性を有する第2のソースへ書
き込まれる。データ項目は、OLE(マイクロソフト)
又はOpen Doc(アップルコンピュータ)オブジ
ェクトのような分散されたオブジェクトに存在してもよ
い。OLEオブジェクトは、通常、単にOLEオブジェ
クトであることによりローカル性を有し、そしてオブジ
ェクト又はオブジェクトのデータ項目には、より多くの
ローカル性情報が関連してもよい。更に、ユーザプログ
ラム又はプロセスは、それ自身のローカル性で分散オブ
ジェクトにおいて見つけることもできる。
【0027】上記のシステム及び方法は、以下に述べる
ように、マイクロソフト・ファンデーション・クラス
(MFC)に規定されたオブジェクトクラスのフレーム
ワークで実施することができる。ここでは、クライエン
ト/サーバデータベースシステムについて特定の実施を
説明する。
【0028】クラスLCStringを定義する。これ
は、上記のユーザデータバッファとして働くMFC C
Stringを含む。LCStringのデータメンバ
ーの1つは、クラスLCSDataの可変長さ構造体に
対するポインタである。LCSData構造体は、次の
データメンバーを含む。 (1)m DBDataは、データベースストリングに
対応し、DBLocaleキャラクタセットにおいてデ
ータベースエンジンから受け取ったストリングを記憶す
るのに使用される。m DBDataは、キャラクタが
多バイトフォーマットであることを示す。 (2)m ClientStringは、Client
Localeキャラクタセットのユーザストリングを記
憶するのに使用される。
【0029】(3)M BDLocaleは、データベ
ースのローカル性情報をアクセスするために特定のロー
カル性に対し独特の識別子の値を記憶するのに使用され
る。キーとなる値は、タイプGLocaleKeyであ
る。 (4)m fCurrentは、どんな情報がカレント
であるかを指示するフラグを記憶するのに使用される。
fCurrentは、ユーザストリングフラグLC
StrC又はデータベースストリングフラグLCStr
Dに対応する。 (5)m DBDataLengthは、論理キャラク
タにおけるm DBDataの長さを記憶するのに使用
される。
【0030】(6)m AllocLengthは、m
DBDataの割り当てられた長さ(バイト)を記憶
するのに使用される。 (7)m DBByteLengthは、実際に記憶さ
れるときのm DBDataの長さ(バイト)を記憶す
るのに使用される。この値は、memcpyのようなフ
ァンクションを用いてストリングをコピーするのに適し
ている。 (8)m bCumLossToDB及びm bCum
LossFromDBは、フラグがクリアされた以前の
発生時から変換ロスが生じたかどうかを指示するフラグ
を記憶するのに使用される。これらフラグは、変換の方
向に特定のものであり、指定がLCStringを伴う
か又は指定がコピーコンストラクタであった場合に指定
にわたって保持される。
【0031】(9)tcharBuf及びtcharB
ufSizeは、変換動作中に使用されるバッファであ
り、必要に応じて成長することができる。これらバッフ
ァを使用するファンクションは、マルチスレッドアプリ
ケーションに使用するために識別された厳密な領域を有
していなければならない。 (10)m nRefCountは、LCString
の参照回数のカウントを記憶するのに使用される。LC
Stringに対するコピー及び指定動作に対して増加
される。通常の減少は、デストラクタにおいて生じる。
0まで減少されると、エントリーが削除される。ストリ
ングがある方法により変更される場合には、その変更さ
れたストリングに対して新たなm nRefCount
が形成され、古いストリングのm nRefCount
は減少される。
【0032】(11)dbwcharBuf、dbwc
harBufSize、mbcharBuf及びmbc
harBufSizeは、UNICODEがクライエン
トにおいてイネーブルされた場合に使用されるバッファ
である。これらは、最初に、割り当てられず、必要に応
じて成長される。
【0033】クラスGLocaleは、ローカル性情報
に対して定義される。GLocaleMgrは、GLo
caleをマネージメントするためのクラスである。特
定のローカル性は、ローカル性ストリング又はGLoc
aleKey値により選択することができる。デフォー
ルトの場合には、静的なユーザローカル性Client
Locale及びデータベースローカル性DBLoca
leの2つのローカル性がある。データベース又は他の
ソースへの多数の同時接続は、ソース側に2つ以上のロ
ーカル性を生じる。
【0034】クラスLCStringは、次のコンスト
ラクタを有する。 (1)LCString () (2)LCString (const CString& stringSrc) (3)LCString (TCHAR ch, int nRepeat=1) (4)LCString (LPCSTR lpsz) (5)LCString (LPCWSTR lpsz) (6)LCString (LPCTSTR lpch, int nLength) (7)LCString (const unsigned cha*psz) 以上のコンストラクタ(1)−(7)は、同じ名前のC
Stringコンストラクタに対応し、デフォールトデ
ータベース(DB)及びクライエントローカル性キー値
を使用する。
【0035】(8)LCString (const LCString& String
Src)は、同じカレントフラグ及びローカル性でLCSt
ringの厳密なローカル性コピーを行う。 (9)LCString (GLocaleKey locKey, const gl mcha
r t* psz) は、サーバからのデータを取り扱うための
ものである。 (10)LCString (LPCTSTR gl, const gl mchar t*
psz) は、適切なGLocaleKeyが使用できない
場合にエンジンからのデータを取り扱うためのものであ
る。 (11)LCString (LCurrency& value, LPCTSTR fmt) (12)LCString (LNumber& value, LPCTSTR fmt) (13)LCString (LDataTime& value, LPCTSTR fmt) (14)LCString (LCurrency& value, const LCString
& fmt) (15)LCString (LNumber& value, const LCString&
fmt) (16)LCString (LDataTime& value, const LCString
& fmt) 以上のコンストラクタ(11)−(16)は、アーギュ
メントに含まれたDBLocaleのフォーマット情報
を用いて、アーギュメントと同じローカル性におけるス
トリングを形成する。
【0036】次の属性及び方法は、クラスLCStri
ngに対して定義される。int GetLength () constは、
クライエント側のストリングの長さをTCHAR単位で
返送する。int DBGetLength () constは、DBLoca
leストリングの長さを論理キャラクタカウントで返送
する。BOOL IsEmpty () const は、ストリングの長さが
0である場合に「真」を返送する。void Empty () は、
ストリングを空(即ち、長さ0)にする。TCHAR GetAt
(int nIndex) const は、TCHARオフセットnIn
dexのTCHARを返送する。
【0037】void SetAt(int nIndex, TCHAR ch)は、T
CHARオフセットnIndexのTCHARをchに
セットする。LCString DBGetAt(int nIndex) constは、
DBLocaleキャラクタセット特性を用いてDB対
応ストリングの論理キャラクタオフセットnIndex
において論理キャラクタを返送する。void DBSetAt(int
nIndex, const LCString& ch)は、論理キャラクタオフ
セットnIndexの論理キャラクタをchにセットす
る。ストリングのバイト長さは、多バイト状態において
変更することができる。TCHAR operator [] (int Inde
x) const は、GetAt()と同じである。operator
LPCTSTR () const は、CString内部ストリング
バッファへのアクセスを与えるキャストオペレータであ
る。
【0038】operator const CString*() は、内部CS
tringへのアクセスを与えるキャストオペレータで
あるが、これは、リードオンリアクセスである。
【0039】クラスLCStringに対して定義され
たオーバーロード指定は、次の通りである。 (1)const LCString& operator=(const LCString& st
ringSrc) (2)const LCString& operator=(const CString& str
ingSrc) (3)const LCString& operator=(TCHAR ch) (4)const LCString& operator=(char ch) (5)const LCString& operator=(LPCSTR lpsz) (6)const LCString& operator=(LPCWSTR lpsz) (7)const LCString& operator=(const unsigned cha
r* psz)
【0040】クラスLCStringに対して定義され
たオーバーロードストリング連結ファンクションは、次
の通りであり、これは、第2のオペレータを第1のオペ
ランドに連結する。 (1)const LCString& operator+=(const CString& st
ring) (2)const LCString& operator+=(const LCString& s
tring) (3)const LCString& operator+=(TCHAR ch) (4)const LCString& operator+=(char ch) (5)const LCString& operator+=(LPCTSTR lpsz)
【0041】次のオペレーションは、2つのストリング
を連結し、新たなLCStringインスタンスを形成
する。 (1)friend LCString AFXAPI operator+(const LCStr
ing& s1, constCString& s2) (2)friend LCString AFXAPI operator+(const CStri
ng& s1, constLCString& s2) (3)friend LCString AFXAPI operator+(const LCStr
ing& s1, constLCString& s2) (4)friend LCString AFXAPI operator+(const LCStr
ing& s1, TCHAR ch) (5)friend LCString AFXAPI operator+(TCHAR ch, c
onst LCString& s1) (6)friend LCString AFXAPI operator+(const LCStr
ing& s1, char ch) (7)friend LCString AFXAPI operator+(char ch, co
nst LCString& s1) (8)friend LCString AFXAPI operator+(const LCStr
ing& s1, LPCTSTRlpsz) (9)friend LCString AFXAPI operator+(LPCTSTR lps
z, const LCString&s1) 上記オペレーションの結果は、クライエント側又はデー
タベース側のいずれかで有効である。DBLocale
は、次のルールに基づいてセットされる。
【0042】各ストリングのDBLocaleが同じキ
ャラクタセットを有する場合には、2つの可能性が存在
する。第1に、いずれかのアーギュメントがDBLoc
aleにおいて有効である場合には、その結果がDBL
ocaleにおいて有効でありそしてDBLocale
は、第1のアーギュメントのローカル性である。第2
に、いずれのアーギュメントもDBLocaleにおい
て有効でない(即ち、ClientLocaleに対し
てのみ有効である)場合には、その結果がClient
Localeにおいて有効であるが、DBLocale
は、第1のアーギュメントのローカル性である。
【0043】DBLocaleが同じキャラクタセット
値をもたない場合には、3つの可能性が存在する。第1
に、両方のアーギュメントがDBLocale側で有効
な場合には、その結果がDBLocale側で有効であ
り、その結果、DBLocaleは、第1のアーギュメ
ントのローカル性となる。第2のアーギュメントは、先
ず、ClientLocaleキャラクタセットに変換
され、次いで、そこからDBLocaleキャラクタセ
ットに変換される。
【0044】第2に、DBLocale側で1つのアー
ギュメントのみが有効である場合には、その結果がDB
Locale側で有効となり、その結果、DBLoca
leは、DBLocale側で有効であったストリング
をもつものとなる(第1のアーギュメントであるか第2
のアーギュメントであるかに係わりなく)。
【0045】第2のケースは、SQLステートメントを
形成する際に一般的に遭遇する場合である。SQLシン
タックスは、ファイルのようなClientLocal
eソースからしばしば受け取られ、ClientLoc
aleキャラクタセットに依然存在する。第1の挿入
は、おそらく、局所化されたサーバ名、テーブル名、カ
ラム名又はテキストである。これは、しばしばデータベ
ースサーバから受け取られ、そしてDBLocaleに
おいて依然有効である。その結果は、名前のローカル性
において有効であり、キャラクタのロスは生じない。
【0046】第3に、DBLocaleにおいていずれ
のアーギュメントも有効でない場合には、その結果がC
lientLocaleにおいて有効となり、DBLo
caleは、第1アーギュメントのローカル性となる。
【0047】1つのアーギュメントがLCString
でない場合には(通常は、TCHAR、CString
&又はLPCTSTR)、その結果がLCString
アーギュメントのDBLocale側で有効となり、D
BLocaleはLCStringアーギュメントから
得られる。
【0048】ストリング比較ファンクションは、次の通
りである。Compare(const LPCTSTR lpsz) const は、コ
ードポイントに基づくクライエント側のバージョンを比
較する。DBCompare(const LCString& s2) const は、コ
ードポイントに基づくDB側のバージョンを比較する。
CompareNoCase(LPCTSTR lpsz) const は、全てのキャラ
クタがClientLocaleに基づき小文字に変換
された後にコードポイントに基づくクライエント側のバ
ージョンを比較する。DBCompareNoCase(const LCString
& s2) const は、全てのキャラクタがDBLocale
に基づき小文字に変換された後にコードポイントに基づ
くDB側のバージョンを比較する。
【0049】Collate(LPCTSTR lpsz) const は、Cli
entLocale照合分類に基づきクライエント側の
バージョンを比較する。これは、たとえ全てのキャラク
タが同じであっても、エンジンからの異なる順序で分類
されてもよい。DBCollate(const LCString& s2) const
は、GLS(インフォーミックス社のGLSライブラリ
ー)アルゴリズムを用いてDBLocale照合分類に
基づきDB側のバージョンを比較する。これは、DBサ
ーバとの一貫性が要求されるときに使用しなければなら
ない。
【0050】簡単なサブストリング抽出ファンクション
は、次の通りである。LCString Mid(int nFirst, int n
Count) constは、クライエント側のバージョンにおいて
TCHARオフセットnFirstで始めてnCoun
t TCHARを抽出する。nCountが存在しない
場合には、ストリングの残り部分を取り出す。LCString
DBMid(int nFirst, int nCount) constは、DB側バー
ジョンにおいて論理キャラクタオフセットnFirst
で始めてnCount論理キャラクタを抽出する。nC
ountが存在しない場合には、ストリングの残り部分
を取り出す。LCString Left(int nCount) const は、ク
ライエント側バージョンで始めてnCount TCH
ARを抽出する。MBCS状態においては、これは、ス
トリングの終わりに部分的キャラクタをチェックしな
い。
【0051】LCString DBLeft(int nCount) const は、
DB側バージョンの始めにnCount論理キャラクタ
を抽出する。LCString Right(int nCount) constは、ク
ライエント側バージョンの最後のnCount TCH
ARを抽出する。LCString DBRight(int nCount) const
は、DB側バージョンの最後のnCount論理キャラ
クタを抽出する。LCString SpanIncluding (LPCTSTR lp
sz) const は、lpszのキャラクタに合致するクライ
エント側ストリングの始めに見つかった全てのキャラク
タを含むストリングを返送する。第1のキャラクタがl
pszにない場合にはEmptyストリングを返送す
る。
【0052】LCString SpanExcluding (LPCTSTR lpsz)
const は、lpszのキャラクタに合致しないクライエ
ント側ストリングの始めに見つかった全てのキャラクタ
を含むストリングを返送する。第1のキャラクタがlp
szのキャラクタに合致する場合にはEmptyストリ
ングを返送する。
【0053】変換ファンクションは、次の通りである。
void MakeUpper () は、クライエント側バージョンの全
てのキャラクタを大文字にする。void DBMakeUpper ()
は、DB側バージョンの全てのキャラクタをDBLoc
aleに基づき大文字にする。void MakeLower () は、
クライエント側バージョンの全てのキャラクタを小文字
にする。void DBMakeLower () は、DB側バージョンの
全てのキャラクタをDBLocaleに基づき小文字に
する。void MakeReverse () は、クライエント側ストリ
ングの論理キャラクタの順序を逆転する。
【0054】void DBMakeReverse () は、DB側ストリ
ングの論理キャラクタの順序を逆転する。
【0055】ホワイトスペース削除ファンクションは、
次の通りである。void TrimRight () は、クライエント
側バージョンの全ての後続するホワイトスペースキャラ
クタを削除する。void DBTrimRight () は、DB側バー
ジョンの全ての後続するホワイトスペースキャラクタを
DBLocaleに基づき削除する。void TrimLeft ()
は、クライエント側バージョンの全ての先導するホワイ
トスペースキャラクタを削除する。void DBTrimLeft ()
は、DB側バージョンの全ての先導するホワイトスペー
スキャラクタをDBLocaleに基づき削除する。
【0056】サーチファンクションは、次の通りであ
る。Find(TCHAR ch) const及びFind(LPCTSTR lpsz) con
stは、クライエント側バージョン内におけるch又はl
pszの最初の発生のTCHARインデックスを見つけ
る。DBFind(TCHAR ch) const、DBFind(LPCTSTR lpsz) c
onst、及びDBFind(const LCString& lc) constは、DB
側バージョン内におけるアーギュメントの最初の発生の
論理キャラクタインデックスを見つける。ReverseFind
(TCHAR ch) const は、クライエント側バージョン内に
おけるchの最後の発生のTCHARインデックスを見
つける。DBReverseFind(TCHAR ch) const 、及びDBReve
rseFind(const LCString& lc)const は、DB側バージ
ョン内におけるアーギュメントの最後の発生の論理キャ
ラクタインデックスを見つける。
【0057】FindOneOf(LPCTSTR lpsz) const は、lp
szの任意のキャラクタのクライエント側バージョンに
おける最初の発生を見つける。DBFindOneOf(LPCTSTR lp
sz) const 、及びDBFindOneOf(const LCString& lc)con
st は、アーギュメントの任意の論理キャラクタのDB
側バージョンにおける最初の発生を見つける。
【0058】次のものは、Cキャラクタアレーとしてス
トリング具現化バッファへのアクセスを与える。LPTSTR
GetBuffer(int nMinBufLength) は、クライエント側バ
ージョンに対する内部TCHARバッファのポインタを
得る。又、これは、バッファがnMinBufLeng
th TCHARを保持するに充分なサイズであるよう
に保証する。void ReleaseBuffer(int nNewLength=-1)
は、GetBuffer通話及び内部TCHARバッフ
ァの直接操作の後に内部変数を調整するのに使用され
る。nNewLengthが0以上の場合には、TCH
ARオフセットnNewLengthにTCHARナル
ターミネータが挿入される。
【0059】LPTSTR GetBufferSetLength(int nNewLeng
th) は、TCHARのnNewLengthに対して調
整された後にクライエント側バッファに対するポインタ
を返送する。void FreeExtra () は、クライエント側ス
トリングバッファに関連した余計なメモリを解放する。
LPSTR DBGetBuffer(int nMinBufLength)は、DB側バー
ジョンに対し内部バイトバッファへのポインタを得る。
又、これは、バッファがnMinBufLength論
理キャラクタを保持するに充分なサイズであるよう保証
する。void DBReleaseBuffer(int nNewLength=-1) は、
DBGetBuffer通話及び内部DBバッファの直
接操作の後に内部変数を調整するのに使用される。nN
ewLengthが0以上の場合には、論理キャラクタ
オフセットnNewLengthに論理キャラクタナル
ターミネータが挿入される。
【0060】LPSTR DBGetBufferSetLength(int nNewLen
gth)は、論理キャラクタにおいてnNewLength
に対して調整された後にDB側バッファへのポインタを
返送する。void DBFreeExtra () は、DB側ストリング
バッファに関連した余計なメモリを解放する。
【0061】次の方法も定義される。〜LCString ()
は、デストラクタである。int GetAllocLength () cons
t は、TCHARにおけるクライエント側バッファの長
さを得る。DBGetAllocLength () は、DB側バッファの
長さ(バイト)を得る。このサイズがバイト単位である
理由は、DBサーバにおけるキャラクタセットがクライ
エントマシンと同じ形式でないことがあるからである
(単一バイト、多バイト、ワイドキャラクタ)。BOOL C
umLossToDB () const 及びBOOL CumLossFromDB () は、
内部フラグがリセットされた最後のときから(又は最初
の形成から)変換中のキャラクタがロスした(1つのキ
ャラクタセットのキャラクタが別のキャラクタセットの
キャラクタに合致せず、従って、その場所に構成キャラ
クタが入れられる)場合に「真」を返送する。これらの
フラグは、LCStringの指定にわたって保存され
る(連結ではなく)と共に、コピーコンストラクタ全体
にわたって保存される。キャラクタのロスは、論理キャ
ラクタの数の変化を指すものではなく、意味の損失を指
す。というのは、元のストリングをもはや再構成できな
いからである。
【0062】void ResetCumLossToDB ()及びvoid Reset
CumLossFromDB ()は、フラグの内部状態をリセットする
(「偽」へ)。SetDBLocale(GLocaleKey Key) は、DB
Locale側をキーに調整する。手前のローカル性の
キャラクタセットがキーと同じでなく、そしてストリン
グがサーバ側でのみカレントである場合は、新たなロー
カル性が古いものに置き換わる前に、ストリングが最初
にクライエントローカル性に変換される。復帰値は、ア
ーギュメント(キー)である。
【0063】SetDBLocale(LPCTSTR loc)は、DBLoc
ale側をlocで定められたローカル性に調整する。
手前のローカル性のキャラクタセットがlocと同じで
なくそしてストリングがサーバ側でのみカレントである
場合には、新たなローカル性が古いものに置き換わる前
にストリングが先ずクライエントローカル性に変換され
る。復帰値は、もしうまくいけば、locに対して形成
されたGLocaleKeyとなる。ForceToDB ()は、
ストリングを強制的にDB側のカレントにする。このフ
ァンクションは、例外を与えるものではなく、例外を捕
らえるものであり、例外又は他の問題に遭遇した場合に
エラーコードを返送する。たとえ欠陥が返送されても有
効なデータはある(おそらく空のストリングのみ)。こ
のファンクションは、特に、GetLength()の
ような簡単な問合せ方法が存在する場合に、ある例外的
なケースを回避するために使用できる。返送コードは次
の通りである。
【0064】(1)LC FORCESUCCESS: 首尾良い返送。
ストリングが首尾良く変換されるか又は既にDB側のカ
レントであり、変換に対するデータロスフラグ(いずれ
かの方向の)は現在セットされない。 (2)LC FORCEMEMORY:変換プロセス中にメモリエラー
に遭遇する。それによりDB側に生じるストリングは、
ゼロ長さのストリングであり、DBへの変換に対してデ
ータロスフラグがセットされる。 (3)LC FORCGLSCONVERSIONMISSING: 関連する2つの
キャラクタセットに対して変換は行われず、それらは同
じキャラクタセットではない。これは、GLSの部分が
インストールされず、環境変数が正しく設定されず、又
はこのセットの言語に対して単に何のサポートも現在使
用できないことを意味する。それによりDB側に生じる
ストリングは、ゼロ長さストリングであり、DBへの変
換に対してデータロスフラグがセットされる。
【0065】(4)LC FORCGLSCONVERSIONERROR: 変換
プロセス中に生じるエラー(データロスではない)。こ
の形式のエラーの主たる原因は、不当なキャラクタに遭
遇することである。その結果、DB側に生じるストリン
グは、ゼロ長さストリングとなり、DBへの変換に対し
てデータロスフラグがセットされる。 (5)LC FORCDATALOSSNOW:ストリングがこのファンク
ションにより変換されたが、変換中にあるデータが失わ
れた。実際の変換が行われそしてデータロスが生じた場
合にのみこの返送が与えられる。 (6)LC FORCDATALOSSPREVIOUS: ストリングが首尾良
く変換され、この変換に対してデータロスはなかった
が、累積データロスフラグが依然としてセットされてい
る。これは、ある手前のオペレーションがその手前のオ
ペレーションにおいてデータロスしたことを意味する。
これは、カレントストリングには適用してもしなくても
よい。
【0066】(7)LC FORCDATAPREVIOUSLOSS: ストリ
ングがDB側で既にカレントであるので変換が必要でな
い。しかしながら、4つのデータロスフラグの少なくと
も1つがセットされている。ロスは、カレントストリン
グの内容に関連する。
【0067】ForceToClient ()は、ストリングをクライ
エント側において強制的にカレントにする。このファン
クションは、例外を与えるものではなく、例外を捕らえ
るものであり、例外又は他の問題に遭遇した場合にエラ
ーコードを返送する。たとえ欠陥が返送されても有効な
データはある(おそらく空のストリングのみ)。このフ
ァンクションは、特に、GetLength()のよう
な簡単な問合せ方法が存在する場合に、ある例外的なケ
ースを回避するために使用できる。返送コードは次の通
りである。 (1)LC FORCESUCCESS: 首尾良い返送値。ストリング
が首尾良く変換されるか又は既にクライエント側におい
てカレントであり、変換に対するデータロスフラグ(い
ずれかの方向の)は現在セットされない。
【0068】(2)LC FORCEMEMORY:変換プロセス中に
メモリエラーに遭遇する。それによりクライエント側に
生じるストリングは、ゼロ長さのストリングであり、ク
ライエントへの変換に対してデータロスフラグがセット
される。 (3)LC FORCGLSCONVERSIONMISSING: 関連する2つの
キャラクタセットに対して変換は行われず、それらは同
じキャラクタセットではない。これは、GLSの部分が
インストールされず、環境変数が正しく設定されず、又
はこのセットの言語に対して単に何のサポートも現在使
用できないことを意味する。それによりクライエント側
に生じるストリングは、ゼロ長さストリングであり、ク
ライエントへの変換に対してデータロスフラグがセット
される。 (4)LC FORCGLSCONVERSIONERROR: 変換プロセス中に
生じるエラー(データロスではない)。この形式のエラ
ーの主たる原因は、不当なキャラクタに遭遇することで
ある。その結果、クライエント側のストリングは、ゼロ
長さストリングとなり、クライエントへの変換に対して
データロスフラグがセットされる。
【0069】(5)LC FORCDATALOSSNOW:ストリングが
このファンクションにより変換されたが、変換中にある
データが失われた。実際の変換が行われそしてデータロ
スが生じた場合にのみこの返送が与えられる。 (6)LC FORCDATALOSSPREVIOUS: ストリングが首尾良
く変換され、この変換に対してデータロスはなかった
が、累積データロスフラグが依然としてセットされてい
る。これは、ある手前のオペレーションがその手前のオ
ペレーションにおいてデータロスしたことを意味する。
これは、カレントストリングには適用してもしなくても
よい。 (7)LC FORCDATAPREVIOUSLOSS: ストリングがDB側
で既にカレントであるので変換が必要でない。しかしな
がら、4つのデータロスフラグの少なくとも1つがセッ
トされている。ロスは、カレントストリングの内容に関
連する。
【0070】上記方法とは異なり、UpdateC(BOOL NoExc
eptions=FALSE)及びUpdateDB(BOOLNoExceptions=FALSE)
は、ForceToClient 及びForceToDB をサポートする内
部の(保護された)方法であるが、新たなアーギュメン
トが追加されている。アーギュメントが「真」である場
合には、全ての例外(新たなものにより生じたメモリ例
外を含む)が捕らえられそして返送値に変換される。更
に、このルーチン内で検出されたエラーは、アーギュメ
ントが「真」の場合にエラー値を返送し、そしてアーギ
ュメントが「偽」の場合に例外を与える。実際の返送値
は、ForceToClient 及びForceToDB の返送値に合致す
る。
【0071】以下の方法は、エンジンファンクションと
同等のものを与える。DBSafeMid(int offset, int leng
th) const は、バイトベースのオフセット及び長さ値を
使用する(他の殆どの場合の論理キャラクタベースとは
対照的に)。いずれかのオフセット又は長さ値がストリ
ングの始め又は終わりに部分的な論理キャラクタを生じ
る場合には、部分的なキャラクタバイトがスペースキャ
ラクタ(’ ’)と置き換えられる。ストリングが「A
1A2B1B2C1C2」(即ち3つのマルチバイトキ
ャラクタ)である場合には、DBSafeMid(1,
4)が「B1B2」を返送する。添字は、マルチバイト
キャラクタのバイト記述を表す。
【0072】次のルーチンは、参照カウント能力を与え
ることができる。LockBuffer () は、CStringの
符号に合致し、有効なクライエントバッファのポインタ
を返送する。このコールは、LCStringのこのイ
ンスタンスに対し参照カウント動作をオフにする。これ
は、このインスタンスに対し内部データの個別のコピー
が作られる(このデータを探している他のインスタンス
がある場合に)ことを意味し、そしてロックされる間に
別のLCStringに対して指定/コピーされる場合
には、その行先インスタンスに対してデータの個別のコ
ピーが作られる(アンロック時の参照カウント動作とは
対照的に)。LockBuffer () は、ユーザがバッファを変
更し、従って、DBバッファの内容を無効化すると仮定
する。更に、DB側のカレント性を必要とするこのイン
スタンスに何らかのアクセスがなされた場合は、「アサ
ート」に失敗する。
【0073】LockDBBuffer () は、LockBufferと等価で
あるが、有効なDB側バッファに対するポインタを含ん
でいる。このコールは、LCStringのこのインス
タンスに対する参照カウント動作をオフにする。これ
は、内部データの個別のコピーがこのインスタンスに対
してなされる(このデータを探している他のインスタン
スがある場合に)ことを意味し、そしてロックされる間
に別のLCStringに対して指定/コピーされる場
合には、その行先インスタンスに対してデータの個別の
コピーが作られる(アンロック時の参照カウント動作と
は対照的に)。
【0074】LockDBBuffer () は、ユーザがバッファを
変更し、従って、クライエントバッファの内容を無効化
すると仮定する。更に、クライエント側のカレント性を
必要とするこのインスタンスに何らかのアクセスがなさ
れた場合は、「アサート」に失敗する。ReleaseBuffer
()は、LockBuffer () 又はLockDBBuffer () のいずれか
によりロックされたバッファをアンロックする。TCH
ARオフセット(インデックス)からストリングへのPr
evCharIndex(int index) constは、クライエント側スト
リングにおける手前の論理キャラクタのTCHARイン
デックスを決定する。首尾良い返送値は、ゼロ以上であ
って且つGetLength()未満である。インデッ
クスが0である(ストリングを始めを指す)か又はスト
リングの外側である場合には、返送値が−1となる。こ
れは、インデックスを変更するための「−−」演算子に
代わって使用しなければならない。
【0075】TCHARオフセット(インデックス)か
らクライエント側ストリングへのGetCharValue(int ind
ex) const は、その位置における論理キャラクタ値を返
送する。首尾良い返送値は、0≦返送値≦UCHAR
MAX(ほとんどのマイクロソフトの場合に255又は
65536)となる。返送値は、ストリングマーカーの
終わり(==GetLength() )を指す場合に0となる。イン
デックスがストリングの外側の場合には、返送値が−1
となる。
【0076】次のファンクションの各々は、TCHAR
オフセット(nIndex)における論理キャラクタを
テストする。各ファンクションは、論理キャラクタが特
徴をもつ場合には「真」(1)を返送する。キャラクタ
が特徴をもたないか又はそのストリングに対するインデ
ックス値の範囲を外れている場合には、「偽」(0)を
返送する。 (1)IsAlnum(int nIndex) const (2)IsAlpha(int nIndex) const (3)IsBlank(int nIndex) const (4)IsControl(int nIndex) const (5)IsDigit(int nIndex) const (6)IsGraph(int nIndex) const
【0077】次の方法は、例外の取り扱いをサポートす
る。GLocaleMgr::Init(void(*))(int, LPCTSTR, LPCTST
R)=DoExcept)は、「アプリケーションで定められた」例
外ハンドラーをインストールし、次いで、GLocal
eMgrデータを初期化する。このファンクションは、
DLLのLoadLibraryの直後にコールされね
ばならない。アーギュメントは、以下のデフォールトフ
ァンクションに対するアプリケーション置き換えであ
る。これは、エラーのカスタム処理を行えるようにす
る。void DoExcept(int error, LPCTSTR msg, LPCTSTR
arg)は、LCStringDLLに対するデフォールト
「ユーザ例外」ハンドラーである。これは、メッセージ
ボックスを表示し、次いで、CUserExcepti
onを与える。いかなる置き換えも、アーギュメントを
何らかの仕方で(どこかに記憶する)処理しそして何ら
かの種類の例外を与えることができる(もし必要であれ
ば、エラー数及びメッセージを含む多数の特殊な例外を
もつことができる)。
【0078】LCStringを使用するために、GL
ocaleMgrを、サーバへの接続を行う前にデフォ
ールトローカル性と共に設定しなければならない。更
に、各付加的なサーバのローカル性を、接続の前にGL
ocaleMgr::GLAddReferenceと
共に入力しなければならず、そしてGLocaleKe
yを、LCStringの形成に使用するために記憶し
なければならない。
【0079】接続の直後にカラム(フィールド)ごとに
ローカル性を有するデータベースの場合には、付加的な
ローカル性情報を収集しそしてGLocaleMgrに
挿入し、それにより生じるGLocaleKeyを記憶
しなければならない。
【0080】接続の前にDBLocaleが分からない
場合には、次の手順を使用することができる。デフォー
ルトDBLocaleは、クライエントのローカル性
(又は別のデータベースに関連したもののような所望の
任意のローカル性)と同じにセットすることができる。
データベースは、オープンしていて、ローカル性情報を
決定するために問い合わせされ、そしてDBLocal
eを適切に設定することができる。これを行うために転
送される全ての初期情報は、全てのキャラクタセットに
共通で且つ同じ基本的な位置にある7ビットのASCI
Iセクションに限定される。
【0081】LCStringを形成する1つの方法
は、「locKey」がGLocaleKeyであり、
そして「buffer」が「char *」変数である
ような「new LCString(locKey,b
uffer)」である。バッファは、これに対してゼロ
ターミネータをもたねばならない。これが固定のキャラ
クタフィールドである場合には、これにターミネータを
もつ余裕を有していなければならないか、又はゼロター
ミネータを含むに充分な大きさのバッファへ移動しなけ
ればならない。このバッファは、データベースサーバか
らの全ての転送が多バイトフォーマットであるので、キ
ャラクタに基づくものとなる。
【0082】データベースにデータを書き込むために、
DBGetBuffer()及びDBGetByt
e()を用いて、サーバへコピーして戻すためのキャラ
クタがアクセスされる。これらの方法は、常に、サーバ
への転送に予想されるchar*多バイトフォーマット
にストリングを有する。パッディングが行われる場合
は、バッファ方法がコールされる前に行われる(例え
ば、固定キャラクタに対し)。
【0083】データベースの記録においてフィールドを
編集するために、LCStringを用いる実施は、次
の通りである。m DBDataは、データベースエン
ジン110から受け取られ、そしてデータベースのスト
リングバッファ116に記憶される。ユーザキャラクタ
セットに対して変換が必要とされる場合には、コンバー
タ118は、m DBData及びGLocaleから
のローカル性情報を用いて変換を実行する(ステップ2
12)。GLocaleは、GLocaleKey m
DBDataを経て得ることができる。m DBDa
taは、m DBLocaleへのポインタである。G
LocaleKeyは、GLocaleMgrにおいて
GLocale情報をアクセスするためのキー値を表
す。GLocaleMgrは、ユーザのローカル性を表
す静的な要素である。データ要素tcharBufは、
変換中にバッファとして使用される。
【0084】変換結果は、ユーザストリングバッファ1
14にm ClientStringとして入れられ
る。m DBDataは、不変のままである。次いで、
ユーザは、ユーザストリングバッファ114に記憶され
たm ClientStringを変更、修正、又は他
の方法で編集することができる。このような編集が行わ
れる場合には、それにより生じるストリングが指定オペ
レーションを経てLCStringへ戻される。ユーザ
フラグLCStrCは、依然として「真」にセットさ
れ、一方、データベースフラグLCStrDは、「偽」
にセットされる。記録は、データベースに返送される。
これは「更新」オペレーションと称される。このオペレ
ーションは、通常は、適当なツールを経て「更新」スト
リングを構成することを伴う。このストリングは、デー
タベースエンジンに送られ、データベースを変更する。
【0085】「更新」ストリングを構成する際に、ユー
ザストリングm ClientStringへのアクセ
スがなされる。というのは、これは、記録に対して編集
が行われた場合のほとんどのカレント情報を表すからで
ある。データベースストリングm DBDataを変換
するための変換が行われ、新たに編集されたユーザスト
リングの変換形態となるようにされる。m Clien
tStringが編集されたかどうかは、LCStrD
の状態を検査することにより決定される。m DBDat
aにおいてテストを行い、有効な変換が生じるよう確保
される。
【0086】例えば、キャラクタのロスが生じたかどう
かに対応するように適当なフラグがセットされる。ユー
ザは、これらのフラグをテストし、変換が有効であるか
どうか決定する。これらのテストは、データベーススト
リングがデータベースに書き戻される前に行われる。変
換の結果は、DBdataに記憶され、そしてデータベ
ースストリングフラグLCStrDが「真」にリセット
される。m ClientStringに編集が行われ
なかった場合には、変換が不要である。「更新」ステー
トメントは、データベースストリングであるm DBD
ataを用いて構成される。
【0087】この実施形態は、上記の編集オペレーショ
ンに限定されるものではない。例えば、2つの異なるロ
ーカル性からのストリングが辞書の順序で比較される場
合には、比較の順序が国によって異なる。従って、比較
は、不定又は無効のオペレーションとなる。ユーザのロ
ーカル性内の初期テストは、サーバへのコールがなされ
る前にこれを決定することができる。好ましい実施形態
について本発明を以上に詳細に説明したが、本発明は、
これらに限定されるものではなく、本発明の範囲は、請
求の範囲によって限定されるものとする。
【図面の簡単な説明】
【図1】本発明によるシステムのブロック図である。
【図2】本発明の方法のフローチャートである。
【図3】データ項目を変換する本発明の方法のフローチ
ャートである。
【図4】データを編集する本発明の方法のフローチャー
トである。
【図5】データを変換する本発明の方法のフローチャー
トである。
【符号の説明】
80 コンピュータ 90 プロセッサ 102 ユーザプログラム 108 接続層 110 データベースエンジン 112 データベース 114 ユーザバッファ 116 ソースバッファ 118 コンバータ 120 ユーザのローカル性 124 ソースのローカル性 150 データ項目 160 データベースインターフェイス 170 メモリ 190 フラグ 200 ソース

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 データを記憶するためのユーザバッファ
    をメモリに維持し;ユーザのローカル性を表すユーザロ
    ーカル性情報をメモリに維持し;データを記憶するため
    のソースバッファをメモリに維持し;ソースのローカル
    性を表すソースローカル性情報をメモリに維持し;ユー
    ザバッファ及びソースバッファに記憶されたデータの状
    態を指示するための状態フラグをメモリに維持し;新た
    なデータがユーザバッファに記憶されるときにソースデ
    ータが非カレントでありそしてユーザデータがカレント
    であることを指示するために状態フラグをセットし;新
    たなデータがソースバッファに記憶されるときにユーザ
    データが非カレントでありそしてソースデータがカレン
    トであることを指示するために状態フラグをセットし;
    ユーザローカル性情報及びソースローカル性情報を用い
    て、ソースデータがカレントでそしてユーザデータが非
    カレントである場合にソースバッファのデータを変換し
    そしてその変換されたデータをユーザバッファに記憶
    し、次いで、ユーザデータ及びソースデータの両方がカ
    レントであることを指示するために状態フラグをセット
    し;ユーザローカル性情報及びソースローカル性情報を
    用いて、ユーザデータがカレントでそしてソースデータ
    が非カレントである場合にユーザバッファのデータを変
    換しそしてその変換されたデータをソースバッファに記
    憶し、次いで、ソースデータ及びユーザデータの両方が
    カレントであることを指示するために状態フラグをセッ
    トし;そしてソースバッファ及びユーザバッファの両方
    をデータ項目のインスタンスとして同時に維持する;と
    いうことをコンピュータに行わせるための命令を備えた
    ことを特徴とするコンピュータ読み取り可能な媒体に存
    在するコンピュータプログラム。
  2. 【請求項2】 データに対するユーザ側インターフェイ
    スを形成するためにコンピュータプログラムルーチンの
    第1セットを用意し;データに対するソース側インター
    フェイスを形成するためにコンピュータプログラムルー
    チンの第2セットを用意し;データ項目を読み取る要求
    に応答し、その要求がユーザ側インターフェイスからの
    ユーザ側要求である場合にはユーザバッファから読み取
    りを行い、そしてその要求がソース側インターフェイス
    からのソース側要求である場合にはソースバッファから
    読み取りを行い;その要求がユーザ側要求であって且つ
    ユーザデータが非カレントである場合にはソースバッフ
    ァのデータを変換してユーザバッファに記憶させ;そし
    てその要求がソース側要求であって且つソースデータが
    非カレントである場合にはユーザバッファのデータを変
    換してソースバッファに記憶させる;という命令を更に
    備えた請求項1に記載のプログラム。
  3. 【請求項3】 データ項目をユーザプログラム及びソー
    スプログラムに使用できるようにするためのコンピュー
    タで実施される方法において、 ユーザプログラムが読み取り又は書き込みのためにデー
    タ項目へのアクセスを得るためのユーザインターフェイ
    スを用意し;ソースプログラムが読み取り又は書き込み
    のためにデータ項目へのアクセスを得るためのソースイ
    ンターフェイスを用意し;ユーザのローカル性を与え;
    ソースのローカル性を与え;データ項目を記憶するため
    のユーザバッファを用意し;データ項目を記憶するため
    のソースバッファを用意し;ユーザバッファ内容及びソ
    ースバッファ内容の状態を記憶するように状態メモリを
    維持し;新たなデータがユーザインターフェイスを経て
    ユーザバッファに記憶されるときにソースバッファの状
    態を非カレントにそしてユーザバッファの状態をカレン
    トにセットし;新たなデータがソースインターフェイス
    を経てソースバッファに記憶されるときにユーザバッフ
    ァの状態を非カレントにそしてソースバッファの状態を
    カレントにセットし;ユーザバッファの状態がカレント
    である場合にユーザバッファの内容を読み取り、そして
    ユーザバッファの状態が非カレントである場合にはソー
    スバッファの内容をソースのローカル性からユーザのロ
    ーカル性へ変換してその変換された内容をユーザバッフ
    ァが読み取られる前にユーザバッファに記憶することに
    より、データ項目を読み取るためのユーザインターフェ
    イスからの要求を満足し;そして ソースバッファの状態がカレントである場合にソースバ
    ッファの内容を読み取り、そしてソースバッファの状態
    が非カレントである場合にはユーザバッファの内容をユ
    ーザのローカル性からソースのローカル性へ変換してそ
    の変換された内容をソースバッファが読み取られる前に
    ソースバッファに記憶することにより、データ項目を読
    み取るためのソースインターフェイスからの要求を満足
    する;という段階を備えたことを特徴とする方法。
  4. 【請求項4】 上記ソースプログラムはサーバであり、
    そして上記ユーザプログラムはサーバに対するクライエ
    ントである請求項3に記載の方法。
  5. 【請求項5】 上記ソースプログラムは、データベース
    を管理するデータベースサーバ及びデータベースへのア
    クセス要求を取り扱うデータベースエンジンである請求
    項4に記載の方法。
  6. 【請求項6】 上記データベースは、データベースエン
    ジンを含む関係データベースマネージメントシステムに
    より管理される関係データベースである請求項5に記載
    の方法。
  7. 【請求項7】 上記データ項目は、データベースの記録
    のフィールドの名前である請求項5に記載の方法。
  8. 【請求項8】 上記データ項目のローカル性は、データ
    ソースにおいてデータベースのフィールドに対して定義
    されたローカル性である請求項5に記載の方法。
  9. 【請求項9】 上記データ項目のローカル性は、データ
    ソースにおいてデータベースに対して定義されたローカ
    ル性である請求項5に記載の方法。
  10. 【請求項10】 上記データ項目のローカル性は、デー
    タソースに対して定義されたローカル性である請求項5
    に記載の方法。
  11. 【請求項11】 上記データソースは分散したオブジェ
    クトの集合であり、そして上記データ項目は、分散した
    オブジェクトの1つにある請求項3に記載の方法。
  12. 【請求項12】 上記分散したオブジェクトの1つは、
    OLEオブジェクトである請求項11に記載の方法。
  13. 【請求項13】 第2のプログラムが読み取り又は書き
    込みのためにデータ項目へのアクセスを得るための第2
    のインターフェイスを用意し;第2のローカル性を与
    え;データ項目を記憶するための第2のバッファを用意
    し;第2のバッファの内容の状態を記憶するように状態
    メモリを維持し;新たなデータがユーザインターフェイ
    スを経てユーザバッファに記憶されるか又はソースイン
    ターフェイスを経てソースバッファに記憶されるときは
    第2バッファの状態を非カレントにセットし;新たなデ
    ータが第2インターフェイスを経て第2バッファに記憶
    されるときはユーザバッファの状態を非カレントに、ソ
    ースバッファを非カレントに、そして第2バッファをカ
    レントにセットし;そしてソースバッファの状態がカレ
    ントである場合は上記第2バッファの内容を読み取り、
    そして第2バッファの状態が非カレントである場合はユ
    ーザバッファの内容をユーザのローカル性から又はソー
    スバッファの内容をソースのローカル性から第2のロー
    カル性へ変換し、この変換された内容を第2バッファが
    読み取られる前に第2バッファに記憶することにより、
    データ項目を読み取るための第2のインターフェイスか
    らの要求を満足する;という段階を更に備えた請求項3
    に記載の方法。
JP9112058A 1996-04-29 1997-04-30 多値局所化ストリング Pending JPH1097449A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/641103 1996-04-29
US08/641,103 US5812964A (en) 1996-04-29 1996-04-29 Multi-valued localized strings

Publications (1)

Publication Number Publication Date
JPH1097449A true JPH1097449A (ja) 1998-04-14

Family

ID=24570948

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9112058A Pending JPH1097449A (ja) 1996-04-29 1997-04-30 多値局所化ストリング

Country Status (5)

Country Link
US (1) US5812964A (ja)
EP (1) EP0805407A3 (ja)
JP (1) JPH1097449A (ja)
BR (1) BR9701960A (ja)
CA (1) CA2203471A1 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6847384B1 (en) * 1998-05-14 2005-01-25 Autodesk, Inc. Translating objects between software applications which employ different data formats
US6460015B1 (en) 1998-12-15 2002-10-01 International Business Machines Corporation Method, system and computer program product for automatic character transliteration in a text string object
US6411948B1 (en) 1998-12-15 2002-06-25 International Business Machines Corporation Method, system and computer program product for automatically capturing language translation and sorting information in a text class
US6496844B1 (en) 1998-12-15 2002-12-17 International Business Machines Corporation Method, system and computer program product for providing a user interface with alternative display language choices
US6469713B2 (en) 1998-12-15 2002-10-22 International Business Machines Corporation Method, system and computer program product for dynamic language switching via messaging
US6334101B1 (en) 1998-12-15 2001-12-25 International Business Machines Corporation Method, system and computer program product for dynamic delivery of human language translations during software operation
US6421680B1 (en) 1998-12-15 2002-07-16 International Business Machines Corporation Method, system and computer program product for case and character-encoding insensitive searching of international databases
US7099876B1 (en) 1998-12-15 2006-08-29 International Business Machines Corporation Method, system and computer program product for storing transliteration and/or phonetic spelling information in a text string class
US6407754B1 (en) 1998-12-15 2002-06-18 International Business Machines Corporation Method, system and computer program product for controlling the graphical display of multi-field text string objects
US6389386B1 (en) 1998-12-15 2002-05-14 International Business Machines Corporation Method, system and computer program product for sorting text strings
US6631500B1 (en) 1998-12-15 2003-10-07 International Business Machines Corporation Method, system and computer program product for transferring human language data across system boundaries
US6339755B1 (en) 1998-12-15 2002-01-15 International Business Machines Corporation Method, system and data structure for splitting language and locale properties in a data processing system
US6388686B1 (en) 1998-12-15 2002-05-14 International Business Machines Corporation Method, system and computer program product for rotating through a sequence of display states in a multi-field text string class in a graphical user interface
US6493735B1 (en) 1998-12-15 2002-12-10 International Business Machines Corporation Method system and computer program product for storing bi-directional language data in a text string object for display on non-bidirectional operating systems
US6978315B1 (en) * 2000-07-07 2005-12-20 American Megatrends, Inc. Systems, methods, and computer program products for redirecting the display of information from a computer program to a remote display terminal
US6981031B2 (en) * 2000-12-15 2005-12-27 International Business Machines Corporation Language independent message management for multi-node application systems
JP2002189627A (ja) * 2000-12-21 2002-07-05 Tsubasa System Co Ltd 文書データの変換方法
EP1315069A3 (en) * 2001-11-21 2009-11-25 Automsoft R & D Limited Date and time processing in computers
US20030182632A1 (en) * 2002-03-08 2003-09-25 Murdock Joseph Bert System and method for remote localization service
US20030222903A1 (en) * 2002-05-31 2003-12-04 Wolfgang Herzog Distributing customized computer settings to affected systems
US7797149B2 (en) * 2002-06-20 2010-09-14 Siebel Systems, Inc. Integrating related data from incompatible systems for enhanced business functionality
US7401288B2 (en) * 2003-06-30 2008-07-15 International Business Machines Corporation Method and apparatus for transmitting accessibility requirements to a server
US20040268218A1 (en) * 2003-06-30 2004-12-30 International Business Machines Corporation Method and apparatus for transmitting locale objects
US7735063B2 (en) 2004-07-07 2010-06-08 Sap Aktiengesellschaft Providing customizable configuration data in computer systems
US7774369B2 (en) * 2004-07-07 2010-08-10 Sap Aktiengesellschaft Configuring computer systems with business configuration information
US7882116B2 (en) * 2005-05-18 2011-02-01 International Business Machines Corporation Method for localization of programming modeling resources
US20070282820A1 (en) * 2006-05-31 2007-12-06 Dinh Hung T System, computer program product and method of simplifying commands for retrieving data from a database system without leading and trailing space characters
US20130227225A1 (en) * 2012-02-27 2013-08-29 Nokia Corporation Method and apparatus for determining user characteristics based on use
US9285870B2 (en) * 2013-09-24 2016-03-15 International Business Machines Corporation System locale name management
US9460142B2 (en) * 2013-10-29 2016-10-04 Sap Ag Detecting renaming operations
US10878036B2 (en) 2018-01-17 2020-12-29 Actian Corporation Maintaining character set compatibility in database systems

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2003418A1 (en) * 1988-12-29 1990-06-29 Louis A. Winans Computer message & screen communications in a multi-lingual network
US5261069A (en) * 1990-08-13 1993-11-09 Hewlett-Packard Company Method of maintaining consistency of cached data in a database system
US5546573A (en) * 1993-10-27 1996-08-13 International Business Machines Corporation Specification of cultural bias in database manager
EP0668558B1 (en) * 1994-01-14 2002-04-17 Sun Microsystems, Inc. Method and apparatus for automating the localization of a computer program
EP0678812A1 (en) * 1994-04-20 1995-10-25 Microsoft Corporation Replication verification
US5434994A (en) * 1994-05-23 1995-07-18 International Business Machines Corporation System and method for maintaining replicated data coherency in a data processing system
US5581753A (en) * 1994-09-28 1996-12-03 Xerox Corporation Method for providing session consistency guarantees
US5613122A (en) * 1994-11-14 1997-03-18 Object Technology Licensing Corp. Object-oriented operating system

Also Published As

Publication number Publication date
CA2203471A1 (en) 1997-10-29
EP0805407A2 (en) 1997-11-05
MX9703123A (es) 1998-06-28
BR9701960A (pt) 1998-09-15
AU1906897A (en) 1997-11-06
AU711392B2 (en) 1999-10-14
EP0805407A3 (en) 2000-09-06
US5812964A (en) 1998-09-22

Similar Documents

Publication Publication Date Title
JPH1097449A (ja) 多値局所化ストリング
US10614032B2 (en) Quick filename lookup using name hash
US7127472B1 (en) Data processing method and data processing device
JP4578480B2 (ja) オブジェクトシステム間のファイルプロパティ管理を容易にするためのプロモーションおよびデモーション技術
US5467472A (en) Method and system for generating and maintaining property sets with unique format identifiers
US7072903B2 (en) System and method for translating to and from hierarchical information systems
JP4972082B2 (ja) 開発者がシステム上の周知のロケーションを容易に発見し、または拡張するための能力
US6389414B1 (en) Internal database validation
US7702637B2 (en) Systems and methods for fragment-based serialization
US7870163B2 (en) Implementation of backward compatible XML schema evolution in a relational database system
US8924837B2 (en) Text file interface support in an object oriented application
US7979438B2 (en) Document management method and apparatus and document search method and apparatus
US6915303B2 (en) Code generator system for digital libraries
US8037090B2 (en) Processing structured documents stored in a database
US7321900B1 (en) Reducing memory requirements needed to represent XML entities
US7222128B2 (en) Method for updating and preserving data when performing a software upgrade
JP4866844B2 (ja) Lobに格納されたxml内容の効率的な抽出
MXPA97003123A (en) Localized sequences of multi value
JP4521413B2 (ja) データベース管理システム及びプログラム
JP3456127B2 (ja) インデクスキーの高速拡張機能を備えた文書検索方法および装置
JPH09305449A (ja) データベース管理システム

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040227

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20040227