Ir para conteúdo
Fórum Script Brasil
  • 0

Importar Txt Para Tabela Sql Server


Elo

Pergunta

Olá!

Tenho um gabarito (A,B,C,D,E) com 45 questões, igual aqueles de concurso que foi passado para um arquivo.txt onde A=1, B=2, c=3, D=4 e E=5

O conteúdo desse arquivo ficará exatamente assim.

543312231222223344433213554321222122234543212

543232222111234543212233354334345454333433455

123335344411155543211121254321121213443444555

Gostaria de criar uma procedure que ao clicar nela, o conteúdo desse arquivo fosse lido e passado para um tabela do SQL Server.

Já fiz o procedimento de leitura, gostaria agora de passar o que foi lido para a tabela do SQL Server.

procedure TSVFrmImport.Button1Click(Sender: TObject);

var

arq: TextFile;

linha: String;

idx: byte;

begin

AssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');

Reset ( arq );

ReadLn ( arq, linha );

tblGabarito.Open;

while not Eof ( arq ) do

begin

.

. ( o que coloco aqui para receber o que foi lido e passar para o SQL?)

.

end;

end;

end.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Desculpe, esqueci de tirar o tblgabarito.

Tblgabarito era um TTable que apontava para um arquivo.db

Anteriormente, eu estava tentando importar do teste.txt para um arquivo.db e logo em seguida importando esse dados do arquivo.db para o SQL server.

Porém não estava importando corretamente... Pensei então em tentar importar direto do teste.txt para o SQL Server por ser mais prático e dinâmico.

Minha procedure estava assim antes:

procedure TSVFrmImport.Button1Click(Sender: TObject);

var

arq: TextFile;

linha: String;

idx: byte;

begin

AssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');

Reset ( arq );

ReadLn ( arq, linha );

tblGabarito.Open;

while not Eof ( arq ) do

begin

tblGabarito.Insert;

for idx := 0 to tblGabarito.Fields.Count - 1 do

begin

tblGabarito.Fields[idx].AsString := linha[idx];

end;

tblGabarito.Next;

ReadLn ( arq, linha );

end;

tbGabarito.Close;

CloseFile ( arq );

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe-me se disser alguma besteira, pois já faz algum tempo que não mexo c/ programação client/server.

AssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');

Reset ( arq );

ReadLn ( arq, linha );

tblGabarito.Open;

while not Eof ( arq ) do

begin

tblGabarito.Insert;

for idx := 0 to tblGabarito.Fields.Count - 1 do

begin

tblGabarito.Fields[idx].AsString := linha[idx];

end;

tblGabarito.Next;

ReadLn ( arq, linha );

end;

tbGabarito.Close;

CloseFile ( arq );

1-tblGabarito.Insert; // só modifica o State do Dataset

2-For idx := 0 to tblGabarito.Fields.Count - 1 // você deve ter 15 cpos na sua tabela e a string linha deve ser indexada a partir de 1 ou linha[idx+1]

3-tblGabarito.Next; // não entendí já que o Dataset está em modo Insert.

Acredito que primeiro você deva testar o modo de operação do Dataset:

if tblGabarito.State <> dsInsert then

tblGabarito.Insert;

Depois:

tblGabarito.Append ou tblGabarito.Last

Depois alimentar os 15 campos do seu registro de inserção.

Depois:

tblGabarito.Post e não tblGabarito.Next

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

A minha procedure ficou assim agora:

procedure TSVFrmImport.Button1Click(Sender: TObject);

var

arq: TextFile;

linha: String;

idx: byte;

begin

AssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');

Reset ( arq );

ReadLn ( arq, linha );

tblGabarito.Open;

while not Eof ( arq ) do

//tblGabarito.Insert;

begin

for idx := 1 to tblGabarito.Fields.Count - 1 do

begin

tblGabarito.Append;

tblGabarito.FieldByName('LINHA_01').AsString := copy(linha, 1, 1);

tblGabarito.FieldByName('LINHA_02').AsString := copy(linha, 2, 1);

tblGabarito.FieldByName('LINHA_03').AsString := copy(linha, 3, 1);

tblGabarito.FieldByName('LINHA_04').AsString := copy(linha, 4, 1);

tblGabarito.FieldByName('LINHA_05').AsString := copy(linha, 5, 1);

tblGabarito.FieldByName('LINHA_06').AsString := copy(linha, 6, 1);

tblGabarito.FieldByName('LINHA_07').AsString := copy(linha, 7, 1);

tblGabarito.FieldByName('LINHA_08').AsString := copy(linha, 8, 1);

