Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Создание dbf таблицы , создание индексного файла.   Найти похожие ветки 

 
Скиф ©   (2005-10-07 16:07) [0]

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


 
mr.il ©   (2005-10-08 07:39) [1]

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


 
mr.il ©   (2005-10-08 07:43) [2]

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


 
Anatoly Podgoretsky ©   (2005-10-08 12:51) [3]

TTable.CreateTable


 
Скиф ©   (2005-10-10 11:20) [4]

Пробовал 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-10 18:23) [5]

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

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

TTable.AddIndex

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


 
Скиф ©   (2005-10-11 10:50) [6]

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


 
Desdechado ©   (2005-10-11 11:25) [7]

SQL:

CREATE TABLE
CREATE INDEX


 
mr.IL ©   (2005-10-11 13:05) [8]

Чем тебе через 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.


 
Anatoly Podgoretsky ©   (2005-10-11 16:11) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1130859825
Grol
2005-11-01 18:43
2005.11.20
Удалить память выделенную под нужды компонента...


1-1130409656
Дмитрий_05
2005-10-27 14:40
2005.11.20
Вытащить иконку из зашифрованного exe-файла?


2-1131193537
JBL
2005-11-05 15:25
2005.11.20
Rave Reports


14-1130300029
SPeller
2005-10-26 08:13
2005.11.20
Подскажите браузер


6-1122990135
Dyakon_Frost
2005-08-02 17:42
2005.11.20
Обработка интернет страницы!