Como saber se um field é chave?
Olá pessoal!
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!!!
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
Curtidas 0
Respostas
Cristiano Alves
01/09/2006
Bom quando o Campo é Chave, o TField fica com a propriedade required com [b:c9d2a8b4e3]TRUE[/b:c9d2a8b4e3], é claro que nada impede de vc marcar outros tFields com Required´s.
Vc pode verificar tmb Providers Flags, coloque o Campo chave como pflnKey = True
Acho que isso da pra resolver
[]s
Vc pode verificar tmb Providers Flags, coloque o Campo chave como pflnKey = True
Acho que isso da pra resolver
[]s
GOSTEI 0
Macario
01/09/2006
Completando as informações do nosso colega [b:9d7350d43d]cmainfor[/b:9d7350d43d]
Espero ter ajudado.
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
Alissonmelo
01/09/2006
Valeu galera, mas acho q não vai funcionar. Adicionei os fields na minha query/clientDataSet e e quando seleciono um field que faz parte da minha chave, a propriedade pfLnKey fica com valor ´false´
GOSTEI 0
Alissonmelo
01/09/2006
Valeu galera, mas acho q não vai funcionar. Adicionei os fields na minha query/clientDataSet e e quando seleciono um field que faz parte da minha chave, a propriedade pfLnKey fica com valor ´false´
GOSTEI 0
Marco Salles
01/09/2006
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?
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
Macario
01/09/2006
Valeu galera, mas acho q não vai funcionar. Adicionei os fields na minha query/clientDataSet e e quando seleciono um field que faz parte da minha chave, a propriedade pfLnKey fica com valor ´false´
Se ele faz parte da [b:10770cfbcc]PK[/b:10770cfbcc], então mude a propriedade para [b:10770cfbcc]True[/b:10770cfbcc]
GOSTEI 0
Marco Salles
01/09/2006
cara , voce sabe como é , a gente atende telefone , faz diversas atividades e muita das vezes não presta a devida atenção na pergunta dos amigos :oops: :oops:
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:
enfim , recuperar MetaDados no DbExpress é mole :lol: :lol:
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:
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....
Para usar essa interface, devemos usar o método SetSchemaInfo de um DataSet do dbExpress.
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
Alissonmelo
01/09/2006
Esquenta não. Posso ligar um clientDataset à um SQLQuery do DbExpress e recuperar a informação usando setSchemaInfo, porém á uma demora muito grande na hora de retornar as informações e fica inviável de utilizar, mesmo pq estou desenvolvendo uma FrameWork e esse tipo de demora não seria bom.
Mesmo assim valeu!
Mesmo assim valeu!
GOSTEI 0