Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание и удаление полей dbase с SQL и без 
:(
    Опции темы
andrew_newman
Дата 1.2.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробую создать новое поле в существующей таблице (dbase IV) этим кодом:
Код

procedure TForm1.Button2Click(Sender: TObject);
var Field: TField;i:integer;
begin
  if Table1.Active=True then Table1.Active:=False;
  Table1.Exclusive:=True;
  Table1.FieldDefs.Update;
  Field := TBooleanField.Create(Table1);
  Field.FieldName := 'andrew';
  Field.Calculated := False;
  Field.DataSet := Table1;
  Table1.Active:=True;
end;


Выдает ошибку Table1 cannot find field 'andrew'. Вопрос как правильно добавить и удалить поле
PM MAIL ICQ   Вверх
Rodman
Дата 1.2.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Я не знаю, как при помощи TTable добавлять, но мне кажется тут не то написано... 

Лучше при помощи SQL запроса добавлять - и короче, и эффективнее...

смотри ALTER TABLE
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Texas
Дата 1.2.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Rodman @ 1.2.2007,  17:41)
Я не знаю, как при помощи TTable добавлять, но мне кажется тут не то написано... 

Лучше при помощи SQL запроса добавлять - и короче, и эффективнее...

смотри ALTER TABLE

Согласен на 100%

Автору топа: Тебе нужно добавить всего одно поле и сколько кода написано, а представь сколько прийдется писать если нужно будет добавить их штук 10, запутаешся. Вместо того чтобы тратить время на TTable, лучьше учи SQL, пригодится и не раз.
PM MAIL   Вверх
andrew_newman
Дата 1.2.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Texas @ 1.2.2007,  18:11)
Автору топа: Тебе нужно добавить всего одно поле и сколько кода написано, а представь сколько прийдется писать если нужно будет добавить их штук 10, запутаешся. Вместо того чтобы тратить время на TTable, лучьше учи SQL, пригодится и не раз.

нужно создать поле типа boolean если не трудно напиши SQL на добавление
PM MAIL ICQ   Вверх
dimazu
Дата 1.2.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно вот так:
Код

Procedure AddField(datPath,datFile,datFieldName, datFieldType:String);
var AlterQry : TQuery;
    tmpTable : TTable;
    i: integer;
begin
    // Create a temporary TQuery to perform the ALTER TABLE command.
    AlterQry := TQuery.Create(nil);
    AlterQry.DatabaseName := datPath;
    tmpTable := TTable.Create(nil);
    tmpTable.DatabaseName := datPath;
    tmpTable.TableName := datFile;
    // Check if Field already exists in DataSet
    tmpTable.Open;
    with tmpTable do
      for i := 0 to FieldCount - 1 do
       if Fields[i].FieldName = datFieldName then
         begin
          AlterQry.Close;
          AlterQry.Free;
          tmpTable.Close;
          tmpTable.Free;
          exit;
         end;
    tmpTable.Close;
    tmpTable.Free;
    // Add the new field(s).
    AlterQry.SQL.Clear;
    AlterQry.SQL.Add('ALTER TABLE "'+datFile+'" ADD '+datFieldName+' '+datFieldType);
    try
     AlterQry.ExecSQL;
    except
    ;
    end;
    // Initialize one of the new fields in all records.
    AlterQry.SQL.Clear;
    AlterQry.SQL.Add('UPDATE "'+datFile+'" SET '+datFieldName+' = "" ');
    AlterQry.ExecSQL;
    // Destroy the temporary TQuery.
    AlterQry.Free;
end;


Вызывай так:
Код

 AddField('C:\dddd','dddd.DBF','Temp_1','BOOLEAN');


Это сообщение отредактировал(а) dimazu - 1.2.2007, 21:47
PM MAIL   Вверх
andrew_newman
Дата 1.2.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, наконец то человеческий ответ. +5 Ща пробовать буду
PM MAIL ICQ   Вверх
andrew_newman
Дата 1.2.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ещё бы с переименованием и удалением полей разобраться
PM MAIL ICQ   Вверх
dimazu
Дата 2.2.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Для стирания - вот пример:
Код

Procedure DelField(datPath,datFile,datFieldName:String);
var AlterQry : TQuery;
    tmpTable : TTable;
    i: integer;
    _Exist : Boolean;
begin
    // Create a temporary TQuery to perform the ALTER TABLE command.
    _Exist:=False;
    AlterQry := TQuery.Create(nil);
    AlterQry.DatabaseName := datPath;
    tmpTable := TTable.Create(nil);
    tmpTable.DatabaseName := datPath;
    tmpTable.TableName := datFile;
    // Check if Field already exists in DataSet
    tmpTable.Open;
    with tmpTable do
      for i := 0 to FieldCount - 1 do
       if Fields[i].FieldName = datFieldName then
         _Exist:=True;
    tmpTable.Close;
    tmpTable.Free;
    if _Exist then
    Begin
      AlterQry.SQL.Clear;
      AlterQry.SQL.Add('ALTER TABLE "'+datFile+'" DROP '+datFieldName);
      try
        AlterQry.ExecSQL;
      except
        ;
      end;
    End; //If
    // Destroy the temporary TQuery.
    AlterQry.Close;
    AlterQry.Free;
  end;

Вызов:
Код

 DelField('C:\ddddd','dddd.DBF','Temp_1');


А для переименования ты уж сам давай...  smile 
Код

  ALTER TABLE имя_таблицы CHANGE имя_поля1 имя_поля2 тип_поля

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


Творец
****


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

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



andrew_newman, посмотри вниз странички
PM MAIL   Вверх
andrew_newman
Дата 2.2.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо за ответы, особенно dimazu за человеческое отношение и терпимость.
PM MAIL ICQ   Вверх
Rodman
Дата 2.2.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



andrew_newman, изучи на досуге...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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