Fórum Importar TXT com open dialog? #175696
18/08/2003
0
Estou com um problema na hora de executar a inserção no banco de dados.
Será que alguem pode me ajudar a completar este código
Segue o que eu já fiz
var
TEXTO : TextFile;
LINHA :STRING;
tam,postab:integer;
begin
Opendialog1.Execute;
Opendialog1.Title := ´FAVOR SELECIONAR O ARQUIVO´;
AssignFile(TEXTO,Opendialog1.FileName);
Reset(TEXTO);
while not Eof(TEXTO) do
begin
LINHA := ´´;
ReadLn(TEXTO,LINHA);
if LINHA <>´´ then
begin
tam := length(LINHA);
postab := pos(#9,LINHA);
[color=red:877b438fb6] ibdataset1.execsql(´INSERT INTO teste (nome, idade) VALUES(´ +39+QuoteStr(copy(LINHA,1,postab-1))+ ´ , ´ + copy(LINHA,postab+1,tam-postab)´ + ´ )´);[/color:877b438fb6] end;
[color=red:877b438fb6][/color:877b438fb6]Estou com Problema na linha acima.
Como faço para executar e inserir todos os dados no meu banco de dados.
Obrigado
Alexandre
Alerocha
Curtir tópico
+ 0Posts
18/08/2003
Abueno_silva
Porque você está inserindo o #39 (aspas simples), se a função quotedstr já faz isso?
Gostei + 0
18/08/2003
Alerocha
Gostei + 0
18/08/2003
Abueno_silva
ibdataset1.sql.clear;
ibdataset1.sql.add(´insert into teste(nome,idade)´);
ibdataset1.sql.add(´values (´);
ibdataset1.sql.add(QuotedStr(copy(LINHA,1,postab-1)) + ´,´);
ibdataset1.sql.add(copy(LINHA,postab+1,tam-postab) + ´ )´);
ibdataset1.ExecSQL;
Tente assim, e verifique se os valores retornados pela função copy estão corretos.
[]´s
Gostei + 0
18/08/2003
Abueno_silva
Gostei + 0
18/08/2003
Alerocha
Infelizmente não deu certo. Primeiro mudei o parametro
ibdataset1.sql para ibdataset1.selectsql pois sá assim funciona.
Mas depois de gerado dá um erro que náo acha a coluna idade, mas a mesma existe no interbase.
Gostei + 0
18/08/2003
Abueno_silva
A sintaxe é exatamente a que lhe passei anteriormente, você só precisa trocar o ExecSql por ExeqQuery;
Tente isto que deve dar certo.
[]´s
Gostei + 0
18/08/2003
Alerocha
IBsql1.sql.clear;
IBsql1.sql.add(´insert into teste(nome,idade)´);
IBsql1.sql.add(´values (´);
IBsql1.sql.add(QuotedStr(copy(LINHA,1,postab-1)) + ´,´);
IBsql1.sql.add(copy(LINHA,postab+1,tam-postab) + ´ )´);
IBsql1.execquery;
Mas quando importa da um erro que não existe a coluna idade?
Vc tem algum exemplo de importar arquivo que vc já utilizou. Assim eu posso verificar onde está meu erro.
Obrigado
Gostei + 0
18/08/2003
Abueno_silva
Gostei + 0
18/08/2003
Alerocha
CREATE TABLE ´TESTE´
(
´ID´INTEGER NOT NULL,
´NOME´VARCHAR(50),
´IDADE´VARCHAR(2),
CONSTRAINT ´FK_TESTE´ PRIMARY KEY (´ID´)
);
Como o projeto é um teste para um outro projeto. Eu posso passar o projeto junto com o banco que é muito pequeno.
Se der me passe estes aruivos de insert que eu tento ver alguma coisa
segue meu email alebraga@globo.com
Gostei + 0
18/08/2003
Abueno_silva
na linha:
IBsql1.sql.add(copy(LINHA,postab+1,tam-postab) + ´ )´);
troque por:
IBsql1.sql.add(quotedstr(copy(LINHA,postab+1,tam-postab)) + ´ )´);
Gostei + 0
18/08/2003
Alerocha
Validation error for column ID, value ***null***.
Tenho que inserir um número nesta columa, mas como.
Gostei + 0
18/08/2003
Abueno_silva
Para criar o generator:
CREATE GENERATOR GEN_TESTE_ID;
SET GENERATOR GEN_TESTE_ID TO 0;
Para criar o trigger:
SET TERM ^ ;
/* Trigger: TESTE_BI0 */
CREATE TRIGGER TESTE_BI0 FOR TESTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.ID is null) then
new.ID = gen_id(GEN_TESTE_ID,1);
end
^
Isso vai funcionar como um campo auto-increment...
[]´s
Gostei + 0
18/08/2003
Alerocha
violação da chave primaria ou chave unica constraint ´fk_teste´.
No banco de dados já existem alguns registros
Gostei + 0
18/08/2003
Abueno_silva
CREATE GENERATOR GEN_TESTE_ID;
SET GENERATOR GEN_TESTE_ID TO <id inicial>;
[]´s
Gostei + 0
18/08/2003
Alerocha
consegui achar o erro. Muito obrigado pela ajuda.
At
Alexandre
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)