You are not logged in.
Pages: 1
Hi AB i use mORMot2 with Oracle and got error in GetFields.
Hier is my Patch for this
procedure TSqlDBUniDACConnectionProperties.GetFields(const aTableName: RawUtf8;
out Fields: TSqlDBColumnDefineDynArray);
var
meta: TDAMetaData;
n: integer;
F: TSqlDBColumnDefine;
FA: TDynArray;
hasSubType: boolean;
Owner, Table: RawUtf8;
begin
meta := (MainConnection as TSqlDBUniDACConnection).fDatabase.CreateMetaData;
try
FA.Init(TypeInfo(TSqlDBColumnDefineDynArray), Fields, @n);
FA.Compare := SortDynArrayAnsiStringI; // FA.Find() case insensitive
FillCharFast(F, sizeof(F), 0);
meta.MetaDataKind := 'Columns';
Split(aTableName, '.', Owner, Table);
if Table = '' then
begin
Table := Owner;
Owner := '';
end;
// PATCH
if (Owner = '') and
(fDBMS <> dOracle) then
Owner := MainConnection.Properties.DatabaseName; // itSDS
// PATCH
if Owner <> '' then
meta.Restrictions.Values['TABLE_SCHEMA'] := Utf8ToString(UpperCase(Owner))
else
meta.Restrictions.Values['SCOPE'] := 'LOCAL';
meta.Restrictions.Values['TABLE_NAME'] := Utf8ToString(UpperCase(Table));
meta.Open;
hasSubType := meta.FindField('DATA_SUBTYPE') <> nil;
while not meta.Eof do
begin
F.ColumnName := StringToUtf8(meta.FieldByName('COLUMN_NAME').AsString);
F.ColumnTypeNative := StringToUtf8(meta.FieldByName('DATA_TYPE').AsString);
if hasSubType then
F.ColumnTypeNative := F.ColumnTypeNative +
StringToUtf8(meta.FieldByName('DATA_SUBTYPE').AsString);
F.ColumnLength := meta.FieldByName('DATA_LENGTH').AsInteger;
F.ColumnScale := meta.FieldByName('DATA_SCALE').AsInteger;
F.ColumnPrecision := meta.FieldByName('DATA_PRECISION').AsInteger;
F.ColumnType := ColumnTypeNativeToDB(F.ColumnTypeNative, F.ColumnScale);
if F.ColumnType = ftUnknown then
begin
// UniDAC metadata failed -> use SQL
Fields := nil;
inherited GetFields(aTableName, Fields);
exit;
end;
FA.Add(F);
meta.Next;
end;
Setlength(Fields, n);
GetIndexesAndSetFieldsColumnIndexed(aTableName, Fields);
finally
meta.Free;
end;
end;
Last edited by itSDS (2021-07-13 17:37:52)
Rad Studio 12.3 Athens
Offline
k next time i try the correct way
Rad Studio 12.3 Athens
Offline
Pages: 1