Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.01 c
15-1217383248
Slider007
2008-07-30 06:00
2008.09.21
С днем рождения ! 30 июля 2008 среда


2-1218390406
Павлик
2008-08-10 21:46
2008.09.21
Подскажите как сделать кнопку округлой формы


2-1218434218
Mops
2008-08-11 09:56
2008.09.21
TWebbrowser и IE


15-1217024688
Германн
2008-07-26 02:24
2008.09.21
Редактирование AVI с видеокамеры Panasonic


6-1192447120
Адепт
2007-10-15 15:18
2008.09.21
Изменяем октеты в ip адресе. Изменяем Маску подсети. КАК?




   Наверх