Fórum Ajuda sobre como utilizar o MDO com ClientDataSet #323406

15/06/2006

0

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:
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

Faustoalves

Responder

Posts

15/06/2006

Paullsoftware

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:
    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..


Responder

Gostei + 0

15/06/2006

Faustoalves

Troque o PharmaCon, pelo nome que vc deu ao seu componente Connection.

Fausto


Responder

Gostei + 0

15/06/2006

Paullsoftware

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...


Responder

Gostei + 0

15/06/2006

Faustoalves

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


Responder

Gostei + 0

15/06/2006

Paullsoftware

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar