Форум: "Базы";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизdbiDoRestructure Найти похожие ветки
← →
Марина (2002-04-30 09:36) [0]Подскажите, пожалуйста, как с помощью этой функции изменить тип поля БД.Если можно, с примером. Заранее благодарна.
← →
Lusha (2002-04-30 22:11) [1]Пожалуйста... Следующая процедура меняет тип поля FldName на FldType...
procedure ChangeFieldType(Table : TTable; FldName : string; FldType : TFieldType; FldSize : Integer);
const
TableTypeNames : array [TTableType] of PChar = (szPARADOX, szPARADOX, szDBASE, szFoxpro, szASCII);
var TblDesc : CRTblDesc;
Database : TDatabase;
FieldDescs: TFieldDescList;
procedure EncodeFieldDesc(iNum : Integer; var FieldDesc: FLDDesc; const Name: string; DataType: TFieldType; Size: Word);
begin
with FieldDesc do
begin
AnsiToNative(Table.DBLocale, Name, szName, SizeOf(szName) - 1);
iFldType := FldTypeMap[DataType];
iSubType := FldSubTypeMap[DataType];
iFldNum := iNum;
case DataType of
ftString, ftBytes, ftVarBytes, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
ftParadoxOle, ftDBaseOle, ftTypedBinary:
iUnits1 := Size;
ftBCD:
begin
iUnits1 := 32;
iUnits2 := Size;
end;
end;
end;
end;
procedure InitFieldDescriptors;
var
I: Integer;
begin
Table.Open;
with TblDesc do
try
iFldCount := Table.FieldDefs.Count;
SetLength(FieldDescs, iFldCount);
for I := 0 to Table.FieldDefs.Count - 1 do
with Table.FieldDefs[I] do
if FldName <> DisplayName then
EncodeFieldDesc(I + 1, FieldDescs[I], DisplayName, DataType, Size)
else
EncodeFieldDesc(I + 1, FieldDescs[I], FldName, FldType, FldSize);
pFldDesc := BDE.PFLDDesc(FieldDescs);
Check(DbiTranslateRecordStructure(nil, iFldCount, BDE.PFLDDesc(FieldDescs),
TableTypeNames[Table.TableType], nil, pFLDDesc, False));
finally
Table.Close;
end;
end;
procedure InitOperationTypes;
var J : Integer;
F : pCROpType;
begin
TblDesc.pecrFldOp := AllocMem(SizeOf(CROpType) * TblDesc.iFldCount);
F := TblDesc.pecrFldOp;
for J := 0 to TblDesc.iFldCount - 1 do
begin
if Table.FieldDefs[J].DisplayName = FldName then
F^ := crModify
else F^ := crNoop;
inc(F);
end;
end;
begin
Table.DisableControls;
Database := Table.OpenDatabase;
with TblDesc do
try
if Database.IsSQLBased then
raise Exception.Create("Изменение структуры SQL таблиц не предусмотрено.");
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
StrPCopy(TblDesc.szTblName, Table.TableName);
InitFieldDescriptors;
InitOperationTypes;
Check(DbiDoRestructure(Database.Handle, 1, @TblDesc, nil, nil, nil, False));
finally
if Assigned(TblDesc.pecrFldOp) then FreeMem(TblDesc.pecrFldOp);
Table.CloseDatabase(Database);
Table.EnableControls;
end;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c