[firebase-br] Estou migrando dados do Fb3.0 para Fb4.0

Gladiston Santana gladiston.santana em gmail.com
Segunda Março 18 21:41:08 -03 2024


O que você parece desejar é fazer uma replicação. Sim, você pode. No
entanto, os dados a serem transferidos, em especial, os nomes dos campos já
são conhecidos então não vejo porque tentar descobrir os nomes deles via
código (o que também seria possível), apenas expressamos tais nomes e segue
o jogo.
Você não precisa de que seja uma stored, pode ser simplesmente um script
rodando periodicamente via agendador de tarefas ou via triggers na tabela
que desejo replicar.

Um abraço

Em seg., 18 de mar. de 2024, 17:27, Mário Reis <mariodosreyx em gmail.com>
escreveu:

> Enquanto os colegas continuam carregando dados na minha aplicação FB3.0
> que vou lendo para carregar novos registos no fb4.0 surgiu a necessidade de
> algumas vezes em vez de fazer Insert into
> table_xpto fazer um UpDate Table_Xpto.
> Contudo, só quero atualizar os campos com dados diferentes (mais
> atualizados, porque guardo as datas das atualizações dos campos mais
> relevantes. Então preciso fazer algo como fazemos
> no fazemos no Delphi, como se exemplifica
> do FB30
>    sSql= TRIM(
>    ' SELECT '||
>
>    ' P.PESSOA_ID, P.TITULO_ID, P.APELIDO, P.NOME, P.TIPO_ID, P.NOBI,
> P.ARQIDENT, P.DATEMIBI, P.SEXO)
>    ' FROM PESSOAS P '||
>    ' INNER JOIN SOCIOS S ON S.SOCIOS_ID=P.PESSOA_ID '||
>    ' WHERE S.NOSOC_ID >= '||TRIM(CAST( IN_ID AS VARCHAR(15)) )
>    );
>   FOR
>    EXECUTE STATEMENT
>       ( :sSql )
>       ON EXTERNAL DATA SOURCE :sDB
>       AS USER :IN_USER PASSWORD :IN_PWD -- just for example
>       WITH COMMON TRANSACTION -- note autonomous transaction
>       INTO
>      :PESSOA_ID, :TITULO_ID, :APELIDO, :NOME, :TIPO_ID, :NOBI, :ARQIDENT,
> :DATEMIBI, :SEXO);
> -- Agora vai inserir na FB4
> If row_count()=0 then
>    EXECUTE PROCEDURE PESSOAS_INS(
>       :PESSOA_ID,
>       :TITULO_ID,
>       :APELIDO,
>       :NOME,
>       :TIPO_ID,
>       :NOBI,
>       :ARQIDENT,
>       :DATEMIBI,
>       :SEXO)
> Else
> if row_count()=1 Then
>  begin
>
> For i:=o To FieldCount(()-1 Do   (* Favor ver abaixo a ideia*)
>    if field[i].type= FKData then
>     Set ( delphi_Field[i].Old_Data =delphi_Field[i].NewData
> esta mais antiga vem do FB4:=>      PESSOA_ID=:PESSOA_ID  (onde esta mais
> atual vem do FB3)
>      EXECUTE PROCEDURE PESSOAS_UPD(
>       :PESSOA_ID,
>       :TITULO_ID,
>       :APELIDO,
>       :NOME,
>       :TIPO_ID,
>       :NOBI,
>       :ARQIDENT,
>       :DATEMIBI,
>       :SEXO)
>    Tem como na Stored Procedure de Firebird fazer aquele automático que
> fazemos no delphi
> Alguém tem como ajudar?
>
> Com os meus melhores cumprimentos
> Mário Agostinho Reis
> 919262146
> Procedure AppendCurrent(Dataset:Tdataset);
> VAR
>   aField : Variant ;
>   i      : Integer ;
> BEGIN
>   // create a variant Array
>   aField := VarArrayCreate([0,DataSet.Fieldcount-1],VarVariant);
>
>   // read values into the array
>   for i := 0 to (DataSet.Fieldcount-1) do
>    if (DataSet.fields[i].FieldKind=fkData) then // Exclusivamente campo de
> dados
>      aField[i] := DataSet.fields[i].Value ;
>
>   DataSet.Append ;
>
>   // put array values into new the record
>   for i := 0 to (DataSet.Fieldcount-1) do
>     if (DataSet.fields[i].FieldKind=fkData) then // Exclusivamente campo
> de dados
>      DataSet.fields[i].Value := aField[i] ;
>
> end;
> Esta mensagem contém informação de natureza confidencial e é
> exclusivamente dirigida ao(s) destinatário(s) indicado(s). Se, por engano,
> receber este email agradecemos que não o copie nem o reenvie e que nos
> notifique do ocorrido através do email de resposta.
>


Mais detalhes sobre a lista de discussão lista