Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Yoshi

[Resolvido] Importar dados

Recommended Posts

:blink: Ae gente http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif vi nesse topico http://forum.imasters.com.br/index.php?showtopic=259016 como importar dados do Excel p/ uma grid mais alguem sabe como importar p/ um banco de dados??

 

Vlw t+

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que vi no código do link que passou, a rotina de carga do excel lê linha a linha e coluna a coluna os valores da planilha e joga num grid... o que você teria que fazer é ler a linha, guardar os valores que quer gravar em variáveis (1 pra cada coluna provavelmente) e depois, ao mudar de linha, dar um insert no banco com os valores lidos antes de ler os dados da nova linha... só estudar um pouco a rotina do link que você consegue fazer. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entaum eu tentei doutros jeitos mais como eu comecei a programar a pouco tempo ainda tenhu muitas duvidas de como fazer certas coisas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não testei o código abaixo, mas acho que vai te ajudar pra começar... Vamos supor que sua tabela tem a seguinte estrutura (que será igual a da planilha a ser importada):

 

TABELA TESTE

CODIGO INTEGER;

NOME STRING;

IDADE INTEGER;

 

Na estrutura acima, a primeira coluna da planilha seria o código, a segunda o nome e a terceira idade ok? Ai a rotina ficaria algo semelhante a isto:

 

function ImportaXLS(AXLSFile: string): Boolean;
const
	xlCellTypeLastCell = $0000000B;
var
	XLApp, Sheet: OLEVariant;
	RangeMatrix: Variant;
	x, y, k, r: Integer;
	//Variáveis a serem usadas nos inserts
	Codigo, Idade : Integer;
	Nome : String;
begin
Result:=False;
//Cria Excel- OLE Object
XLApp:=CreateOleObject('Excel.Application');
try
	//Esconde Excel
	XLApp.Visible:=False;
	//Abre o Workbook
	XLApp.Workbooks.Open(AXLSFile);
	Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
	Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
	//Pegar o número da última linha
	x:=XLApp.ActiveCell.Row;
	//Pegar o número da última coluna
	y:=XLApp.ActiveCell.Column;
	//Associaca a variant WorkSheet com a variant do Delphi
	RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
	//Cria o loop para carregar os registros nas variáveis de controle e passar para uma rotina de inserção no banco
	k:=1;
	repeat
		for r:=1 to y do
			Case r of
				 1 : Codigo := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
				 2 : Nome   := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
				 3 : Idade   := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
			End;
		InserirDadosBanco(Codigo, Nome, Idade); //Rotina para gravar os dados no banco com suas devidas validações
		Inc(k,1);
	until k > x;
	RangeMatrix:=Unassigned;
finally
	//Fecha o Excel
	if not VarIsEmpty(XLApp) then
		begin
		XLApp.Quit;
		XLAPP:=Unassigned;
		Sheet:=Unassigned;
		Result:=True;
		end;
	end;
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

:clap:Ae broder concegui vlw mesmo em o codigo ficou assim:http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

function TForm1.ImportaXLS(AXLSFile: string): Boolean;

const

xlCellTypeLastCell = $0000000B;

var

XLApp, Sheet: OLEVariant;

RangeMatrix: Variant;

x, y, k, r: Integer;

//Variáveis a serem usadas nos inserts

COD, VALOR : Integer;

DESCRICAO : String;

begin

Result:=False;

//Cria Excel- OLE Object

XLApp:=CreateOleObject('Excel.Application');

try

//Esconde Excel

XLApp.Visible:=False;

//Abre o Workbook

XLApp.Workbooks.Open(AXLSFile);

Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];

Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

//Pegar o número da última linha

x:=XLApp.ActiveCell.Row;

//Pegar o número da última coluna

y:=XLApp.ActiveCell.Column;

//Associaca a variant WorkSheet com a variant do Delphi

RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;

//Cria o loop para carregar os registros nas variáveis de controle e passar para uma rotina de inserção no banco

k:=1;

repeat

for r:=1 to y do

Case r of

1 : COD := RangeMatrix[K, R]; //Talvez aqui precise converter o valor

2 : DESCRICAO := RangeMatrix[K, R]; //Talvez aqui precise converter o valor

3 : VALOR := RangeMatrix[K, R]; //Talvez aqui precise converter o valor

End;

 

IBQuery1.Close;

IBQuery1.SQL.Clear;

IBQuery1.SQL.Add('insert into PRODUTO (COD, DESCRICAO, VALOR)');

IBQuery1.SQL.Add('values (:COD, :DESCRICAO, :VALOR)');

IBQuery1.ParamByName('COD').AsString := IntToStr(COD);

IBQuery1.ParamByName('DESCRICAO').AsString := DESCRICAO;

IBQuery1.ParamByName('VALOR').AsString := IntToStr(VALOR);

IBQuery1.ExecSQL;

// InserirDadosBanco(Codigo, Nome, Idade); //Rotina para gravar os dados no banco com suas devidas validações

Inc(k,1);

until k > x;

RangeMatrix:=Unassigned;

finally

//Fecha o Excel

if not VarIsEmpty(XLApp) then

begin

XLApp.Quit;

XLAPP:=Unassigned;

Sheet:=Unassigned;

Result:=True;

end;

end;

end;

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ImportaXLS('C:\Documents and Settings\Gabriel\Desktop\Plan1.xls');

end;

 

 

 

T+ vlw http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso o fonte carrega tudo primeiramente para um TStringGrid, e então depois poderia fazer o procedimento que desejar, sendo que poderia ler o TStringGrid e inserir no seu BD. Mas bom que conseguiu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.