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

Вниз

TIBTable.CreateTable   Найти похожие ветки 

 
Grihan   (2003-12-31 12:07) [0]

После вызова TIBTable.CreateTable для существующей базы, в которой уже существует таблица с именем, указанным TIBTable.TableName возникает ошибка: такая таблица уже существует, хотя в хелпе сказано:CreateTable overwrites an existing table’s structure and data.
Не подскажете в чем дело?
Спасибо.


 
Vick ©   (2003-12-31 12:12) [1]

А как на счет заразервированнsх классов???
Вас в школе не учили, что их нельзя использовать как имена переменных? А имена переменных должны быть уникальными? в пределах хотя бы процедуры (функции)???


 
Grihan   (2003-12-31 12:16) [2]

Да нет, имя то у меня ibtTable. Т.е.вызов такой: ibtTable.CreateTable;
Это я для наглядности написал, чтоб понятно какой класс использую...


 
Vick ©   (2003-12-31 12:18) [3]


> Grihan


Так ты их в рантайме создаешь? Или одна на форме валяется, а другую создаешь? Код напиши.


 
Johnmen ©   (2003-12-31 12:21) [4]

>Grihan

Потому, что, хоть и написано, что overwrites, на самом деле идет чистое создание таблицы.
И второе. Почему бы не выполнить просто запрос CREATE TABLE ... ? И проще и быстрей и понятней...


 
Grihan   (2003-12-31 12:25) [5]

На форме есть ibtTable: TIBTable;
там же на форме я ее связал с
ibdbBase: TIBDatabase; и
ibtTrans: TIBTransaction;
все посвязывал друг с другом.
Но ни базы, ни таблицы в реалии нет, поэтому создаю все в рантайме. Вот код:

ibdbBase.DatabaseName := FileName;//FileName приходит из вне

if not ibdbBase.Connected then
begin
Params := TStringList.Create;
if not FileExists(feFileIB.FileName) then
begin
Params.Add("USER "SYSDBA"");
Params.Add("PASSWORD "masterkey"");
Params.Add("PAGE_SIZE 4096");
ibdbBase.Params := Params;
ibdbBase.CreateDatabase;
end
else
begin
Params.Add("user_name=SYSDBA");
Params.Add("password=masterkey");
ibdbBase.Params := Params;
ibdbBase.Connected := True;
end;
Params.Free;
end;

try
ibtTable.Active := False;
ibtTable.TableName := "Main";
ibtTable.FieldDefs.Clear;
ibtTable.FieldDefs.Add("ISN", ftInteger, 0, True);
ibtTable.FieldDefs.Add("PARISN", ftInteger, 0, True);
ibtTable.FieldDefs.Add("ADDRESSLEVEL", ftSmallint, 0, True);
ibtTable.FieldDefs.Add("CLASSISN", ftInteger, 0, True);
ibtTable.FieldDefs.Add("ADDRESS", ftString, 40, False);
ibtTable.FieldDefs.Add("CODE", ftString, 15, False);
ibtTable.FieldDefs.Add("TARIFFZONE", ftString, 10, False);

ibtTable.IndexDefs.Clear;
ibtTable.IndexDefs.Add("Key", "ISN", [ixPrimary, ixUnique]);

ibtTrans.Active := True;
if ibtTable.Exists then
ibtTable.DeleteTable; //написал чтоб обсуждаемая ошибка не возникала
ibtTable.CreateTable;
except
end;


 
Vick ©   (2003-12-31 12:26) [6]

В хелпе пишут, что еще бы проверочку немешало бы поставить

if not IBTable1.Exists then begin.....end


 
Grihan   (2003-12-31 12:31) [7]

в хелпе так: to avoid overwriting an existing table, check Exists before calling CreateTable.
т.е. для предотвращения перезаписи существующей таблици следует проверить ее существование


 
Johnmen ©   (2003-12-31 12:33) [8]

>Grihan

На заборе тоже много чего пишут...:)
Ты смотри в корень. А корень - исходники !



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

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

Наверх




Память: 0.48 MB
Время: 0.014 c
7-93720
ponyol
2003-11-09 07:39
2004.01.29
Delphi и сканер.


3-93354
edicon
2004-01-03 02:14
2004.01.29
Пароли


1-93426
DDA
2004-01-16 13:06
2004.01.29
Завершение потока


8-93590
arcoant
2003-09-23 22:07
2004.01.29
OpenGL


3-93370
Michail Dalakov
2004-01-02 12:35
2004.01.29
TRemoteDataModule и DCOM