Получение типов данных из Paradox DB через ODBC в SQLite [Delphi]

Я подключаюсь к .dbf, используя ODBC в Delphi, используя FireDAC. Я установил соединение ODBC, dBase 5.0, используя 32-разрядный драйвер Driver do Microsoft dBase (.dbf).

В моей IDE (Rad Studio 10.1 Berlin) я настроил соединение ODBC в качестве источника данных. Строка подключения ODBCAdvanced — это DefaultDir=%s;DriverId=533;MaxBufferSize=2048;PageTimeout=5, где %s — правильный каталог.

Мне удалось скопировать структуру таблицы в базу данных SQLite с помощью TFields (примерно следующий код).

FieldNames := TStringList.Create;
PDOXTable.GetFieldNames(FieldNames);
FieldNames.Delimiter := ';';
FieldList := TList<TField>.Create;
PDOXTable.GetFieldList(FieldList, FieldNames.DelimitedText);

TempTable := TFDTable.Create(nil);
TempTable.Connection := TempConn;
TempTable.TableName := DataTable.TableName;
for I := 0 to FieldList.Count - 1 do TempTable.Fields.Add(FieldList.Items[I]);
TempTable.CreateTable(true, [tpTable, tpTriggers, tpIndexes]);

Однако типы данных разные, и у меня нет первичных ключей, условий notnull или 'dflt_value', которые я получил, когда вручную экспортировал те же самые таблицы с помощью приложения Exportizer (http://www.vlsoftware.net/exportizer/), который, хотя и имеет клиент командной строки, я не уверен, Смогу связать с моим приложением.

Сравнение результатов экспорта в SQLite-from-Paradox-.dbf с помощью Exportizer и кода, который я написал.

Каков разумный способ скопировать таблицу из парадокса .dbf в SQLite, сохранив при этом как можно больше типов данных и параметров?


person Nils Guillermin    schedule 23.02.2017    source источник
comment
Почему вы говорите о dBase и Paradox, это не одно и то же? Во всяком случае, у MS есть драйверы для обоих, а FireDAC отлично подходит для доступа к Sqlite из Delphi и включает компоненты пакетного перемещения для перемещения данных между форматами. FireDAC, похоже, лучше справляется с извлечением метаданных, чем некоторые альтернативы, так что попробуйте.   -  person MartynA    schedule 24.02.2017
comment
Потому что я не уверен, какой это формат. Все, что я знаю, это .dbf. Я могу открыть их в программном обеспечении Paradox, и кажется, что я могу открыть их с помощью драйвера ODBC, предназначенного для dBase. Я думаю, что нашел те компоненты пакетного перемещения, которые вы упомянули, спасибо.   -  person Nils Guillermin    schedule 24.02.2017
comment
.dbf может быть либо dBase III, либо ранними версиями FoxPro, и ни один из них не поддерживает значения по умолчанию, NULL или какие-либо ограничения. Exportizer, по-видимому, присваивает собственное представление о значениях по умолчанию. В dBase III не было концепции NULL; неназначенное числовое поле имеет нулевое значение, неназначенная дата имеет значение " / / ", and an unassigned Char(5) the default value of `.   -  person Ken White    schedule 24.02.2017
comment
@MartynA Разве эти компоненты пакетного перемещения не требуют, чтобы таблицы были настроены перед перемещением?   -  person Nils Guillermin    schedule 25.02.2017
comment
Да, афаик они делают.   -  person MartynA    schedule 25.02.2017
comment
Нет, TFDBatchMove не требует предварительно созданных таблиц. Достаточно оставить poCreateDest включенным в свойство Options.   -  person Victoria    schedule 16.06.2017


Ответы (1)


Используйте TFDBatchMove. SQLite не имеет типов, но FireDAC имеет собственное сопоставление псевдотипов данных с помощью которого вы могли бы сохранить многое из исходных типов данных. И если типы данных не будут соответствовать вашему желанию, вы можете определить свои собственные Сопоставления.

person Victoria    schedule 17.07.2017