Ajuda sobre como utilizar o MDO com ClientDataSet
Bom dia pessoal..
Atualmente eu utilizo o DBExpress e estou querendo mudar para o MDO, devido ao acesso nativo, faço uso constante do ClientDataSet hoje minha conexão se resume da seguinte forma:
[b:3968bf5b1e]SQLConnection<-SQLDataSet<-DataSetProvider<-ClienteDataSet<-DataSource.[/b:3968bf5b1e]
Como eu substituiria a conexão acima com o MDO?
Vejo muito o pessoal falando sobre o [b:3968bf5b1e]CommitRetain,[/b:3968bf5b1e] como ele deve ser setado?
Hoje para recuperar o código de um generator e mostra-lo na hora do Post eu utilizo o seguinte codigo:
[b:3968bf5b1e]A função NewGen:[/b:3968bf5b1e]
Utilizando o MDO teria como eu me livrar desta parafernália de código? Pois somente o tenho para o usuário ver o código no form logo após confirmar uma inclusão.
Se algum amigo que utilize o MDO, puder me dar estas dicas desde já serei muito grato, mais uma coisa como vc´s trabalham os campos de lookup, exemplo:
Estou no cadastro de pedidos e lá dentre outras FK´s tenho o codigo do cliente que preciso mostrar no form o nome associado ao cliente mais ou menos assim :
Cliente: [b:3968bf5b1e]1876[/b:3968bf5b1e] JOAO DA SILVA CARVALHO NETO, como voces trabalham isto?
Grato
Fausto
Atualmente eu utilizo o DBExpress e estou querendo mudar para o MDO, devido ao acesso nativo, faço uso constante do ClientDataSet hoje minha conexão se resume da seguinte forma:
[b:3968bf5b1e]SQLConnection<-SQLDataSet<-DataSetProvider<-ClienteDataSet<-DataSource.[/b:3968bf5b1e]
Como eu substituiria a conexão acima com o MDO?
Vejo muito o pessoal falando sobre o [b:3968bf5b1e]CommitRetain,[/b:3968bf5b1e] como ele deve ser setado?
Hoje para recuperar o código de um generator e mostra-lo na hora do Post eu utilizo o seguinte codigo:
procedure TDMServer.DSPEmpresaBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean); begin if UpdateKind in [ukInsert] then DeltaDS.FieldByName(´EMPCOD´).NewValue := NewGen(´GEN_EMPRESAS´); end;
[b:3968bf5b1e]A função NewGen:[/b:3968bf5b1e]
function TDMServer.NewGen(GenName: String): integer; var ResultSet: TCustomSQLDataSet; SQLstmt: string; begin SQLStmt := ´SELECT CAST(gen_id(´ + GenName + ´,1)as integer) as valor from RDB$DATABASE;´; ResultSet := nil; try PharmaCon.Execute(SQLstmt, nil, @ResultSet); if Assigned(ResultSet) then begin Result := ResultSet.FieldByName(´valor´).AsInteger; end; finally ResultSet.Free; end; end;
Utilizando o MDO teria como eu me livrar desta parafernália de código? Pois somente o tenho para o usuário ver o código no form logo após confirmar uma inclusão.
Se algum amigo que utilize o MDO, puder me dar estas dicas desde já serei muito grato, mais uma coisa como vc´s trabalham os campos de lookup, exemplo:
Estou no cadastro de pedidos e lá dentre outras FK´s tenho o codigo do cliente que preciso mostrar no form o nome associado ao cliente mais ou menos assim :
Cliente: [b:3968bf5b1e]1876[/b:3968bf5b1e] JOAO DA SILVA CARVALHO NETO, como voces trabalham isto?
Grato
Fausto
Faustoalves
Curtidas 0
Respostas
Paullsoftware
15/06/2006
Bom dia, aproveitando a sua dúvida, gostaria de saber como funciona essa função??
Tentei compilá-la para entender mais não reconhece a linha abaixo:
dá erro no [b:1d7ed8a921]PharmCon[/b:1d7ed8a921]... como devo proceder?
Sempre que procurei substituir os Geradores e Triggers usei a procedure abaixo:
grato! e disculpa se aproveitar da sua dúvida..
Tentei compilá-la para entender mais não reconhece a linha abaixo:
PharmaCon.Execute(SQLstmt, nil, @ResultSet);
dá erro no [b:1d7ed8a921]PharmCon[/b:1d7ed8a921]... como devo proceder?
Sempre que procurei substituir os Geradores e Triggers usei a procedure abaixo:
procedure Incrementa(aConexao:TSQLConnection;Nome_Tabela: String; Chave_Primaria: TField); var Qry:TSQLQuery; begin if Chave_Primaria.DataSet.State<>dsInsert then Exit; Qry := TSQLQuery.Create(nil); Try Qry.SQLConnection := aConexao; Qry.CommandText := ´Select Max(´+chave_primaria.FieldName+´) From ´+nome_tabela; Qry.Open; if Qry.Fields[0].IsNull then chave_primaria.AsInteger := 1 else chave_primaria.AsInteger := Qry.Fields[0].AsInteger+1; finally FreeAndNil(Qry); end; end; (* Incrementa *)
grato! e disculpa se aproveitar da sua dúvida..
GOSTEI 0
Faustoalves
15/06/2006
Troque o PharmaCon, pelo nome que vc deu ao seu componente Connection.
Fausto
Fausto
GOSTEI 0
Paullsoftware
15/06/2006
Troque o PharmaCon, pelo nome que vc deu ao seu componente Connection.
Fausto
blz... :)
só complementando essa função serve para disparar o gerador? quer dizer que não preciso usar trigger???
desculpa a ingnorância, mais é que depois que passei a usar dbexpress somente tenho ultilizado a função que mensionei...
GOSTEI 0
Faustoalves
15/06/2006
Sim, na verdade quem dispara o generator é o Gen_Id, dê uma lida nas documetações do FB e procure pela função Gen_Id.. já te adianto que ela recebe dois parametros:
1- nome do Generator
2- o incremento , se vc passar o nº 0 ela retorna o nº atual do generator.
Vc vai encontrar muitas dicas sobre FB com Delphi neste site:
www.firebase.com.br
[]´s
Fausto
ps: sei que no Mdo não há a necessidade de se utilizar esta codificação
1- nome do Generator
2- o incremento , se vc passar o nº 0 ela retorna o nº atual do generator.
Vc vai encontrar muitas dicas sobre FB com Delphi neste site:
www.firebase.com.br
[]´s
Fausto
ps: sei que no Mdo não há a necessidade de se utilizar esta codificação
GOSTEI 0
Paullsoftware
15/06/2006
Valeu, eu já usava os Geradores e Triggers no proprio banco, mais quando usava componentes nativos da paleta ´Interbase´ com IbDataSet não tinha problemas, porém, depis que passei pra FireBird comecei a infrentar esses problemas...
Novamente obrigado pelas respostas e desculpa ter invadido o seu assunto com minhas dúvidas... :roll:
Novamente obrigado pelas respostas e desculpa ter invadido o seu assunto com minhas dúvidas... :roll:
GOSTEI 0