TickCount Angaben entsprechen Millisekunden 1.CreateOleObject Variante, 2. eigene ADO Komponente und 3. Zeos über ADO
TickCount: 19400, 19000, 19600
Code: Alles auswählen
rs.Open('SELECT * FROM test', cn, adOpenForwardOnly, adLockReadOnly);
//list fieldnames
for i:=0 to rs.Fields.count-1 do
Write(IIF(i>0, ';') + rs.Fields[i].Name);
WriteLn();
//list values
while not rs.eof do
begin
for i:=0 to rs.Fields.count-1 do
Write(IIF(i>0, ';') + VarToStr(rs.Fields[i].Value));
//bei Zeos und meiner ADO Write(IIF(i>0, ';') + rs.Fields[i].AsString);
WriteLn();
rs.MoveNext; //bei Zeos rs.Next;
end;
rs.Close;
TickCount: 4050, 4290, 5440
Code: Alles auswählen
rs.Open('SELECT * FROM test', cn, adOpenForwardOnly, adLockReadOnly);
//list fieldnames
s := '';
for i:=0 to rs.Fields.count-1 do
s := IIF(i>0, ';') + rs.Fields[i].Name;
WriteLn(s);
//list values
while not rs.eof do
begin
s := '';
for i:=0 to rs.Fields.count-1 do
s := s + IIF(i>0, ';') + VarToStr(rs.Fields[i].Value);
//bei Zeos und meiner ADO s := s + IIF(i>0, ';') + rs.Fields[i].AsString;
WriteLn(s);
rs.MoveNext; //bei Zeos rs.Next;
end;
rs.Close
TickCount: 2550, 3400, 4350
Code: Alles auswählen
rs.Open('SELECT * FROM test', cn, adOpenForwardOnly, adLockReadOnly);
s := '';
//list fieldnames
for i:=0 to rs.Fields.count-1 do
s := s + IIF(i>0, ';') + rs.Fields[i].Name;
s := s + #13#10;
//list values
while not rs.eof do
begin
for i:=0 to rs.Fields.count-1 do
s := s + IIF(i>0, ';') + VarToStr(rs.Fields[i].Value);
//bei Zeos und meiner ADO s := s + IIF(i>0, ';') + rs.Fields[i].AsString;
s := s + #13#10;
rs.MoveNext; //bei Zeos rs.Next;
end;
WriteLn(s);
TickCount: 940, 980, 2100
Code: Alles auswählen
rs.Open('SELECT * FROM test', cn, adOpenForwardOnly, adLockReadOnly);
for i:=0 to rs.Fields.count-1 do
s := rs.Fields[i].Name;
while not rs.eof do
begin
for i:=0 to rs.Fields.count-1 do
s := VarToStr(rs.Fields[i].Value);
//bei Zeos und meiner ADO s := rs.Fields[i].AsString;
rs.MoveNext; //bei Zeos rs.Next;
end;
Ach ja habe ich noch vergessen, kleiner Nachtrag, in der letzten Version habe ich nochmal den Zugriff über Zeos auf MySQL getestet, so ist Zeos auf MySQL genau so schnell wie ADO auf ACCESS.
Code: Alles auswählen
program zeos;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses Classes, SysUtils, ZConnection, ZDataset;
var
cn: TZConnection;
rs: TZQuery;
i: integer;
s: string;
begin
//connect db
cn := TZConnection.Create(nil);
cn.Protocol := 'mysql-5';
cn.Database := 'testdb';
cn.HostName := 'localhost';
cn.Port := 3306;
cn.User := 'root';
cn.Password := 'root';
cn.Connect();
//select
rs := TZQuery.Create(nil);
rs.Connection := cn;
rs.SQL.Add('SELECT * FROM test');
rs.Open;
//list fieldnames
for i:=0 to rs.Fields.count-1 do
s := rs.Fields[i].Name;
//list values
while not rs.eof do
begin
for i:=0 to rs.Fields.count-1 do
s := rs.Fields[i].AsString;
rs.Next;
end;
//close recordset
rs.Close;
rs.Free;
//close connection;
cn.Disconnect;
cn.Free;
end.