他データセットとの比較
ここでは他のデータセット(ADO,BDE,DBX)との比較を行います。
| BDE | ADO | dbExpress | ODBC access | |
| NCHAR, NVARCHAR | この型を認識できません。 | NCHAR(10) には2バイト文字が5文字しか入力できません。 | NCHAR(10) には2バイト文字が5文字しか入力できません。 | NCHAR(10) に2バイト文字を10文字入力できます。 |
| NUMERIC, DECIMAL | Currency が使用されます。最大精度は (14,4) です。 | EnableBCD により BCD が使用されます。最大精度は (18,4) です。 | FMTBcd が使用されます。 | EnableBCD により BCD が使用されます。最大精度は
(18,4) です。 精度が14 以上か Scale が 4 以上の場合 FMTBcd を使用します。最大精度は (32,n) です。(D6以降) 金額属性を自動設定します。(*1) |
| REAL | Float が使用されます。 | Float が使用されます。 | Float が使用されます。 | Float が使用されます。有効桁数以下を丸めます。 |
| STINYINT | SmallInt が使用されます。 | SmallInt が使用されます。 | SmallInt が使用されます。 | SamllInt が使用されます。入力可能値(-128..127)が自動設定されます。(*1) |
| UTINYINT | SmallInt が使用されます。 | Word が使用されます。 | SmallInt が使用されます。 | Word が使用されます。 |
| BIGINT | Double が使用されます。最大精度は14桁です。 | LargeInt が使用されますが、負符号が欠落する場合があります。 | FMTBcd が使用されます。 | LargeInt が使用されます。最大精度は19桁です。 |
| TIMESTAMP | DateTime が使用されます。 | DateTime が使用されます。 | SQLTimeStamp が使用されます。 | DateTime が使用されます。 EnableTimeStamp により SQLTimeStamp が使用されます。(D6以降) |
| GUID | この型を認識できません。 | 正しく認識します。 | 正しく認識します。 | 正しく認識します。 |
*1 これらは動的項目使用時に限られます。設計時に項目の追加で静的項目を生成した場合には適用されません。
以下は ODBC access とBDEでの数値精度の比較です。
| C1 | C2 | C3 | C4 | C5 | |
| データ型 | Integer | Numeric(20,4) | Numeric(31,0) | TimeStamp | BigInt |

uses
MMSystem;
// ADO
procedure TForm1.Button1Click(Sender: TObject);
var
TickTock1 : Longword;
S : String;
begin
TickTock1 := timeGetTime;
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
S := ADOQuery1.FieldByName('Col3').AsString;
ADOQuery1.Next;
end;
LabelFetch.Caption := IntToStr(timeGetTime - TickTock1);
end;
// ODBC
procedure TForm1.Button2Click(Sender: TObject);
var
TickTock1 : Longword;
S : String;
begin
TickTock1 := timeGetTime;
DBQueryODBC1.DefaultQuery.SQLWaitCursor := False;
DBQueryODBC1.Open;
while not DBQueryODBC1.Eof do
begin
S := DBQueryODBC1.FieldByName('Col3').AsString;
DBQueryODBC1.Next;
end;
LabelFetch.Caption := IntToStr(timeGetTime - TickTock1);
end;
単位:秒
| BDE(MSACCESS) | ADO(Jet.OLEDB.4.0) | ODBC(Access Driver 4.0) | |
| Test1 | 38 | 16 | 13 |
| Test2 | 135 | 21 | 61 |
LONG データを含む Test2 では ADO より遅かった。但し、DBQueryODBC
の LongVarCharLen を 1024 にしたら 19秒になり
ADO より早くなった。
SQL Server サーバーのデータを使用
10万件のデータをオープンし EOF になるまで
Next メソッドを繰り返す。
単位:秒
| ADO(SQLOLEDB) | ODBC(SQL Server Driver) | |
| Test1 | 225 | 32 |
| Test2 | 501 | 57 |
圧勝。
DB2 サーバーのデータを使用
10万件のデータをオープンし EOF になるまで
Next メソッドを繰り返す。
単位:秒
| ADO(MSDASQL) | ADO(IBMDADB2) | ODBC(IBM DB2 Driver) | |
| Test1 | 276 | 37 | 30 |
| Test2 | 315 | 68 | 56 |
ADOではクライアントCPU が約80%であったのに対してODBC経由では約40%であった。