Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

Создание 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.048 c
14-1130665217
Piter
2005-10-30 12:40
2005.11.20
3gp в AVI


4-1126897036
Dot
2005-09-16 22:57
2005.11.20
слушать порт WinSocks


14-1130338041
Starcom
2005-10-26 18:47
2005.11.20
Variant Asynh for D7


14-1130755692
Fist
2005-10-31 13:48
2005.11.20
Катастрофа на Солнце: дела все хуже


9-1119954803
Zak3D[@Tm]
2005-06-28 14:33
2005.11.20
Скелетная анимация.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский