Форум: "Базы";
Текущий архив: 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