Pegar Sql gerada pelo Provider antes de atualizar no banco
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
Valeu
Michel
Curtidas 0
Respostas
Bon Jovi
07/01/2005
Colocando UpdateMode = upWhereKeyOnly e setando corretamente os providerflags dos TFields já deveria funcionar sim.
Exemplo:
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.
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
07/01/2005
dar herdar :? herdar
GOSTEI 0
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
Obrigado...Valeu
GOSTEI 0
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
Valeu
GOSTEI 0