Sobre DbExpress não Grava

21/02/2006

E AI BLZ
e o seguinte estou com algumas duvida aqui no Dbexpress
ProviderFlags

pra o campo chave eu estou colocando assim

pfInUpdate = True
pfInWhere = True
pfInKey = True

e nos de mais assim

pfInUpdate = True
pfInWhere = False
pfInKey = False

so que não esta gravando

quando edito os registros

eu coloca esta configuração do ProviderFlags tanto no ClientDataSet e tbm no SqlDataSet

onde posso esta errando
por que não esta gravando


para não ficar duvida eu chamo o metodo ApplyUpdates(0);


Pro2

Respostas

21/02/2006

Rod8

tente usar a flag nos demais campos:

pfInWhere = True

eu uso assim e nao tenho problemas ... so coloco:

pfInWhere = False
pfInUpdate = false

quando é um campo q nao pertence a tabela que pretendo gravar.


Responder Citar

21/02/2006

Martins

tente usar a flag nos demais campos: pfInWhere = True eu uso assim e nao tenho problemas ... so coloco: pfInWhere = False pfInUpdate = false quando é um campo q nao pertence a tabela que pretendo gravar.


Está retornando algum erro ou simplesmente não grava?

vc está usando ClientDataSet e SqlDataset?


Responder Citar

22/02/2006

Michael

Olá!

Além de ligar/desligar os flags mencionados, vc tbm tem que configurar a propriedade UpdateMode do [b:45f1e4044c]DataSetProvider [/b:45f1e4044c]para [b:45f1e4044c]upWhereKeyOnly[/b:45f1e4044c]. Assim o componente irá montar os comandos SQL utilizando a chave-primária definida acima na cláusula WHERE.

tente usar a flag nos demais campos: pfInWhere = True eu uso assim e nao tenho problemas ... so coloco: pfInWhere = False pfInUpdate = false quando é um campo q nao pertence a tabela que pretendo gravar.


A propriedade [b:45f1e4044c]ProviderFlags [/b:45f1e4044c]da classe [b:45f1e4044c]TField [/b:45f1e4044c]não serve exatamente para isso, mas sim para dizer como o DataSetProvider vai montar as instruções SQL de atualização da tabela no banco. Se vc deixar todos os campos configurados com [b:45f1e4044c]pfInWhere[/b:45f1e4044c], então a edição de um registro vai gerar algo assim:

UPDATE TABELA SET CAMPO1=:CAMPO1, CAMPO2=:CAMPO, ... [b:45f1e4044c]WHERE CAMPO1 = <VALOR_ANTIGO_DE_CAMPO1> AND CAMPO2 = <VALOR_ANTIGO_DE_CAMPO2>[/b:45f1e4044c]...


Isso pode causar problemas em alterações do mesmo registro por usuários diferentes. Há uma vídeo aula no site do ClubeDelphi, produzida pelo meu amigo [b:45f1e4044c]Guinther Pauli[/b:45f1e4044c], que mostra como usar essas propriedades do [b:45f1e4044c]TField [/b:45f1e4044c]e do [b:45f1e4044c]TDataSetProvider[/b:45f1e4044c]. Quem for assinante ou tiver comprado a revista na banca pode acessá-la [url=http://www.devmedia.com.br/visualizacomponente.aspx?comp=548&site=3]neste link[/url].

[]´s


Responder Citar