Emerson;

clique em sima do tipo DbiName. na declaração com a variavel, que o
delphi vai te levar ate 
a declaração do tipo.

dai se descobre qual que é o tipo de dados ancestral e converte para ele
a string.

funciona?


Atenciosamente;



*******************************************
|                                         |
|   O------.  Elazar Dornelles Ceza       |
|    / / / /  [EMAIL PROTECTED]        |
|   O O O O   (51) 91673488               |
|  / / / /                                |
|    Ábacus - Tecnologia da Informação    |
|    www.abacus.inf.br (54) 3443-5150     |
******************************************* 
-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
Em nome de Emerson Cassio
Enviada em: terça-feira, 21 de março de 2006 14:34
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] String para DbiName


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 >>>>>





Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE
 




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 Termos do Serviço
do Yahoo!. 


                
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! 
http://br.acesso.yahoo.com


-- 
<<<<< 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

 



Responder a