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

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

Создание dbf таблицы , создание индексного файла. [D6, dBase, FoxPro]


Скиф ©   (2005-10-07 16:07:00) 

На форме имеются компоненты TTable и TDataSourse. Как в RunTime:
1. Создать таблицу dbf нужной структуры, если файла таблицы на диске нет?
2. Создать индексный файл и переиндексировать таблицу, если таблица на диске есть, а индексного файла нет?
Буду очень благодарен за помощь.


Anatoly Podgoretsky   (2005-10-11 16:11:00) [1]

Скиф ©   (11.10.05 10:50) [6]
Зачем тогда приводишь ложную информацию?


mr.IL   (2005-10-11 13:05:00) [2]

Чем тебе через TQery не канает. Там все просто и доступно.
Вот рабочий кусман.
 _ChOfPeriod := Какое-то значение
 _ChOfPeriod := _ChOfPeriod+'1.dbf';
 _FName := 'C'+_DatePart+_ChOfPeriod;
 with Q_CreateTable do begin
   Close;
     SQL.Clear;
     SQL.Add('CREATE TABLE "'+_FName+'"');
     SQL.Add('(DistrId CHAR(15), ');
     SQL.Add('Cust_Id CHAR(15), ');
     SQL.Add('CustName CHAR(200), ');
     SQL.Add('INN NUMERIC(12), ');
     SQL.Add('CustRegId NUMERIC(2), ');
     SQL.Add('CustAreaId NUMERIC(13), ');
     SQL.Add('CustCityId NUMERIC(13), ');
     SQL.Add('CustAdd CHAR(200), ');
     SQL.Add('DateBegin DATE, ');
     SQL.Add('DateEnd DATE, ');
     SQL.Add('uid CHAR(15))');
     ExecSQL;
     SQL.Clear;
     SQL.Add('CREATE INDEX uid ON "'+_FName+'" (uid)');
     ExecSQL;
 end;
Гораздо приятнее чем через TTable.


Desdechado   (2005-10-11 11:25:00) [3]

SQL:

CREATE TABLE
CREATE INDEX


Скиф   (2005-10-11 10:50:00) [4]

Это не у меня, это в примере из интерактивного Help, взятого за основу. Соответственно, менял и TableType и прочие настройки, указывал явно тип таблицы и т.д. С Paradox получается, а с FoxPro - нет. На AddIndex ругается в том смысле, что не существует индексного файла, на CreateTable - что не существует таблицы. Как использовать TQery в случае dbf я попросту не знаю, поэтому и не пытался.
Но всё равно - спасибо за помощь.


Anatoly Podgoretsky   (2005-10-10 18:23:00) [5]

Скиф ©   (10.10.05 11:20) [4]
А с какой оно стати создаст dBase если у тебя TableType := ttParadox;

Как создать для него индексный файл?

TTable.AddIndex

Естественно для ФоксПро очень много ограничений на индексы и тип таблицы тоже должен быть ttFoxPro


Скиф   (2005-10-10 11:20:00) [6]

Пробовал TTable.CreateTable. В том-то и соль, что Paradox она создаёт, а dbf - нет. Ругается в том смысле, что такой-то таблицы не существует. Сам знаю, что не существует, я же просил её создать! За основу взял следующий пример из Help:

The following example shows how to create a table.

with Table1 do begin
 Active := False;  
 DatabaseName := 'DBDEMOS';
 TableType := ttParadox;
 TableName := 'CustInfo';

 { Don't overwrite an existing table }

 if not Table1.Exists then begin
   { The Table component must not be active }
   { First, describe the type of table and give }
   { it a name }
   { Next, describe the fields in the table }
   with FieldDefs do begin
     Clear;
     with AddFieldDef do begin
       Name := 'Field1';
       DataType := ftInteger;
       Required := True;
     end;
     with AddFieldDef do begin

       Name := 'Field2';
       DataType := ftString;
       Size := 30;
     end;
   end;
   { Next, describe any indexes }
   with IndexDefs do begin
     Clear;
     { The 1st index has no name because it is
     { a Paradox primary key }
     with AddIndexDef do begin
       Name := '';
       Fields := 'Field1';
       Options := [ixPrimary];
     end;
     with AddIndexDef do begin

       Name := 'Fld2Indx';
       Fields := 'Field2';
       Options := [ixCaseInsensitive];
     end;
   end;
   { Call the CreateTable method to create the table }
   CreateTable;
 end;
end;

При попытке использовать:

   TableType := ttDBase;
   TableName := 'CustInfo.dbf';
или
   TableType := ttDBase;
   TableName := 'CustInfo.';
или
   TableType := ttDefault;
   TableName := 'CustInfo.dbf';

пример успешно не работает. Что делать?

И второй вопрос: имеется уже готовый *.dbf, созданый в FoxPro, не индексированый. Как создать для него индексный файл?

BDE, естественно, установлен, но с alias-ами связываться не хотелось бы.


Anatoly Podgoretsky   (2005-10-08 12:51:00) [7]

TTable.CreateTable


mr.il   (2005-10-08 07:43:00) [8]

Блин. Похоже они уже в архиве. Короче используй TQery и почитай Local SQL Help из поставки дельфы по теме create table.


mr.il   (2005-10-08 07:39:00) [9]

Посмотри мои посты здесь. Мне отвечали на подобный вопрос.


Наверх

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