Ir para conteúdo
Fórum CódigoFonte.net
Entre para seguir isso  
Igna

Erro

Recommended Posts

Ola malta, estou a fazer um mini programa que passa os dados de uma base de dados sql server para uma base de dados access, o objectivo e inserir os dados de tres das tabela do sql server(artigos,preco,precocusto) na tabela access, se o artigo ja existir este deve actualizar.

Aqui deixo o codigo e mais a baixo o erro

procedure TForm10.BEnviarClick(Sender: TObject);

Var TextoSQL,TempPreco,d,descr,TempPrecoCusto,Preco,PrecoCusto : String;

    Flag : Boolean;

    I: Integer;

begin


   // Colocar o JOIN no primeiro registo

         DataModule1.join.First;

   //Fazer ciclo While para percorrer todos os registos do JOIN

     while (not datamodule1.Join.Eof) do

     begin

       //Dentro do ciclo procurar o artigo na tabela do Access   [Vou fazer esta parte do código por que é mais complicada]


       Datamodule1.Taccess.IndexFieldNames:='codigo';     //Activa o indice porcódigo para ser mais rápida a pesquisa

       if Datamodule1.Taccess.Locate('codigo',Datamodule1.Join.FieldByName('StrCodigo').asstring,[]) then   //Procura o código

       begin //se encontrou o artigo na tabela Access deve actualizar o registo ou não ?????

          DataModule1.TacCess.edit;

           //COPIAR DADOS E POST

                Begin

           // Retirar Aspas da descrição dos artigos

           d := DataModule1.Join['STRDescricao'];

           for I := 1 to Length(d) do

           Begin

              if d[i] <> '"' then

                if i=1 then

                   descr:=d[i]

                Else

                   descr:=descr+d[i];

           End;


           // Substituir as virgulas por pontos do Preço

            TempPreco:=  FloatToStr(DataModule1.Join['FLTPreco']);

            For I := 1 to Length(TempPreco) do

              If TempPreco[i] = ',' then

                Preco := Preco + '.'

              Else

                If I=1 then

                  Preco := TempPreco[i]

                Else

                  Preco := Preco + TempPreco[i];

            // Substituir as virgulas por pontos do Preço Custo

            TempPrecoCusto := FloatToStr(DataModule1.Join['FLTPCUltimo']);

            For I := 1 to Length(TempPrecoCusto) do

              If TempPrecoCusto[i] = ',' then

                PrecoCusto :=  PrecoCusto + '.'

              Else

                If I=1 then

                  PrecoCusto := TempPrecoCusto[i]

                Else

                  PrecoCusto := PrecoCusto + TempPrecoCusto[i];

          //Inserir o Registo na Tabela Access

          Datamodule1.Taccess.Insert;

          Datamodule1.Taccess.fieldbyname('codigo').AsString:= Datamodule1.Join.FieldByName('StrCodigo').asstring;

          Datamodule1.Taccess.fieldbyname('desc').AsString:= descr+' '+precocusto+' '+preco;

        //  Datamodule1.Taccess.fieldbyname('id_familia').AsString:= Datamodule1.Join.FieldByName('Strid_familia').asstring;

          Datamodule1.Taccess.fieldbyname('preco1').AsString:= Datamodule1.Join.FieldByName('fltpreco').asstring;

          Datamodule1.Taccess.fieldbyname('pcusto').AsString:= Datamodule1.Join.FieldByName('fltpcultimo').asstring;

          Datamodule1.Taccess.fieldbyname('iva').AsString:= Datamodule1.Join.FieldByName('intTpIva').asstring;


          //acaba aqui de preencher os restantes campos

          //Datamodule1.Taccess.fieldbyname('desc').AsString:=


          //Gravar o registo

          Datamodule1.Taccess.Post;

       end;


       end

       else   // se NÃO encontrou o o artigo na tabela Access insere-o

       DataModule1.Tartigos.insert;

       begin

          //Fazer aquilo que está a ser feito no outro botão, retirar aspas, substituir virgulas por pontos, etc

          Begin

           // Retirar Aspas da descrição dos artigos

           d := DataModule1.Join['STRDescricao'];

           for I := 1 to Length(d) do

           Begin

              if d[i] <> '"' then

                if i=1 then

                   descr:=d[i]

                Else

                   descr:=descr+d[i];

           End;


           // Substituir as virgulas por pontos do Preço

            TempPreco:=  FloatToStr(DataModule1.Join['FLTPreco']);

            For I := 1 to Length(TempPreco) do

              If TempPreco[i] = ',' then

                Preco := Preco + '.'

              Else

                If I=1 then

                  Preco := TempPreco[i]

                Else

                  Preco := Preco + TempPreco[i];

            // Substituir as virgulas por pontos do Preço Custo

            TempPrecoCusto := FloatToStr(DataModule1.Join['FLTPCUltimo']);

            For I := 1 to Length(TempPrecoCusto) do

              If TempPrecoCusto[i] = ',' then

                PrecoCusto :=  PrecoCusto + '.'

              Else

                If I=1 then

                  PrecoCusto := TempPrecoCusto[i]

                Else

                  PrecoCusto := PrecoCusto + TempPrecoCusto[i];

          //Inserir o Registo na Tabela Access

          Datamodule1.Taccess.Insert;

          Datamodule1.Taccess.fieldbyname('codigo').AsString:= Datamodule1.Join.FieldByName('StrCodigo').asstring;

          Datamodule1.Taccess.fieldbyname('desc').AsString:= descr+' '+precocusto+' '+preco;

        //Datamodule1.Taccess.fieldbyname('id_familia').AsString:= Datamodule1.Join.FieldByName('Strid_familia').asstring;

          Datamodule1.Taccess.fieldbyname('preco1').AsString:= Datamodule1.Join.FieldByName('fltpreco').asstring;

          Datamodule1.Taccess.fieldbyname('pcusto').AsString:= Datamodule1.Join.FieldByName('fltpcultimo').asstring;

          Datamodule1.Taccess.fieldbyname('iva').AsString:= Datamodule1.Join.FieldByName('intTpIva').asstring;


          //acaba aqui de preencher os restantes campos

          //Datamodule1.Taccess.fieldbyname('desc').AsString:=


          //Gravar o registo

          Datamodule1.Taccess.Post;

       end;


   // Avançar para o proximo registo do JOIN

      DataModule1.join.next;

   end;

end;


end;

O erro que me dá e este

"As alterações pedidas para a tabela não foram bem sucedidas, pois iriam criar valores duplicados no indice, na tecla primaria, ou no relacionamento.

altere os dados do campo ou os campos que contem os dados duplicados, remova ou indice ou volte a definir o indice para que as entradas possam ser duplicadas e tente de novo"

Alguem me dá uma ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×
×
  • Criar Novo...