Array
(
)

Acesso SQLSERVER com ADO

Rounilo
   - 04 out 2004

Senhores embora não seja um grande conhecedor, já tenho alguns conhecimentos no uso do Delphi, Interbase com IBX. Agora estou tentando aprender alguma coisa usando Delphi, Ms SQLSERVER com engine ADO.

Para facilitar meu aprendizado estou começando lendo um arquivo externo e inserindo estes dados em uma tabela. Tarefa simples, mas não estou conseguindo sucesso. Gostaria de poder contar com a ajuda de vcs.

Estou usando os componentes ADOCONNECTION, ADOQUERY e DATASOURCE.

Estou usando O Microsoft OLE DB Provider for SQL SERVER como opção de conexão.

A lógica de programação é a seguinte:

#Código

procedure TForm1.Button1Click(Sender: TObject);
begin
 AssignFile(ArqPro,´c:\arqobras\Proseq.seq´);
  Reset(ArqPro);
  ADOQS1.Close;
  ADOQS1.OPEN;  
  TotaldeProc:=0;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  while (not eof(arqpro)) do
   begin
   readln(ArqPro,RegPro.codigo,Regpro.Inscri,Regpro.CGC,
    Regpro.Nome,Regpro.Rua,Regpro.Numero,Regpro.Bairro,
    Regpro.CEP,Regpro.DataG,Regpro.Matric,Regpro.DataV,Regpro.DataP,
    Regpro.DamAlv,Regpro.Alvara,Regpro.Descri,Regpro.nada);

    wfordata:=copy(Regpro.DataG,7,2) + ´/´ +
            copy(Regpro.DataG,5,2) + ´/´ +
            copy(Regpro.DataG,1,4);
    wdatag:=strtodate(wfordata);

    wfordata:=copy(Regpro.DataV,7,2) + ´/´ +
            copy(Regpro.DataV,5,2) + ´/´ +
            copy(Regpro.DataV,1,4);
    wdatav:=strtodate(wfordata);

    wfordata:=copy(Regpro.DataP,7,2) + ´/´ +
            copy(Regpro.DataP,5,2) + ´/´ +
            copy(Regpro.DataP,1,4);
    wdatap:=strtodate(wfordata);


   
    ADOQS1.Insert;
     
    ADOQS1.FieldByName(´Procod´).AsString:=RegPro.Codigo;
    ADOQS1.FieldByName(´Inscricao´).AsString:=RegPro.Inscri;
    ADOQS1.FieldByName(´CGC´).AsString:=RegPro.CGC;
    ADOQS1.FieldByName(´Nome´).AsString:=RegPro.Nome;
    ADOQS1.FieldByName(´Rua´).AsString:=RegPro.Rua;
    ADOQS1.FieldByName(´Numero´).AsString:=RegPro.Numero;
    ADOQS1.FieldByName(´Bairro´).AsString:=RegPro.Bairro;
    ADOQS1.FieldByName(´CEP´).AsString:=RegPro.CEP;
    ADOQS1.FieldByName(´Data_Inc´).AsDateTime:=wdatag;
    ADOQS1.FieldByName(´DataVenc´).AsDateTime:=wdatav;
    ADOQS1.FieldByName(´DataStop´).AsDateTime:=wdatap;
    ADOQS1.FieldByName(´DamdoAlvara´).AsString:=RegPro.DamAlv;
    ADOQS1.FieldByName(´TemAlvara´).AsString:=RegPro.Alvara;
    ADOQS1.FieldByName(´Matric´).AsString:=RegPro.Matric;
    ADOQS1.FieldByName(´Descricao´).AsString:=RegPro.descri;

    ADOQS1.Post;
    
    TotaldeProc:= TotaldeProc + 1;
  end;
   ADOQS1.close;
   Label1.Visible:=true;
   Edit1.Visible:=true;
   Edit1.Text:=inttostr(TotaldeProc);
   showmessage(´OK. Final do Programa´);
  
    end;


O problema é que ao final do programa recebo a seguinte mensagem de erro :OPERAÇÃO DE VARIAS ETAPAS GEROU ERRO. VERIFIQUE CADA VALOR DE STATUS.

A tabela é criada porem os ultimos registros não são incluídos.

Qual o erro que estou cometendo.
Como verificar cada valor de STATUS, como sugerido na mensagem acima???

Agradeço qualquer ajuda.

Se VCs conhecem um livro que mostra o desenvolvimento de uma aplicação usando Delphi, MSSQLSERVER com ADO, por favor me informem o nome do livro. Encontrei alguns porem eles trabalham com MS ACCESS.

Obrigado

Aroldo Zanela
   - 04 out 2004

Colega,

No código não vejo nada errado, porém, não entendi o motivo de dois botões: um para abrir e outro para ler. Acredito que pode estar ocorrendo algum problema na formadação de dados ou violação de chave. Tente debugar para verificar o erro.

Rounilo
   - 04 out 2004

Obrigado. Realmente tinha um erro em um campo de data.
Os dois botões foram colocados para me facilitar as varias tentativas de contornar o problema.

Felipe_cduarte
   - 07 out 2004

Fala !

bom, uma sugestão : informe-se sobre o uso de stored procedures, para fazer as operações de inclusão , alteração e exclusão no BD. Utilizo ADO desta forma e funciona mto bem!

[]´s