☆BDE Table.Locateで・・・。
そこでシンプルなサンプルを作って、原因を探したところ、Locateメソッドの検索文字がフィールドサイズより長い場合にエラーになっていました。(そんな仕様だっけ?)
又、この問題とは別に、TEditのMaxLengthがランタイムテーマの影響を受けることが確認できました。 検索文字入力用Editには、元々MaxLengthをフィールド長さで設定してあり、今まで検索文字がフィールドサイズを超えることがなかったのですが、ランタイムテーマの影響で、バイト数から文字数扱いになってしまい、エラーが起こったようです。
今回は、文字長さをバイト数で計算して、フィールド長さ以下であることを確認の上、Locateメソッドに渡すことにより、この問題を解決しました。
※テスト用プログラムです。データベースは、DBDEMOSのemployee.dbを使っています。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
S1, S2: String;
begin
S1 := Edit1.Text;
S2 := Edit2.Text;
Table1.Locate('LastName;FirstName',VarArrayOf([S1, S2]), [loPartialKey]);
end;
end.
| 固定リンク
