Estou usando algo assim para incluir um campo em uma tabela em tempo de execução:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables,Grids, DBGrids, BDE, DBCtrls, Menus, ComCtrls, Buttons; type TForm1 = class(TForm) Table1: TTable; Button1: TButton; Button2: TButton; Table2: TTable; procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; type ChangeRec = packed record szName: dbiname; iType: Word; iSubType: Word; iLength: Word; iPrecision: Byte; end; var MyChangeRec: ChangeRec; procedure AddField(Table: TTable; NewField: ChangeRec); implementation {$R *.DFM} procedure AddField(Table: TTable; NewField: ChangeRec); var Props: CURProps; hDb: hDBIDb; TableDesc: CRTblDesc; pFlds: pFLDDesc; pOp: pCROpType; B: byte; begin if Table.Active = False then raise EDatabaseError.Create('A tabela precisa estar aberta'); if Table.Exclusive = False then raise EDatabaseError.Create('A tabela precisa estar aberta em modo Exclusivo'); Check(DbiSetProp(hDBIObj(Table.Handle), curxltMODE, integer(xltNONE))); Check(DbiGetCursorProps(Table.Handle, Props)); pFlds := AllocMem((Table.FieldCount + 1) * sizeof(FLDDesc)); FillChar(pFlds^, (Table.FieldCount + 1) * sizeof(FLDDesc), 0); Check(DbiGetFieldDescs(Table.handle, pFlds)); for B := 1 to Table.FieldCount do begin pFlds^.iFldNum := B; Inc(pFlds, 1); end; try StrCopy(pFlds^.szName, NewField.szName); pFlds^.iFldType := NewField.iType; pFlds^.iSubType := NewField.iSubType; pFlds^.iUnits1 := NewField.iLength; pFlds^.iUnits2 := NewField.iPrecision; pFlds^.iFldNum := Table.FieldCount + 1; finally Dec(pFlds, Table.FieldCount); end; pOp := AllocMem((Table.FieldCount + 1) * sizeof(CROpType)); Inc(pOp, Table.FieldCount); pOp^ := crADD; Dec(pOp, Table.FieldCount); // Blank out the structure... FillChar(TableDesc, sizeof(TableDesc), 0); // Get the database handle from the table's cursor handle... Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb))); // Put the table name in the table descriptor... StrPCopy(TableDesc.szTblName, Table.TableName); // Put the table type in the table descriptor... StrPCopy(TableDesc.szTblType, Props.szTableType); // Close the table so the restructure can complete... TableDesc.iFldCount := Table.FieldCount + 1; Tabledesc.pfldDesc := pFlds; TableDesc.pecrFldOp := pOp; Table.Close; // Call DbiDoRestructure... try Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, FALSE)); finally FreeMem(pFlds); FreeMem(pOp); Table.Open; end; end; procedure TForm1.Button2Click(Sender: TObject); var NumCampos:integer; CampoAtual:SmallInt; NomedoCampo,Inserir:string; codloja:string; begin table1.Open; table2.Open; if length(inttostr(table2.Fields[0].value))=1 codloja:='0'+inttostr(table2.Fields[0].value) else codloja:=inttostr(table2.Fields[0].value) //AQUI DÁ O ERRO//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////// MyChangeRec.szName := 'qtdlj'+CodLoja;///Aqui preciso atribuir como nome do campo qtdlj+conteudo da variavel codloja //porem da mensagem de erro [Error] Unit1.pas(148): Incompatible types: 'DBINAME' and 'String' pois o szName é do tipo DBINAME //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////// MyChangeRec.iType := fldPDXNUM; MyChangeRec.iSubType:=0; MyChangeRec.iLength := 0; MyChangeRec.iPrecision := 0; Table1.Close; Table1.Exclusive := True; Table1.Open; AddField(Table1, MyChangeRec); Table1.Close; Table1.Exclusive := False; Table1.Open; End; ----- Original Message ----- From: "Rubem Nascimento da Rocha" <[EMAIL PROTECTED]> To: <delphi-br@yahoogrupos.com.br> Sent: Tuesday, March 21, 2006 11:26 AM Subject: RE: [delphi-br] String para DbiName > DbiName? De onde vc tirou isso? > Sds. > > > >From: "Emerson Cassio" <[EMAIL PROTECTED]> > >Reply-To: delphi-br@yahoogrupos.com.br > >To: <delphi-br@yahoogrupos.com.br> > >Subject: [delphi-br] String para DbiName > >Date: Tue, 21 Mar 2006 11:17:20 -0400 > > > >Pessoal alguem tem alguma ideia de como converto uma variavel do tipo > >string > >para DbiName? > > > > _________________________________________________________________ > MSN Busca: fácil, rápido, direto ao ponto. http://search.msn.com.br > > > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > > > Links do Yahoo! Grupos > > > > > > > > > -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html