Tenho no sistema em Delphi 7 com Mysql 5.0.37 a importação de dados que acontece de um arquivo texto selecionado pelo usuário. Estava dando erro quando o arquivo passava de 4 mil linhas, daí implementei de criar uma tabela temporária no banco e jogar todo o conteúdo do arquivo texto nesta temporária, agilizou o processo e resolver de pegar arquivos muito longos, mas acontece que meus arquivos reais giram em torno de 9 mil linhas e para fazer esta importação demora-se em torno de 15 minutos, fiz o teste com todos os produtos da empresa, inclusive os inativos para testar e a base de 26.926 linhas demorou mais de 50 minutos para processar, daí resolvi fazer um procedure no banco de dados para dar agilidade ao processo, mas nunca trabalhei antes com procedure, function ou trigger no MYSQL.
Fiz o seguinte no Delphi eu crio a tabela temporária, e povoa ela com o arquivo texto, isto acontece em frações de segundos. Daí chamo a procedure para processar a temporária e salvar nas tabelas corretas os dados, depois deleto a temporária, esta é a idéia.
1ª Dúvida.
O nome da tabela temporária que eu passo via parâmetro na hora de chamar a procedure, este parâmetro chamei de var_sTabela, como fazer o select nela já que o nome da tabela está em parâmetro?
Se não fosse por parâmetro faria assim:
DECLARE varreTemporaria CURSOR FOR SELECT * FROM nome_da_tabela;
2ª Dúvida
Preciso retirar de alguns campos os caracteres “, ‘ e ´, para isto utilizo a função replace, a forma abaixo está correta? No caso da ‘ (aspa simples) poderia como no Delphi utilizar o chr(39)?
SET var_sUnidade = REPLACE(var_sUnidade, '"', '');
SET var_sUnidade = REPLACE(var_sUnidade, '`', '');
SET var_sUnidade = REPLACE(var_sUnidade, chr(39), '');
SET var_sUnidade = LTRIM(var_sUnidade);
SET var_sUnidade = RTRIM(var_sUnidade);
Na ultima replace puderia já utilizar o TRIM como no Delphi deixando assim?
SET var_sUnidade = RTRIM(LTRIM (REPLACE(var_sUnidade, chr(39), '')));
3ª Dúvida
para a quantidade o valor que é passado no arquivo texto é multiplicado por 1000 para ser inteiro então eu vejo o valor e divido por 1000 assim tenho o valor, inteiro ou fracionado. estaria certo pegar o valor em String e fazer desta forma para ter o valor de ponto flutuante?
Pergunta
Evandro Choma
Boa Tarde
Tenho no sistema em Delphi 7 com Mysql 5.0.37 a importação de dados que acontece de um arquivo texto selecionado pelo usuário. Estava dando erro quando o arquivo passava de 4 mil linhas, daí implementei de criar uma tabela temporária no banco e jogar todo o conteúdo do arquivo texto nesta temporária, agilizou o processo e resolver de pegar arquivos muito longos, mas acontece que meus arquivos reais giram em torno de 9 mil linhas e para fazer esta importação demora-se em torno de 15 minutos, fiz o teste com todos os produtos da empresa, inclusive os inativos para testar e a base de 26.926 linhas demorou mais de 50 minutos para processar, daí resolvi fazer um procedure no banco de dados para dar agilidade ao processo, mas nunca trabalhei antes com procedure, function ou trigger no MYSQL.
Fiz o seguinte no Delphi eu crio a tabela temporária, e povoa ela com o arquivo texto, isto acontece em frações de segundos. Daí chamo a procedure para processar a temporária e salvar nas tabelas corretas os dados, depois deleto a temporária, esta é a idéia.
1ª Dúvida.
O nome da tabela temporária que eu passo via parâmetro na hora de chamar a procedure, este parâmetro chamei de var_sTabela, como fazer o select nela já que o nome da tabela está em parâmetro?
Se não fosse por parâmetro faria assim:
2ª Dúvida
Preciso retirar de alguns campos os caracteres “, ‘ e ´, para isto utilizo a função replace, a forma abaixo está correta? No caso da ‘ (aspa simples) poderia como no Delphi utilizar o chr(39)?
Na ultima replace puderia já utilizar o TRIM como no Delphi deixando assim?
3ª Dúvida
para a quantidade o valor que é passado no arquivo texto é multiplicado por 1000 para ser inteiro então eu vejo o valor e divido por 1000 assim tenho o valor, inteiro ou fracionado. estaria certo pegar o valor em String e fazer desta forma para ter o valor de ponto flutuante?
Obrigado
Evandro Choma
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.