importação do Excel
Oi Galera, estou com um problema em uma rotina de importação, o erro acontece qdo. eu quero dar um ExecSql.
codigo é o seguinte.
A função F_Adoquery ela simplesmente da um open se for passado a letra O ou um execSql qdo. a letra for E
A mensagem de erro que aparece é a seguinte ---------------------------
Debugger Exception Notification
---------------------------
Project Telefonica.exe raised exception class EOleException with message ´The name ´TE´ is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted´. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
procedure TfrmImpPlanilhas.BitBtn1Click(Sender: TObject);
var
v_sql, v_caminho, v_codgrp, v_codprd, v_grupo : string;
v_excel: Variant;
v_i, v_j : integer;
data : TDateTime;
begin
Memo1.Clear;
if OpenDialog1.Execute then
begin
v_caminho := OpenDialog1.FileName ;
v_excel := CreateOleObject(´Excel.Application´);
v_excel.visible := false;
qrydestinoPos.Open;
qryLancamentoPos.Open;
v_excel.Application.Workbooks.open(v_caminho);
v_j := 1;
while not (AnsiUpperCase(v_excel.cells.item[v_j + 2, 1].value) = ´´) do
begin
inc(v_j);
end;
v_sql := ´SELECT TE, NOMECLIENTE, SEGTO, TES, PRODUTO, CONCFATURAVEL, ATRIBUTO, VLRATRIBUTO,´+
´VLRMENSAL, VLREVENTUAL, VLRRETROATIVO, QTDE, RECEITA, DESCONTO, ´+
´ GRUPO, CODGRP, CODPRD, DATACAD, DATACAD2, ROTINA FROM TABGERAL´;
F_ADOQuery(qrydestinoPos,v_sql,´O´);
for v_i := 0 to v_j - 1 do
begin
//qrydestinopos.Insert;
if v_excel.ActiveSheet.Cells.item[v_i+2,6].value= ´´ then
begin
Memo1.Lines.Add(´O Campo produto da planilha esta em branco´);
v_codprd := dm.qryRecGrupo.fieldByName(´CODIGO´).Value;
v_grupo := null;//dm.qryRecGrupo.FieldByName(´GRUPO´).Value;
v_codgrp := null;//dm.qryRecGrupo.FieldByName(´CODGRP´).Value;
end
else
if RecuperaGrupo(AnsiUpperCase(v_excel.ActiveSheet.Cells.item[v_i+2,6].value)) then
Begin
v_codprd := dm.qryRecGrupo.fieldByName(´CODIGO´).Value;
v_grupo := dm.qryRecGrupo.FieldByName(´GRUPO´).Value;
v_codgrp := dm.qryRecGrupo.FieldByName(´CODGRP´).Value;
end
else
Memo1.Lines.Add(´Produto ´´´+ v_excel.ActiveSheet.Cells.item[v_i+2,6].value + ´´´ não possue grupo cadastrado na tabela de Produtos.´ );
v_sql := ´INSERT INTO TABGERAL VALUES(TE, NOMECLIENTE, SEGTO, TES,´+
´ PRODUTO, CONCFATURAVEL, ATRIBUTO, VLRATRIBUTO, VLRMENSAL,´+
´ VLREVENTUAL, VLRRETROATIVO, QTDE, RECEITA, DESCONTO, ´+
´ GRUPO, CODGRP, CODPRD, DATACAD, DATACAD2, ROTINA)´+
´VALUES(´´´+AnsiUpperCase(v_excel.cells.item[v_i +5,2].value) +
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,3].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,4].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,5].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,6].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,7].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,8].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,9].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,10].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,11].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,12].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,14].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,15].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,16].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,17].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,18].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,19].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,20].value)+´´+
´´´,´´´+v_grupo+´´´,´´´+v_codgrp+´´´,´´´+v_codprd+´´+
´´´,´´´+FormatDateTime(´DD/MM/YYYY´,Now ) +´´+
´´´,´´´+FormatDateTime(´MM/YYYY´,DTMES.Date )+´´+
´´´,´´POSFAT´´)´;
{ with dm.qrygeral,dm.qryGeral.SQL do
begin
Close;
Clear;
Add(v_sql);
dm.qryGeral.ExecSQL;
end;}
F_ADOQuery(DM.qryGeral, v_sql, ´E´);
end;
v_excel.quit;
v_excel := Unassigned;
ShowMessage(´Importação concluida com sucesso´);
end;
end;
codigo é o seguinte.
A função F_Adoquery ela simplesmente da um open se for passado a letra O ou um execSql qdo. a letra for E
A mensagem de erro que aparece é a seguinte ---------------------------
Debugger Exception Notification
---------------------------
Project Telefonica.exe raised exception class EOleException with message ´The name ´TE´ is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted´. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
procedure TfrmImpPlanilhas.BitBtn1Click(Sender: TObject);
var
v_sql, v_caminho, v_codgrp, v_codprd, v_grupo : string;
v_excel: Variant;
v_i, v_j : integer;
data : TDateTime;
begin
Memo1.Clear;
if OpenDialog1.Execute then
begin
v_caminho := OpenDialog1.FileName ;
v_excel := CreateOleObject(´Excel.Application´);
v_excel.visible := false;
qrydestinoPos.Open;
qryLancamentoPos.Open;
v_excel.Application.Workbooks.open(v_caminho);
v_j := 1;
while not (AnsiUpperCase(v_excel.cells.item[v_j + 2, 1].value) = ´´) do
begin
inc(v_j);
end;
v_sql := ´SELECT TE, NOMECLIENTE, SEGTO, TES, PRODUTO, CONCFATURAVEL, ATRIBUTO, VLRATRIBUTO,´+
´VLRMENSAL, VLREVENTUAL, VLRRETROATIVO, QTDE, RECEITA, DESCONTO, ´+
´ GRUPO, CODGRP, CODPRD, DATACAD, DATACAD2, ROTINA FROM TABGERAL´;
F_ADOQuery(qrydestinoPos,v_sql,´O´);
for v_i := 0 to v_j - 1 do
begin
//qrydestinopos.Insert;
if v_excel.ActiveSheet.Cells.item[v_i+2,6].value= ´´ then
begin
Memo1.Lines.Add(´O Campo produto da planilha esta em branco´);
v_codprd := dm.qryRecGrupo.fieldByName(´CODIGO´).Value;
v_grupo := null;//dm.qryRecGrupo.FieldByName(´GRUPO´).Value;
v_codgrp := null;//dm.qryRecGrupo.FieldByName(´CODGRP´).Value;
end
else
if RecuperaGrupo(AnsiUpperCase(v_excel.ActiveSheet.Cells.item[v_i+2,6].value)) then
Begin
v_codprd := dm.qryRecGrupo.fieldByName(´CODIGO´).Value;
v_grupo := dm.qryRecGrupo.FieldByName(´GRUPO´).Value;
v_codgrp := dm.qryRecGrupo.FieldByName(´CODGRP´).Value;
end
else
Memo1.Lines.Add(´Produto ´´´+ v_excel.ActiveSheet.Cells.item[v_i+2,6].value + ´´´ não possue grupo cadastrado na tabela de Produtos.´ );
v_sql := ´INSERT INTO TABGERAL VALUES(TE, NOMECLIENTE, SEGTO, TES,´+
´ PRODUTO, CONCFATURAVEL, ATRIBUTO, VLRATRIBUTO, VLRMENSAL,´+
´ VLREVENTUAL, VLRRETROATIVO, QTDE, RECEITA, DESCONTO, ´+
´ GRUPO, CODGRP, CODPRD, DATACAD, DATACAD2, ROTINA)´+
´VALUES(´´´+AnsiUpperCase(v_excel.cells.item[v_i +5,2].value) +
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,3].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,4].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,5].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,6].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,7].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,8].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,9].value) +´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,10].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,11].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,12].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,14].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,15].value)+´´+
´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,16].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,17].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,18].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,19].value)+´´+
// ´´´,´´´+AnsiUpperCase(v_excel.cells.item[v_i +2,20].value)+´´+
´´´,´´´+v_grupo+´´´,´´´+v_codgrp+´´´,´´´+v_codprd+´´+
´´´,´´´+FormatDateTime(´DD/MM/YYYY´,Now ) +´´+
´´´,´´´+FormatDateTime(´MM/YYYY´,DTMES.Date )+´´+
´´´,´´POSFAT´´)´;
{ with dm.qrygeral,dm.qryGeral.SQL do
begin
Close;
Clear;
Add(v_sql);
dm.qryGeral.ExecSQL;
end;}
F_ADOQuery(DM.qryGeral, v_sql, ´E´);
end;
v_excel.quit;
v_excel := Unassigned;
ShowMessage(´Importação concluida com sucesso´);
end;
end;
Vrssoftware
Curtidas 0