Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Key violations error ???? D7 BDE Paradox 
V
    Опции темы
Akella
Дата 26.10.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Попробуй такую конструкцию
Код

ALTER TABLE TableName CHANGE LastFieldName NewFieldName INTEGER NOT NULL PRIMARY KEY;


Alter Table и Create Table немного схожи в определении полей

Добавлено @ 10:13 
Цитата(Serg1234 @  26.10.2006,  09:05 Найти цитируемый пост)
Поиск Alter Table вывел на такой же вопрос - к сожелению он тоже остался без ответа. 

поиск на форуме по ключевому слову Alter Table
http://forum.vingrad.ru/topic-47970/unread...able/index.html

Добавлено @ 10:14 
Цитата

В BDE есть файл localsql.hlp - там синтаксис SQL описан


Это сообщение отредактировал(а) Akella - 26.10.2006, 10:03
PM MAIL   Вверх
Serg1234
Дата 26.10.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.6.2006

Репутация: нет
Всего: нет



Цитата(Akella @  26.10.2006,  10:03 Найти цитируемый пост)
Цитата(Serg1234 @  26.10.2006,  09:05 )
Поиск Alter Table вывел на такой же вопрос - к сожелению он тоже остался без ответа. 

поиск на форуме по ключевому слову Alter Table
http://forum.vingrad.ru/topic-47970/unread...able/index.html


Я этот вопрос и имел в виду. Но это уже не важно.
Я нашел в чем проблема - проблема в том, что прежде чем изменять тип поля с Integer на Autoinc, необходимо по этому полю сделать Primary индекс. И все заработало (с помощью BDE!).

В низу текст процедуры, может кому еще пригодится.
p.s. Akella  - спасибо за участие smile .


Код

Var Name,NameInc:String;
      i,IncremField=Integer;NameInc
Begin
 //создаем новую(временную) таблицу, копируя в нее структуру старой
 //Инкрементальное поле(ftAutoinc) заменяем целочисленным полем(ftInteger)
 if FileExists('DB\sp_new.db') then DeleteFile('DB\sp_new.db');
 Table_new.TableName:='DB\sp_new.db';Table_new.TableType:=ttParadox;
 For i:=0 to spisok_table.FieldCount-1 do
  With Table_new.FieldDefs do
  Begin
   IF spisok_table.FieldDefList.FieldDefs[i].DataType=ftAutoinc
    Then Begin Add(spisok_table.FieldDefList.FieldDefs[i].Name,ftInteger,spisok_table.FieldDefList.FieldDefs[i].Size,False);
          IncremField:=i;NameInc:=spisok_table.FieldDefList.FieldDefs[i].Name;
         End
    Else Add(spisok_table.FieldDefList.FieldDefs[i].Name,spisok_table.FieldDefList.FieldDefs[i].DataType,
             spisok_table.FieldDefList.FieldDefs[i].Size,False);
  End;
 //переносим информацию из старой таблицы в новую
 spisok_table.IndexName:='';spisok_table.CancelRange;spisok_table.First;
  While Not(spisok_table.Eof) do
  Begin
   Table_new.Insert;
   For i:=0 to spisok_table.FieldCount-1 do Table_new.Fields.Fields[i]:=spisok_table.Fields.Fields[i];
   Table_new.Post;
   spisok_table.Next;
  End;

 //создаем ixPrimary индекс
 Table_new.IndexDefs.Update;
 Table_new.Active:=False;Table_new.Exclusive:=True;Table_new.Open;
 Table_new.AddIndex('', NameInc,[ixPrimary]);
 //Меняем поле целочисленное поле на поле типа ftAutoinc
 Fillchar(MyChangeRec,sizeof(MyChangeRec),0);StrPCopy(MyChangeRec.szName,NameInc);
 MyChangeRec.iType:=fldINT32;
 MyChangeRec.iSubType:=fldstAUTOINC;
 Table_new.Active:=False;Table_new.Exclusive:=True;Table_new.Open;
 // ChangeField- процедура взята из файла bde32.hlp
 ChangeField(Table_new,Table_new.FieldByName(NameInc),MyChangeRec);
 //создаем Secondary индексы
 spisok_table.IndexDefs.Update;Table_new.IndexDefs.Update;
 For i:=1 to spisok_table.IndexDefs.Count do
  Begin
   Table_new.AddIndex(spisok_table.IndexDefs.Items[i-1].Name,spisok_table.IndexDefs.Items[i-1].Fields,spisok_table.IndexDefs.Items[i-1].Options)
  End;
 Table_new.IndexDefs.Update;
 //удаляем старую таблицу и сохраняем новую с именем старой таблицы
 // DeleteTable,CopyTable - процедуры взяты c drkb23
 Name:=spisok_table.TableName;spisok_table.Active:=False;spisok_table.Close;
 DeleteTable('',spisok_table.TableName);
 CopyTable('', Table_new.TableName,'',Name);
End;

PM MAIL   Вверх
Akella
Дата 27.10.2006, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Serg1234, пометь тогда как решённый
PM MAIL   Вверх
Serg1234
Дата 27.10.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.6.2006

Репутация: нет
Всего: нет



Вопрос решен
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.