Главная страница
    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
11-1193561717
files32
2007-10-28 11:55
2008.09.21
Русский язык KOL+Lazarus+WinCE


2-1218469388
AlexDan
2008-08-11 19:43
2008.09.21
BMP на форму


15-1217595794
savyhinst
2008-08-01 17:03
2008.09.21
paszlib


3-1206013469
Евгений Р.
2008-03-20 14:44
2008.09.21
Удаленные записи в DBF


2-1218566528
gear
2008-08-12 22:42
2008.09.21
Как программно передвинуть каретку в TEdit?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский