Эта страница устарела и может быть удалена. Смотрите elfimov.com для обновлений.

DB Convertor 2.1

О программе

Программа convert предназначена для конвертирования файлов базы данных clarion в файлы базы данных foxpro или наоборот. Конвертация задается с помощью скрипта, записанного в файл. Имя файла указывается в командной строке программы convert. По умолчанию открывается файл script из текущей директории.
Вообще, программа написана для работы с АСУ ВУЗ абитуриент и контингент, но может быть использована как угодно благодаря тому, что мне стукнуло в голову написать чтение и разбор скрипта из файла.


Как скачать

Версия для Win32 (RAR архив), 122005 байт
Версия для DOS (ZIP архив), 113124 байт

Командная строка

	convert [file_name]
ПараметрЗначение
file_nameимя файла, в котором cодержится скрипт

Формат скрипта

Скрипт состоит из одного или нескольких определений таблицы в стиле, похожем на SQL, с некоторыми заимствованиями из C++:
SHOW INFO FROM table_name [PATH table_path] AS type_name
Показывает информацию о файле данных table_name.
Для базы данных FOXPRO рисуется список полей, для CLARION также выдается список ключей/индексов (точнее, должен выдаваться, но under construction).
ПараметрЗначение
table_nameназвание базы, информацию о которой нужно показать
table_pathпуть к базе. Может быть абсолютным или относительным
type_nameтип базы, информацию о которой нужно показать. Допустимые значения FOXPRO и CLARION
CREATE TABLE target_table_name [PATH target_path] AS type_name
CONVERT FROM source_table_name [PATH source_path] AS type_name
{
field:
	field_create_definition;
	[ ... ; ]
key:
	key_create_definition;
	[ ... ; ]
}
Создает базу target_table_name в соответствии с определением и конвертирует в неё содержимое базы source_table_name.
INSERT INTO target_table_name [PATH target_path] AS type_name
CONVERT FROM source_table_name [PATH source_path] AS type_name
{
field:
	field_create_definition;
	[ ... ; ]
key:
	key_create_definition;
	[ ... ; ]
}
Открывает базу target_table_name, проверяет соответствие полей определения полям базы данных и конвертирует в неё содержимое базы source_table_name, при этом записи добавляются в конец базы данных в отличие от создания базы данных, когда записи конвертируются начиная с нуля и определение базы target_table_name перезаписывается.
field_create_definition:
	field_name field_type[(field_size[,field_dec])],[DIM[field_dim]]
		[SET(Svalue1=Tvalue1[,Svalue2=Tvalue2, ...])]
		(FROM source_field_name	[ZEROS] | FILL n | DEFAULT n |
		SEARCH search_field FROM search_table_name WHERE condition |
		SPLIT(field1 | field2[ | field3 ...]) )
key_create_definition:
	key_name	(field_name[,field_name ... ]) [DUP] [NOCASE] [NULL] [INDEX]
Определение состоит из одной секции field для базы FOXPRO и двух секций field и key для базы CLARION (т.к. информация о существующих ключах в случае базы CLARION находится в заголовке файла с данными, а в случае с FOXPRO в заголовке содержится только признак наличия индексных файлов).
В секции field находятся описания полей базы, а в секции key находятся описания ключей базы данных.
Показать пример скрипта
ПараметрЗначение
target_table_nameназвание базы, которая будет создана. По идее, будет создан файл target_table_name.(dbf/dat) и target_table_name.(fpt/mem) (если в базе присутствуют поля memo)
target_pathпуть к базе, которая будет создана. Необязательный параметр, если не указан, то база будет создаваться в текущей директории. Может быть абсолютным или относительным
source_table_nameназвание исходной базы. Программа будет искать и читать информацию из файла source_table_name.(dbf/dat) и source_table_name.(fpt/mem) (если в базе есть поля memo). Вообще, база будет искаться в текущей директории, но никто не мешает указать полный путь к базам.
source_pathпуть к исходной базе. Необязательный параметр, если не указан, то база будет открываться в текущей директории. Может быть абсолютным или относительным
type_nameназвание типа базы. Может быть FOXPRO или CLARION, причем тип исходной базы должен отличаться от типа создаваемой базы (т.е. нельзя конвертировать из FOXPRO в FOXPRO или из CLARION в CLARION)
field_nameназвание поля в создаваемой базе данных
field_typeтип поля. Возможны типы (foxpro):
	CHAR, NUMBER, LOGICAL, MEMO, DATE, FLOAT, PICTURE
