Eder Postado Maio 29, 2006 Denunciar Share Postado Maio 29, 2006 Olá..Eu tou com um probleminha..Nosso colega Michels me ajudou a montar este codigo pra converte um txt >> paradoxporem eu queria agora alem de converter como abaixo ....também criar os indices primarios os *.PX e os secundarios..mas não to conseguindo.no caso o indice primário seria o campo CODIGOe o secundario seria o campo CODPROD//TXT>>DBprocedure TForm1.Button2Click(Sender: TObject);varTxt : TextFile;Entrada : String;beginAssignfile(Txt,'Clientes.Txt');Reset(Txt);While not Eoln(Txt) do begin Readln(Txt,Entrada); Table1.Insert; Table1.FieldByName('Codigo').Value := Trim(Copy(Entrada,01,05)); Table1.FieldByName('CodProd').Value := Trim(Copy(Entrada,06,05)); Table1.FieldByName('Nome').Value := Trim(Copy(Entrada,11,20)); Table1.FieldByName('Cidade').Value := Trim(Copy(Entrada,31,10)); Table1.FieldByName('UF').Value := Trim(Copy(Entrada,41,02)); Table1.Post; end;CloseFile(Txt);Button3.Enabled := True;end;Grato :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 30, 2006 Denunciar Share Postado Maio 30, 2006 Elder, dê uma olhada neste código (link) com atenção para a parte posterior ao texto { adiciona a chave primária e três secundárias}p.s. só lembrando que é Micheus e não Michels. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 31, 2006 Autor Denunciar Share Postado Maio 31, 2006 Elder, dê uma olhada neste código (link) com atenção para a parte posterior ao texto { adiciona a chave primária e três secundárias}Amigão....eu deu uma analizada no link...que tem este codigo abaixo:tryTable1.Close; {o mesmo que Active:=False }Table1.DatabaseName := 'C:\TEMP'; { um alias BDE ou diretório}Table1.TableName := 'func.DB'; { extensão .DB é opcional}Table1.TableType := ttParadox; { deve ser especificado quando se cria uma tabela}{ definindo alguns campos}with Table1.FieldDefs dobeginUpdate; {não é necessário, mas...}Clear; { limpa a tabela antiga}{ a chave primária deve ser criada com o atributo "required" como true: }Add('Codigo', ftInteger, 0, true);Add('Nome', ftString, 16, false);Add('Endereco', ftString, 16, false);Add('Salario', ftFloat, 0, false);Update;end; { "with Table1.FieldDefs" }{ adiciona a chave primária e três secundárias}with Table1.IndexDefs dobeginUpdate; {não é necessário, mas...}Clear; {limpa os antigos}{ A chave priária Paradox não tem nome.}{ Nunca de o mesmo nome do campo ao índicese fizer isso não poderá usar ixCaseInsensitive }Add('', 'codigo', [ixPrimary]);{ A opção ixCaseInsensitive não é valida para chaves primárias}{ Nunca crie mais indices do que você precisar. Você poderá fazer isso depois}Add('NomeIDX', 'Nome', [ixCaseInsensitive]); Add('EnderecoIDX', 'Endereco', [ixCaseInsensitive]);{ combinando um índice com dois campos: }Add('testeIDX', 'Nome;Endereco', [ixCaseInsensitive]);Update;end; { with "Table1.IndexDefs" }Table1.CreateTable;Table1.Open;ExceptMessageDlg('Error na Criação da Tabela ou Índice', mtError, [mbOK],0); end; { try...except }mas não consegui montar o código... :huh: ali no codigo menciona:{ adiciona a chave primária e três secundárias}with Table1.IndexDefs dobeginUpdate; {não é necessário, mas...}Clear; {limpa os antigos}{ A chave priária Paradox não tem nome.}{ Nunca de o mesmo nome do campo ao índicese fizer isso não poderá usar ixCaseInsensitive }Add('', 'codigo', [ixPrimary]);{ A opção ixCaseInsensitive não é valida para chaves primárias}{ Nunca crie mais indices do que você precisar. Você poderá fazer isso depois}Add('NomeIDX', 'Nome', [ixCaseInsensitive]); Add('EnderecoIDX', 'Endereco', [ixCaseInsensitive]);{ combinando um índice com dois campos: }Add('testeIDX', 'Nome;Endereco', [ixCaseInsensitive]);Update;end; { with "Table1.IndexDefs" }o problema é que não to conseguindo colocar este codigo acima dentro do codigo que eu passei!!!Poderias me ajudar?? :( p.s. só lembrando que é Micheus e não Michels.R. Beleza...carinha.....haaaaaa..e o meu não é ELDER ...é EDER.....hehehet+ ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 31, 2006 Denunciar Share Postado Maio 31, 2006 EDERNa verdade como parece-me que sua tabela já está criada (você não a cria a cada importação), acredito que você deva criar os índices via Database Desktop mesmo.O exemplo do link faz referência a criação dos indices logo após a criação da tabela, se for criar dinamicamente, primeiro deverá eliminar os que já existem (table1.deleteindex(nome_indice) - mas é só para as secundárias).Veja se para o seu caso o Database Desktop não é a solução.haaaaaa..e o meu não é ELDER ...é EDER.....heheheÉ, empatamos. :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Maio 31, 2006 Autor Denunciar Share Postado Maio 31, 2006 Na verdade como parece-me que sua tabela já está criada (você não a cria a cada importação), acredito que você deva criar os índices via Database Desktop mesmo.O exemplo do link faz referência a criação dos indices logo após a criação da tabela, se for criar dinamicamente, primeiro deverá eliminar os que já existem (table1.deleteindex(nome_indice) - mas é só para as secundárias).Veja se para o seu caso o Database Desktop não é a solução.Não...colega.....eu vou criar tudo a cada importação...pois na importação vou sobrepor ao antigo.Esta tabela vai servir somente para consultas....então a empresa vai me mandar o txt e eu vou importar do zero...vai ser um processo feito diariamente..então preciso de algo..pratico entende?Então eu teria que adaptar aquele codigo que você me ajudou a montar... mas este que você me passou criando os primarios e secundarios. :( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 31, 2006 Denunciar Share Postado Maio 31, 2006 Neste caso, considerando dois processos seria:1) Criação da tabela -> seria todo o código do link que lhe passei, alterando apenas os nomes, tipos e tamanhos dos compos da tabela e eliminando os comandos Update os quais geram exception. Melhorando ele um pouco:procedure TForm1.CriaTabelaImportacao(TableNome :string); begin try Table1.Close; {o mesmo que Active:=False } Table1.DatabaseName := TableNome; { um alias BDE ou diretório} Table1.TableName := 'client.DB'; { extensão .DB é opcional} Table1.TableType := ttParadox; { deve ser especificado quando se cria uma tabela} { definindo alguns campos} with Table1.FieldDefs do begin Clear; { limpa a tabela antiga} { a chave primária deve ser criada com o atributo "required" como true: } Add('Codigo', ftString, 5, true); // o TRUE significa que é requerido - não pode ser nulo Add('CodProd', ftString, 5, true); Add('Nome', ftString, 20, false); Add('Cidade', ftString, 10, false); Add('UF', ftString, 2, false); end; { "with Table1.FieldDefs" } { adiciona a chave primária e três secundárias} with Table1.IndexDefs do begin Clear; {limpa os antigos} { A chave priária Paradox não tem nome.} { Nunca de o mesmo nome do campo ao índice se fizer isso não poderá usar ixCaseInsensitive } Add('', 'codigo', [ixPrimary]); { A opção ixCaseInsensitive não é valida para chaves primárias} { Nunca crie mais indices do que você precisar. Você poderá fazer isso depois} Add('NomeIDX', 'Nome', [ixCaseInsensitive]); Add('CidadeIDX', 'Cidade', [ixCaseInsensitive]); { combinando um índice com dois campos: } Add('TesteIDX', 'Cidade;Nome', [ixCaseInsensitive]); end; { with "Table1.IndexDefs" } Table1.CreateTable; Table1.Open; Except MessageDlg('Error na Criação da Tabela ou Índice', mtError, [mbOK],0); end; { try...except } end; 2) Importação dos dados -> é a sua rotina, adaptada para recriar a tabela (chamada para o procedimento acima):procedure TForm1.Button2Click(Sender: TObject); var Txt : TextFile; Entrada : String; begin Assignfile(Txt,'Clientes.Txt'); Reset(Txt); CriaTabelaImportacao('c:\temp\cliente.db'); // ajustar o nome While not Eoln(Txt) do begin Readln(Txt,Entrada); Table1.Insert; Table1.FieldByName('Codigo').Value := Trim(Copy(Entrada,01,05)); Table1.FieldByName('CodProd').Value := Trim(Copy(Entrada,06,05)); Table1.FieldByName('Nome').Value := Trim(Copy(Entrada,11,20)); Table1.FieldByName('Cidade').Value := Trim(Copy(Entrada,31,10)); Table1.FieldByName('UF').Value := Trim(Copy(Entrada,41,02)); Table1.Post; end; CloseFile(Txt); Button3.Enabled := True; end;E agora deve funcionar. Dê uma verificada, falou?! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Junho 3, 2006 Autor Denunciar Share Postado Junho 3, 2006 carinha perdão pela demora em responder ...esta semana tava muito tumultuada...finald e mês sabe como é!!Carinha eu testei e funcionou legal...jóia..só mais uma pequena dúvida amigão:como eu crio um campo AUTOINCREMENTO.???e você me deu uma dica de criar campos alphanumericos....o alphanumerico você define assim: ftString o campo D-Date é assim: ftDateO T-Time assim: fttimeI-Integer: ftintegere o campo N-NUMERICO??Amigão...muito grato pela ajuda mais uma vez.....abraço...t+ ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Junho 5, 2006 Denunciar Share Postado Junho 5, 2006 como eu crio um campo AUTOINCREMENTO.???ftAutoInce o campo N-NUMERICO??ftFloatpara retirar as outras dúvidas (a resposta é encontrada no mesmo lugar), sugiro que você posicione o cursor do mouse sobre o texto FieldDefs (na linha do código: with Table1.FieldDefs do) e tecle F1 (ajuda), no texto que aparece deve ter algo como property FieldDefs: TFieldDefs;, clicando no link TFieldDefs, você procura pelo link referente aos metodos (methods); na lista que aparece é só procurar pelo método Add e lá estarão todos os tipos de campos que você pode utilizar.É o que eu sempre faço quando necessito de mais detalhes (não dá para lembrar de tudo né) :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Junho 5, 2006 Autor Denunciar Share Postado Junho 5, 2006 beleza carinha...mais uma vez...muito grato pela ajuda...boa semana se trampo...t+ :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eder
Olá..
Eu tou com um probleminha..
Nosso colega Michels me ajudou a montar este codigo pra converte um txt >> paradox
porem eu queria agora alem de converter como abaixo ....também criar os indices primarios os *.PX e os secundarios..mas não to conseguindo.
no caso o indice primário seria o campo CODIGO
e o secundario seria o campo CODPROD
//TXT>>DB
Grato
:D
Link para o comentário
Compartilhar em outros sites
8 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.