Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.006 c
2-1218196607
TUserClass
2008-08-08 15:56
2008.09.21
Вытащить текст из "чужого" RichEdit а


3-1206525519
Mery
2008-03-26 12:58
2008.09.21
Запрос


15-1217383248
Slider007
2008-07-30 06:00
2008.09.21
С днем рождения ! 30 июля 2008 среда


2-1218437805
fulkon
2008-08-11 10:56
2008.09.21
Диалог выбора директории


15-1217507399
ekto
2008-07-31 16:29
2008.09.21
Подскажите профайлер для D7. Басплатный.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский