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

Вниз

Изменение длины "стрингового" поля   Найти похожие ветки 

 
Drowsy   (2008-03-26 06:50) [0]

Нужно изменить длину поля типа ftString в заполненной таблице.
Я накарябал функцию. Работает.
Но, наверняка, можно сделать проще и изящнее.
Уважаемые посетители, кому не лень,
посмотрите и скажите об этом что-нибудь и предложите
как правильнее эту задачулю выполнить.

//===========================================================================
// Изменение длины стрингового поля в заполненной таблице.
//===========================================================================
function ChangeLengthOfStringField ( DBaseName, TblName, FldName : String;
                                    const NewFldSize : Integer = 0;
                                    const TestList : TStrings = Nil) : boolean;

var SQLSel, SQLNew : TQuery;
   TblRes : TTable;
   SQLStr : string;

begin
if Assigned(TestList) then begin
  TestList.Add(" База : " + DBaseName + "   Таблица : " + TblName );
  TestList.Add(" Изменение длины строкового поля : " + FldName );
end;
SQLSel := TQuery.Create(Nil);
SQLNew := TQuery.Create(Nil);
TblRes := TTable.Create(Nil);

try
  // Сохраняем поле в наборе SQLSel
  with SQLSel do begin
    DatabaseName  := DBaseName;
    SQLStr := "SELECT " + FldName + " FROM " + TblName;
    SQL.Clear;
    SQL.Add(SQLStr);
    Open;

    if SQLSel.FindField(FldName) <> nil then
    begin
      if Assigned(TestList) then begin
         TestList.Add(" Поле : " + FldName + "  найдено. " );
         TestList.Add(" Изменение ... ");
      end;
    end;
  end;
  // Изменем длину поля
  with SQLNew do begin
    DatabaseName  := DBaseName;
    SQL.Clear;

    SQLStr := "ALTER TABLE "" + TblName + "" " +
               " DROP " + FldName + ", ADD " + FldName + " CHAR(" + IntToStr(NewFldSize) + ")" ;

    SQL.Add(SQLStr);
    ExecSQL;
  end;

  // заполняем поле реструктурированной таблицы.
  with TblRes do begin
    DatabaseName  := DBaseName;
    TableName := TblName;
    Open;
    SQLSel.First;

    While (not SQLSel.Eof) and (not TblRes.Eof) do begin
       Edit;
       FieldByName(FldName).AsString := SQLSel.FieldByName(FldName).AsString;
       SQLSel.Next;
       TblRes.Next;
    end;
  end;

  SQLSel.Close;
  TblRes.Close;

  SQLSel.Destroy;
  SQLNew.Destroy;
  TblRes.Destroy;

  result := true;

except on E : EDataBaseError do begin
         ShowMessage(E.Message);
    SQLSel.Destroy;
    SQLNew.Destroy;
    TblRes.Destroy;
    if Assigned(TestList) then
      TestList.Add(" ... Ошибка.");
  end;
end;
end;


 
Loginov Dmitry ©   (2008-03-26 07:54) [1]

открой справку
C:\Program Files\Common Files\Borland Shared\BDE\BDE32.HLP
там есть готовый пример для функции DbiDoRestructure()



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

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

Наверх




Память: 0.47 MB
Время: 0.018 c
15-1217526543
Курдль
2008-07-31 21:49
2008.09.21
Предлагаю "освоить" приличную сумму


15-1217321290
Правильный$Вася
2008-07-29 12:48
2008.09.21
реанимация rar-архива


8-1185991832
DelphiKettle
2007-08-01 22:10
2008.09.21
MediaPlayer


2-1218354797
Rimdus
2008-08-10 11:53
2008.09.21
коррекция даты по календарб рабочих дней


2-1218381466
кирилл
2008-08-10 19:17
2008.09.21
подскажите тип