J
If you're not embarrassed to rule the source, you can finish the ListData procedure in the manner you need. Or write your export, like this (not checking, no suitable base at hand):uses
... IB, IBDatabase, IBHeader, IBSQL, IBUtils
...
function MyListData(const Database: TIBDatabase; const ObjectName: string;
const Filter: string = ''): string;
const
SelectSQL = 'SELECT * FROM %s'; {do not localize}
WhereClause = ' WHERE (%s)'; {do not localize}
var
qrySelect: TIBSQL;
FieldName, Fields, Values, DateStr: string;
i: Integer;
begin
qrySelect := TIBSQL.Create(Database);
try
qrySelect.SQL.Text := Format(SelectSQL,
[QuoteIdentifier(Database.SQLDialect, ObjectName)]);
if Filter <> '' then
qrySelect.SQL.Text := qrySelect.SQL.Text + Format(WhereClause,
[QuoteIdentifier(Database.SQLDialect, Filter)]);
qrySelect.ExecQuery;
Fields := '';
for i := 0 to qrySelect.Current.Count - 1 do
if (qrySelect.Fields[i].SQLType <> SQL_ARRAY) and
(qrySelect.Fields[i].SQLType <> SQL_BLOB) and
(not Database.Has_COMPUTED_BLR(ObjectName, qrySelect.Fields[i].Name)) then
begin
FieldName := String(qrySelect.Fields[i].SQLVAR.sqlname);
if Fields <> '' then
Fields := Fields + ', '; {do not localize}
Fields := Fields + QuoteIdentifier(Database.SQLDialect, FieldName);
end;
while not qrySelect.Eof do
begin
Result := 'INSERT INTO ' + QuoteIdentifier(Database.SQLDialect, ObjectName) + ' ('; {do not localize}
Result := Result + Fields + ') VALUES ('; {do not localize}
Values := '';
for i := 0 to qrySelect.Current.Count - 1 do
begin
if (Values <> '') and (qrySelect.Fields[i].SQLType <> SQL_ARRAY) and
(qrySelect.Fields[i].SQLType <> SQL_BLOB) then
Values := Values + ', ';
if qrySelect.Fields[i].IsNull and
(qrySelect.Fields[i].SQLType <> SQL_ARRAY) and
(qrySelect.Fields[i].SQLType <> SQL_BLOB) then
begin
Values := Values + 'NULL'; {do not localize}
end
else
case qrySelect.Fields[i].SQLType of
SQL_TEXT, SQL_VARYING :
Values := Values + QuotedStr(qrySelect.Fields[i].AsTrimString);
SQL_TYPE_DATE :
begin
DateTimeToString(DateStr, 'mm/dd/yyyy', qrySelect.Fields[i].AsDate);
Values := Values + QuotedStr(DateStr);
end;
SQL_TYPE_TIME :
begin
DateTimeToString(DateStr, 'hh:mm:ssss', qrySelect.Fields[i].AsTime);
Values := Values + QuotedStr(DateStr);
end;
SQL_TIMESTAMP :
begin
DateTimeToString(DateStr, 'mm/dd/yyyy hh:mm:ssss', qrySelect.Fields[i].AsDateTime);
Values := Values + QuotedStr(DateStr);
end;
SQL_SHORT, SQL_LONG, SQL_INT64,
SQL_DOUBLE, SQL_FLOAT, SQL_D_FLOAT:
Values := Values + qrySelect.Fields[i].AsTrimString;
SQL_ARRAY, SQL_BLOB : ;
else
IBError(ibxeInvalidDataConversion, [nil]);
end;
end;
Result := Result + Values + ')' + ';'#13#10;//Term; {do not localize}
qrySelect.Next;
end;
finally
qrySelect.Free;
end;
end;