Pegar Sql gerada pelo Provider antes de atualizar no banco

Firebird

07/01/2005

Pessoal tem como no DtsProvider eu pegar a SQL que ele montou antes de atualizar no banco de dados . Pq estou com um problema a dias e nao consigo resolver..Quero que quando for atualizar algum registro ou excluir ele passe o parametro somente a chave primária [ upWhereKeyOnly ]. Ja alterei no ClientDatSet do campo da chave primaria [ PflInkey=True ] mas so da pau, fala [ unabled To Find Record, no Key Specified ]

Valeu


Michel

Michel

Curtidas 0

Respostas

Bon Jovi

Bon Jovi

07/01/2005

Colocando UpdateMode = upWhereKeyOnly e setando corretamente os providerflags dos TFields já deveria funcionar sim.

Exemplo:

object ClientDataSet1: TClientDataSet
  ProviderName = ´DataSetProvider1´
  Left = 4
  Top = 4
  object ClientDataSet1CHAVE: TIntegerField
    FieldName = ´CHAVE´
    ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
  end
  object ClientDataSet1NAOCHAVE: TStringField
    FieldName = ´NAOCHAVE´
    ProviderFlags = [pfInUpdate]
    Size = 10
  end
end
object DataSetProvider1: TDataSetProvider
  DataSet = ADODataSet1
  UpdateMode = upWhereKeyOnly
  Left = 36
  Top = 4
end
object ADODataSet1: TADODataSet
  Left = 68
  Top = 4
  object ADODataSet1CHAVE: TIntegerField
    FieldName = ´CHAVE´
    ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
  end
  object ADODataSet1NAOCHAVE: TStringField
    FieldName = ´NAOCHAVE´
    ProviderFlags = [pfInUpdate]
    Size = 10
  end
end


Note q além de pfInKey, deve-se colocar tb pfInUpdate e pfInWhere nos campos q fazem parte da chave primária.

Mas se ainda precisar depurar ou mexer, coloque um breakpoint em um desses métodos:

TSQLResolver.InternalDoUpdate(Tree: TUpdateTree; UpdateKind: TUpdateKind);
TSQLResolver.DoExecSQL(SQL: TStringList; Params: TParams);
($(DELPHI)\Source\Vcl\Provider.pas)

Terá q marcar ´use debug DCUs´ em Project/Options/Compiler.

Se precisar alterar o SQL montado, terá q dar herdar e dar override no método DoExecSQL.


GOSTEI 0
Bon Jovi

Bon Jovi

07/01/2005

dar herdar :? herdar


GOSTEI 0
Michel

Michel

07/01/2005

Colega que negocio doido, eu apenas removi o meu provider e coloquei outro mas i nada e funcionou agora...

Obrigado...Valeu


GOSTEI 0
Michel

Michel

07/01/2005

Bon Jovi, deu certo pra mim quando o campo era integer, so que preciso que ele seja autoincremento, como devo setar no ClientDataSet ele sendo autoincremento ?


Valeu


GOSTEI 0
POSTAR