Форум: "Базы";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c