Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как програмно создать поле Float? [D7, dBase, FoxPro]


stone ©   (2003-06-24 13:41:00) 

Создаю таблицу при помощи FieldDefs
with AddFieldDef do
begin
Name := "Course";
DataType := ftFloat;
end;

Поле создается, но если открыть структуру таблицы в Database Desktop, оно не имеет ни длины, ни точности.
Что еще надо указать?

ЗЫ. База DBASE


Anatoly Podgoretsky   (2003-06-24 16:07:00) [1]

В справке по BDE


stone   (2003-06-24 15:56:00) [2]

ftBCD устанавливает (20,4) не зависимо указан размер или нет

> но лучше уходить на BDE API


Где об этом можно почитать?


Anatoly Podgoretsky   (2003-06-24 15:46:00) [3]

1. Ты опять не указываешь размер, а ожидаешь его увидеть

procedure Add(const Name: String; DataType: TFieldType; Size: Integer = 0; Required: Boolean = False);

2. Add is provided for backward compatibility.
3. Я бы вообще не рекомендовал использовать тип ftFloat, он во первых не зря Float, что означает плавающая запятаяи предназначен в основном для представления или очень маленьких или очень больших чисел, которые не помещаются в 18 знаков. Для dBase ниже 7 версии, оптимальный типы ftInteger/ ftBCD, но лучше уходить на BDE API, поскольку VCL не имеет должной поддержки, или самый простой путь иметь пустую таблицу шаблон и ее копировать (dbiCopyTable), в этом случае гарантируется точная структура. Можно еще и на рабочей если сменить имя, без изменения FieldDefs, но тут могут быть сюрпризы, в зависимости от настроек BDE


stone   (2003-06-24 15:30:00) [4]

Скорее предполагаю
Вот полный код:

DB := TDatabase.Create(nil);
DB.DriverName := "STANDARD";
DB.Params.Values["PATH"] := Dir;
DB.LoginPrompt := False;
DB.DatabaseName := "DB";
DB.Connected := true;
Tbl := TTable.Create(nil);
Tbl.TableType:= ttDBase;
Tbl.DatabaseName := "DB";

try
UpdateMessages("


Anatoly Podgoretsky   (2003-06-24 15:22:00) [5]

Это ты точно знаешь или предполагаешь, но что то не видать, что ты устанавливаешь размер при добавлении, а надо бы


stone   (2003-06-24 15:15:00) [6]

DBASE IV


Anatoly Podgoretsky   (2003-06-24 15:03:00) [7]

Это тебя как понимать, DBASE форматов много, для седьмого это нормально. Ты вместо задания вопросов будь добр указывать полную информацию, необходимую для ответа. Сказать DBASE это все равно что ничего не сказать, одно ясно, что это не Парадок, не Акцесс не ИБ и т.д., но это все.


stone   (2003-06-24 14:56:00) [8]


> Anatoly Podgoretsky © (24.06.03 14:52)


Как прикажете понимать?


Anatoly Podgoretsky   (2003-06-24 14:52:00) [9]

stone © (24.06.03 13:41)

ЗЫ. База DBASE - за собой ничего не несет.


HSolo   (2003-06-24 14:35:00) [10]

Есть еще один стандартный способ :) SQL-запрос
Query.SQL.Text := "ALTER TABLE такая-то ADD поле NUMERIC(длина,точность)";
Query.ExecSQL;


stone   (2003-06-24 14:24:00) [11]

Чувствую, стандартным способом такое не получится. То же касается поля Integer (с длиной более 6). Видимо нужно лезть поглубже в БДЕ.


stone   (2003-06-24 13:52:00) [12]

Соловьев © (24.06.03 13:49)

Разве не одно и тоже ?


Stas   (2003-06-24 13:50:00) [13]

Table1.fielddefs.add ("MyField",ftFloat,4,false)


Соловьев   (2003-06-24 13:49:00) [14]

with FieldDefs do
begin
Add("PHONE", ftFloat, 0, true);
FieldDefs[0].CreateField(MySql);
...


Наверх

Титульная страница Поиск, карта сайта Написать письмо