Fórum Ajuda sobre como utilizar o MDO com ClientDataSet #323406
15/06/2006
0
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
Curtir tópico
+ 0Posts
15/06/2006
Paullsoftware
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
15/06/2006
Faustoalves
Fausto
Gostei + 0
15/06/2006
Paullsoftware
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
15/06/2006
Faustoalves
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
15/06/2006
Paullsoftware
Novamente obrigado pelas respostas e desculpa ter invadido o seu assunto com minhas dúvidas... :roll:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)