(clarion)
	LONG, REAL, STRING, PICTURE, BYTE, SHORT, GROUP, DECIMAL, MEMO
SETПри указании этой функции значения SvalueN поля исходной базы будут конвертироваться в соответствующие им значения TvalueN создаваемой базы.
field_sizeразмер поля в знаках (символах или цифрах). Необходимо указывать только для следующих типов данных (foxpro):
	CHAR(field_size),
	NUMBER(field_size,field_dec),
	FLOAT(field_size,field_dec)
(clarion)
	STRING(field_size),
	MEMO(field_size),
	DECIMAL(field_size, field_dec)
Ограничение на размер всех полей составляет 255 знаков, за исключением поля MEMO, для которого максимальный размер составляет 65535 знаков.
field_decточность поля в десятичных цифрах. Необходимо указывать только для следующих типов данных (foxpro):
	NUMBER(field_size,field_dec),
	FLOAT(field_size,field_dec)
(clarion)
	DECIMAL(field_size,field_dec)
Примечание: При указании точности, отличной от нуля, для базы данных FoxPro, один знак будет отводиться для хранения десятичной точки (в связи с особенностью формата данных FoxPro)
DIM[field_dim]для базы данных CLARION это означает, что данное поле представляет собой массив размером field_dim элементов. Вообще, размерность массивов может быть произвольной, но в данной программе размерность ограничена единицей. Для базы данных FOXPRO это ничего не значит
FROM source_field_nameназвание поля в исходной базе данных, из которого будут считываться данные в определяемое поле
ZEROSфлаг, если присутствует, то поле дописывается нулями при конвертации. Работает только вместе с FROM.
FILL nесли вы не хотите, чтобы это поле конвертировалось из чего-нибудь, вы можете указать ASCII-код символа, которым будет заполнено это поле. Код указывается в десятичном виде.
DEFAULT nесли вы не хотите, чтобы это поле конвертировалось из чего-нибудь, вы можете указать значение, которое будет присвоено этому полю.
Примечание: Если вы хотите присвоить значение строке, то можно указывать только одно слово. Кавычки вам не помогут.
SEARCH search_field FROM search_table_name WHERE conditionочень хитрая конструкция, по сути вложенный запрос. В данное поле будет вставлено первое попавшееся значение поля search_field из таблицы search_table_name, которое удовлетворит условию condition. Это условие должно быть вида:
		[table_name1.]field_name1=[table_name2.]field_name2
Здесь table_name1 и table_name2 - названия таблиц, если они не указаны, то берется название текущей таблицы (логично предположить, что с одной стороны указывается текущая таблица, а с другой - название таблицы search_table_name), field_name1 и field_name2 - названия полей, которые необходимо сравнивать для достижения выполнения условия.
SPLITэто ключевое слово позволяет расположить внутри одного поля, которое будет присутствовать в создаваемой базе, несколько полей исходной базы. Определения полей, входящих в состав составного поля, аналогично определению обычных полей, но название поля field_name не указывается. Для этих полей также по умолчанию указывается флаг ZEROS
key_nameназвание ключа. После названия в скобках указывается список полей, которые входят в этот ключ. Количество полей может быть равно единице
DUPзначения ключа могут дублироваться. По умолчанию не могут
NOCASEв значениях ключа не различается регистр. По умолчанию различается
NULLв значениях ключа могут присутствовать нулевые значения. По умолчанию не могут
INDEXключ является индексом. По умолчанию не является

Ограничения программы

ПараметрМаксимальный размер
Файл скрипта131072 байт
Определение структуры базы4096 байт
Определение поля или ключа256 байт
Название исходного и создаваемого файла50 байт
Программой НЕ поддерживается конвертирование следующих типов данных:
(foxpro)
	LOGICAL, FLOAT, PICTURE
	
(clarion)
	REAL, GROUP, PICTURE
Однако для этих типов данных возможно использование функции FILL для заполнения полей и последующего их использования.

© 2000, Елфимов Михаил