tblGabarito.FieldByName('LINHA_09').AsString := copy(linha, 9, 1);

tblGabarito.FieldByName('LINHA_10').AsString := copy(linha, 10, 1);

tblGabarito.FieldByName('LINHA_11').AsString := copy(linha, 11, 1);

tblGabarito.FieldByName('LINHA_12').AsString := copy(linha, 12, 1);

tblGabarito.FieldByName('LINHA_13').AsString := copy(linha, 13, 1);

tblGabarito.FieldByName('LINHA_14').AsString := copy(linha, 14, 1);

tblGabarito.FieldByName('LINHA_15').AsString := copy(linha, 15, 1);

tblGabarito.FieldByName('LINHA_16').AsString := copy(linha, 16, 1);

tblGabarito.FieldByName('LINHA_17').AsString := copy(linha, 17, 1);

tblGabarito.FieldByName('LINHA_18').AsString := copy(linha, 18, 1);

tblGabarito.FieldByName('LINHA_19').AsString := copy(linha, 19, 1);

tblGabarito.FieldByName('LINHA_20').AsString := copy(linha, 20, 1);

tblGabarito.FieldByName('LINHA_21').AsString := copy(linha, 21, 1);

tblGabarito.FieldByName('LINHA_22').AsString := copy(linha, 22, 1);

tblGabarito.FieldByName('LINHA_23').AsString := copy(linha, 23, 1);

tblGabarito.FieldByName('LINHA_24').AsString := copy(linha, 24, 1);

tblGabarito.FieldByName('LINHA_25').AsString := copy(linha, 25, 1);

tblGabarito.FieldByName('LINHA_26').AsString := copy(linha, 26, 1);

tblGabarito.FieldByName('LINHA_27').AsString := copy(linha, 27, 1);

tblGabarito.FieldByName('LINHA_28').AsString := copy(linha, 28, 1);

tblGabarito.FieldByName('LINHA_29').AsString := copy(linha, 29, 1);

tblGabarito.FieldByName('LINHA_30').AsString := copy(linha, 30, 1);

tblGabarito.FieldByName('LINHA_31').AsString := copy(linha, 31, 1);

tblGabarito.FieldByName('LINHA_32').AsString := copy(linha, 32, 1);

tblGabarito.FieldByName('LINHA_33').AsString := copy(linha, 33, 1);

tblGabarito.FieldByName('LINHA_34').AsString := copy(linha, 34, 1);

tblGabarito.FieldByName('LINHA_35').AsString := copy(linha, 35, 1);

tblGabarito.FieldByName('LINHA_36').AsString := copy(linha, 36, 1);

tblGabarito.FieldByName('LINHA_37').AsString := copy(linha, 37, 1);

tblGabarito.FieldByName('LINHA_38').AsString := copy(linha, 38, 1);

tblGabarito.FieldByName('LINHA_39').AsString := copy(linha, 39, 1);

tblGabarito.FieldByName('LINHA_40').AsString := copy(linha, 40, 1);

tblGabarito.FieldByName('LINHA_41').AsString := copy(linha, 41, 1);

tblGabarito.FieldByName('LINHA_42').AsString := copy(linha, 42, 1);

tblGabarito.FieldByName('LINHA_43').AsString := copy(linha, 43, 1);

tblGabarito.FieldByName('LINHA_44').AsString := copy(linha, 44, 1);

tblGabarito.FieldByName('LINHA_45').AsString := copy(linha, 45, 1);

end;

tblGabarito.post;

ReadLn ( arq, linha );

end;

tblGabarito.Close;

CloseFile ( arq );

end;

end.

Está inserindo na tabela porém ela não tá passando pra próxima linha. está inserindo a mesma coisa em todas as linhas

Tipo:

LINHA_01|LINHA_02|LINHA_03|LINHA_04|LINHA_05|LINHA_06|...|LINHA_45|

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

5 | 4 | 3 | 3 | 1 | 2 |...| 2 |

.

.

.

obrigada!

Eloisa

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, bom do jeito que está, acredito que esteja inserindo 44 registros iguais p/ cada linha do arquivo texto por causa do for.

Tente assim após tblGabarito.Open:

while not Eof ( arq ) do
begin
tblGabarito.Append;
for idx := 1 to 45 do
begin
if idx < 10 then
  tblGabarito.FieldByName('LINHA_0' + IntToStr(idx)).AsString := linha[idx]
else
  tblGabarito.FieldByName('LINHA_' + IntToStr(idx)).AsString := linha[idx];
end;
tblGabarito.post;
ReadLn ( arq, linha );
end;
tblGabarito.Close;
CloseFile ( arq );
end;

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...