Elo Postado Fevereiro 9, 2005 Denunciar Share Postado Fevereiro 9, 2005 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. 543312231222223344433213554321222122234543212543232222111234543212233354334345454333433455123335344411155543211121254321121213443444555 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);vararq: TextFile;linha: String;idx: byte;beginAssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');Reset ( arq );ReadLn ( arq, linha );tblGabarito.Open;while not Eof ( arq ) dobegin.. ( o que coloco aqui para receber o que foi lido e passar para o SQL?).end; end; end. Desde já agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 10, 2005 Denunciar Share Postado Fevereiro 10, 2005 Olá, eu não entendí direito. Esta tabela tblGabarito já está conectada ao banco de dados? Quais são seus campos? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Elo Postado Fevereiro 10, 2005 Autor Denunciar Share Postado Fevereiro 10, 2005 Desculpe, esqueci de tirar o tblgabarito.Tblgabarito era um TTable que apontava para um arquivo.dbAnteriormente, 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);vararq: TextFile;linha: String;idx: byte;beginAssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');Reset ( arq );ReadLn ( arq, linha );tblGabarito.Open;while not Eof ( arq ) dobegintblGabarito.Insert;for idx := 0 to tblGabarito.Fields.Count - 1 dobegintblGabarito.Fields[idx].AsString := linha[idx];end;tblGabarito.Next;ReadLn ( arq, linha );end;tbGabarito.Close;CloseFile ( arq );end; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 10, 2005 Denunciar Share Postado Fevereiro 10, 2005 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 ) dobegintblGabarito.Insert;for idx := 0 to tblGabarito.Fields.Count - 1 dobegintblGabarito.Fields[idx].AsString := linha[idx];end;tblGabarito.Next;ReadLn ( arq, linha );end;tbGabarito.Close;CloseFile ( arq );1-tblGabarito.Insert; // só modifica o State do Dataset2-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.LastDepois alimentar os 15 campos do seu registro de inserção.Depois:tblGabarito.Post e não tblGabarito.Next Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 10, 2005 Denunciar Share Postado Fevereiro 10, 2005 Olha, não tenho certeza mas parece que se você fizer tblGabarito.Append, o Dataset já fica em modo de inserção; depois é só dar tblGabarito.Post Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Elo Postado Fevereiro 10, 2005 Autor Denunciar Share Postado Fevereiro 10, 2005 Olá!A minha procedure ficou assim agora:procedure TSVFrmImport.Button1Click(Sender: TObject);vararq: TextFile;linha: String;idx: byte;beginAssignFile(arq,'G:\FONTES\COPAI\SISAVI\Importação COPAI\teste.txt');Reset ( arq );ReadLn ( arq, linha );tblGabarito.Open;while not Eof ( arq ) do//tblGabarito.Insert;beginfor idx := 1 to tblGabarito.Fields.Count - 1 dobegintblGabarito.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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 Olá s3c!!!!Obrigada mesmo por estar me ajudando... Agradeço de coração.Bem,Estou quase lá!Agora só não está inserindo a última linha do txt... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 Olá, é porque o último readln ativa a condição de eof do textfile.Retire todos readln e só deixe um imediatamente após o begin do While. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 Ah, esquecí de dizer que o Reset ativará a condição de eof se o textfile estiver vazio, de modo que ele não passará pelo While. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Elo Postado Fevereiro 11, 2005 Autor Denunciar Share Postado Fevereiro 11, 2005 Consegui s3c!!!Fiz do jeito que você falou, deu tudo certo com relação a Readln!Estou muito feliz!Valeu mesmo!!!Abraços,Elô Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Fevereiro 11, 2005 Denunciar Share Postado Fevereiro 11, 2005 Olá, fico contente tb. Procure passar adiante p/ aqueles que não conhecem. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Elo
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
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.