Fórum Como saber se um field é chave? #328429
01/09/2006
0
Tenho um ClientDataSet e preciso saber quais dos fields que ele carrega fazem parte da chave primária. Isso é possível saber pelo clientDataSet ou existiriam outras formas?
Falows!!!
Alissonmelo
Curtir tópico
+ 0Posts
01/09/2006
Cristiano Alves
Vc pode verificar tmb Providers Flags, coloque o Campo chave como pflnKey = True
Acho que isso da pra resolver
[]s
Gostei + 0
01/09/2006
Macario
if (pfInKey in ClientDataset.field[x].ProviderFlags) then Showmessage(´Este campo é ou faz parte da chave primaria´);
if (pfInKey in ClientDataset.fieldByName(´NomeCampo´).ProviderFlags) then Showmessage(´Este campo é ou faz parte da chave primaria´);
Espero ter ajudado.
Gostei + 0
01/09/2006
Alissonmelo
Gostei + 0
01/09/2006
Alissonmelo
Gostei + 0
01/09/2006
Marco Salles
No dbExpress, a interface responsável pela obtenção de metadados é a ISQLMetaData, declarada na unit DBXpress.pas
Existem vários métodos aonde podemos recuperar praticamente qualquer informação do catálogo do BD, como nomes de tabelas, tipos e nomes de campos, informações sobre Stored Procedures etc....
[b:ac845f4e3a]Para usar essa interface, devemos usar o método SetSchemaInfo de um DataSet do dbExpress.[/b:ac845f4e3a]
exemplo:
//campo que voce quer saber
//tb:Tabela que voce quer
function TForm1.verificaIndice(Campo,tb:string):Boolean;
begin
result:=False;
ClientDataSet1.Close;
SQLQuery2.SetSchemaInfo(stIndexes,tb,´´);
ClientDataSet1.Open;
While not Form1.ClientDataSet1.eof do
begin
if ClientDataSet1.FieldByName(´COLUMN_NAME´).AsString = campo then
begin
result:=True;
Break;
end
else
ClientDataSet1.next;
end;
end;
Gostei + 0
01/09/2006
Macario
Se ele faz parte da [b:10770cfbcc]PK[/b:10770cfbcc], então mude a propriedade para [b:10770cfbcc]True[/b:10770cfbcc]
Gostei + 0
02/09/2006
Marco Salles
Quando voce disse clientDataset eu rapidamete associei ao DbExpress
Quando voce disse chave primária eu rapidamente associei aos Indices
foi uma distração minha , que venho aqui corrigir ..Pensei que estivesse usando os componentes Dbexpress , não sei porque , acho que é cansaço mesmo.. Sexta feira etc...
Porem deixo aqui registrado que o que falei para o dbexpress e verdade:
Por exemplo para saber qual é a chave primária de uma tabela , batsa executar a função abaixo:
procedure TForm1.Button1Click(Sender: TObject); var tb:String; begin tb:=´NOME DA SUA TABELA´ ClientDataSet1.Close; SQLQuery1.SetSchemaInfo(stIndexes,tb,´´); ClientDataSet1.Open; While not ClientDataSet1.eof do begin if not ClientDataSet1.FieldByName(´PKEY_NAME´).IsNull Then begin Showmessage(´O Campo Chave para esta tabela é :´+ ClientDataSet1.FieldByName(´COLUMN_NAME´).asString); Break; end else ClientDataSet1.Next; end; end;
enfim , recuperar MetaDados no DbExpress é mole :lol: :lol:
Gostei + 0
05/09/2006
Alissonmelo
Mesmo assim valeu!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)