Importação de Dados

Delphi

28/10/2005

Olá a todos,

Estou fazendo um sistema de importação de dados, ele funciona bem.....só que ele as vzs deixa de gravar o primeiro registro e adiciona uns 2 registros em branco...a unit eh essa...

unit Unit33;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, jpeg, Unit35, ExtCtrls, ComCtrls, comobj,
  uNIT3, DBCtrls;

type
  Tfrmlearquivo = class(TForm)
    StatusBar1: TStatusBar;
    Panel2: TPanel;
    Image1: TImage;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    StringGrid1: TStringGrid;
    Panel3: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label1: TLabel;
    Edit1: TEdit;
    OpenDialog1: TOpenDialog;
    Label2: TLabel;
    Label3: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    DBLookupComboBox2: TDBLookupComboBox;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmlearquivo: Tfrmlearquivo;

implementation

{$R *.dfm}

procedure Tfrmlearquivo.BitBtn1Click(Sender: TObject);
var v_caminho : string;
v_excel : OleVariant;
v_i, v_j : integer;
begin
if OpenDialog1.Execute then
begin
v_caminho := OpenDialog1.FileName;
v_excel := CreateOleObject(´Excel.Application´);
v_excel.Visible := False;
v_excel.Application.Workbooks.Open(v_caminho);

v_j := 0;
while not (AnsiUpperCase(v_excel.cells.item[v_j + 1, 1].value) = ´´) do
begin
inc(v_j);
end;
for v_i := 0 to v_j - 1 do
begin
StringGrid1.Cells[1, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,1].Value);
StringGrid1.Cells[2, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,2].Value);
StringGrid1.Cells[3, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,3].Value);
StringGrid1.Cells[4, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,4].Value);
StringGrid1.Cells[5, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,5].Value);
StringGrid1.Cells[6, v_i] :=
AnsiUpperCase(v_excel.ActiveSheet.Cells.Item[v_i + 1,6].Value);

//Fazer isso até o fim das colunas da planilha..
{se precisar percorrer suas colunas, coloque outra vatiável integer, e incremente ela de acordo com as suas colunas, depois disso, dentro deste for, vc faz um outro for passando a outra variável no lugar da coluna..}
end;
unassigned;

DM2.ClientDataSet1.Insert;
end;
end;


procedure Tfrmlearquivo.BitBtn2Click(Sender: TObject);
var i : integer;
begin
Edit2.Text := DBLookupComboBox1.Field.Value;
Edit3.Text := DBLookupComboBox2.Field.Value;
For i:= 1 to StrtoInt(Edit1.Text) do
  Begin
  DM2.ClientDataSet1.FieldByName(´TRATAMENTO´).AsString := StringGrid1.Cells[1,i];
  DM2.ClientDataSet1.FieldByName(´DESTINATARIO´).AsString := StringGrid1.Cells[2,i];
  DM2.ClientDataSet1.FieldByName(´Cep´).AsString := StringGrid1.Cells[3,i];
  DM2.ClientDataSet1.FieldByName(´Endereco´).AsString := StringGrid1.Cells[4,i];
  DM2.ClientDataSet1.FieldByName(´Bairro´).AsString := StringGrid1.Cells[5,i];
  DM2.ClientDataSet1.FieldByName(´Cidade´).AsString := StringGrid1.Cells[6,i];
  DM2.ClientDataSet1.FieldByName(´UF´).AsString := ´SP´;
  DM2.ClientDataSet1.FieldByName(´id_cliente´).AsString := Edit2.Text;
  DM2.ClientDataSet1.FieldByName(´ID_PRODUTO´).AsString := Edit3.Text;
  DM2.ClientDataSet1.Post;
  DM2.ClientDataSet1.ApplyUpdates(0);
  DM2.ClientDataSet1.Insert;
end;
MessageDlg(´Importação realizada com sucesso!´, mtconfirmation, [mbOk], 0);
end;
end.


Se alguem souber me ajudar agradeço...


Ramms

Ramms

Curtidas 0

Respostas

Firekiller

Firekiller

28/10/2005

Tente tirar o Insert do BitBtn1, e no BitBtn2 deixe assim:

procedure Tfrmlearquivo.BitBtn2Click(Sender: TObject); var i : integer; begin Edit2.Text := DBLookupComboBox1.Field.Value; Edit3.Text := DBLookupComboBox2.Field.Value; For i:= 1 to StrtoInt(Edit1.Text) do Begin DM2.ClientDataSet1.Insert; DM2.ClientDataSet1.FieldByName(´TRATAMENTO´).AsString := StringGrid1.Cells[1,i]; DM2.ClientDataSet1.FieldByName(´DESTINATARIO´).AsString := StringGrid1.Cells[2,i]; DM2.ClientDataSet1.FieldByName(´Cep´).AsString := StringGrid1.Cells[3,i]; DM2.ClientDataSet1.FieldByName(´Endereco´).AsString := StringGrid1.Cells[4,i]; DM2.ClientDataSet1.FieldByName(´Bairro´).AsString := StringGrid1.Cells[5,i]; DM2.ClientDataSet1.FieldByName(´Cidade´).AsString := StringGrid1.Cells[6,i]; DM2.ClientDataSet1.FieldByName(´UF´).AsString := ´SP´; DM2.ClientDataSet1.FieldByName(´id_cliente´).AsString := Edit2.Text; DM2.ClientDataSet1.FieldByName(´ID_PRODUTO´).AsString := Edit3.Text; DM2.ClientDataSet1.Post; DM2.ClientDataSet1.ApplyUpdates(0); end; MessageDlg(´Importação realizada com sucesso!´, mtconfirmation, [mbOk], 0); end;



GOSTEI 0
POSTAR