Fórum Ao dar um CdsProdutos.Open; jogar cadastros num txt. Como? #348892
13/11/2007
0
Como que eu poderia fazer esta rotina? Abrir um projeto para terminal de consulta de um mercado, só que os dados todos vão para um TXT. Ao adicionar um Novo, vai para o txt. Só que esses produtos devem ser os mesmos do banco de dados! Portanto, o que eu precisaria fazer, era o seguinte: Toda vez que dou um Open no Client, o mesmo deverá jogar os registros para o TXT, seguindo o seguinte layout:
111111111|Baby Car Ride|0.52|
3333333|Dive Watch|6.50|
7898888888888|Baby Car Ride|29.99|
7892222222222|Dive Watch|125.00|
7895555555555|38pc Tool Set|99.50|
9313888006370|Disquete Nashuatec|7.50|
123|Teste Pin Pad|Priceless|
4009993902090|Diskete Basf|2,00|
7896886457372|Caderno 1/8 South|2,58|
7897072000211|Filtro De Linha|15,90|
7890552725963|capa cd|0,50|
7890552725964|capa cd|0,50|
como que eu poderia fazer?
Desde já, agradeço.
Muito obrigado!
Lucas_spohr
Curtir tópico
+ 0Posts
13/11/2007
Vitor Alcantara
Aqui segue um pequeno exemplo.
var f:textfile; begin AssignFile(f,´c:\ nome do seu arquivo de texto.txt´);//Indica o arquivo que irá ser gravado Rewrite(f);//Indica que o arquivo será criado ou reescrito (caso já exista) //Aqui você coloca o seu laço SeusDados.First; While not SeusDados.eof do Begin Write(f, SeusDados.FieldByName(´Codigo´).AsString + ´|´);//Escreve e continua na mesma linha Write(f, SeusDados.FieldByName(´Nome´).AsSTring + ´|´);//Escreve e continua na mesma linha WriteLn(f,SeusDados.FieldByName(´Preco´).asString +´|´);//Esecreve e salta para a próxima linha SeusDados.Next; end; CloseFile(f);//Esvazia o buffer e joga no arquivo de texto end;
Gostei + 0
17/11/2007
Lucas_spohr
Desculpa a demora para responder, mas muito obrigado! Era exatamente isso que eu precisava! Fiz este teste, fazendo conexão normalmente com o banco, indo no datamodule, configurando manualmente as propriedades do sqlconnection, etc... Agora, vou ter que fazer de uma maneira diferente:
Fazer a conexão com o banco, via-código, utilizando arquivo INI onde, no cliente em que estará este sistema, eu abro o caminho.ini e altero a linha onde estará o IP + caminho do banco...
como que eu poderia fazer isto?
Desde já, agradeço...
Muito obrigado!!
Gostei + 0
17/11/2007
Vitor Alcantara
Declare a unit IniFiles na uses do seu form.
o exemplo abaixo pega o valor e joga em uma váriavel qualquer.
exemplo do arquivo teste.ini
[SERVIDOR]
IP=192.168.0.1:c:\MeuBanco.GDB
Você poderia fazer assim pra ler tal arquivo.
Var ini:tInifile;//Declara aqui a váriavel onde será trabalhado o arquivo ini SERVIDOR:STring; begin ini := tInifile.Create(´c:\teste.ini´);//Inicializa o objeto e indica qual arquivo será trabalhado com o mesmo. //Pega o valor de ip e grava na variavel servidor SERVIDOR := ini.ReadString(´SERVIDOR´,´IP´,´´); //Passa a variavel para os parametro DataBase do SqlConnection DataModule.SqlConnection.Close; DataModule.SqlConnection.Params.Values[´Database´] := SERVIDOR; DataModule.SqlConnection.Open; end;
No comando ini.ReadString você tem que informar trez valores.
1º a sessão onde se encontra a propriedade no arquivo ini (SERVIDOR)
2º a propriedade no qual você quer obter o valor (IP)
3º um valor padrão para ser atribuido caso não exista tal propriedade no arquivo ini (´´)
PS. Para gravar em arquivos ini é parecido só que em vez de ReadString utiliza-se WriteString.
Gostei + 0
17/11/2007
Lucas_spohr
mas eu coloco no meu frmPrincipal ou no meu DataModule, este código?
Gostei + 0
17/11/2007
Vitor Alcantara
Gostei + 0
17/11/2007
Lucas_spohr
var
f:textfile;
ini: TIniFile;
Servidor : String;
begin
ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+(´caminho2.ini´));
Servidor := ini.ReadString(´SERVIDOR´,´IP´,´´);
Dados.SdsProdutos.Close;
Dados.SdsProdutos.Params.Values[´Database´] := Servidor;
Dados.SdsProdutos.Open;
CdsProdutos.Open;
AssignFile(f,ExtractFilePath(ParamStr(0)) + ´pricetab.txt´);//Indica o arquivo que irá ser gravado
Rewrite(f);//Indica que o arquivo será criado ou reescrito (caso já exista)
//Aqui você coloca o seu laço
CdsProdutos.First;
While not CdsProdutos.eof do
Begin
Write(f, CdsProdutos.FieldByName(´Barra´).AsString + ´|´);//Escreve e continua na mesma linha
Write(f, CdsProdutos.FieldByName(´Descricao´).AsString + ´|´);//Escreve e continua na mesma linha
WriteLn(f,CdsProdutos.FieldByName(´Preco´).AsString +´|´);//Escreve e salta para a próxima linha
CdsProdutos.Next;
end;
CloseFile(f);//Esvazia o buffer e joga no arquivo de texto
end;
Na linha Dados.SdsProdutos.Params.Values[´Database´] := Servidor;
informa que Values não está declarado...
Gostei + 0
19/11/2007
Lucas_spohr
Gostei + 0
19/11/2007
Vitor Alcantara
Gostei + 0
19/11/2007
Lucas_spohr
eu estive usando o SdsProdutos (SQLDataSet) ao invés de usar o Banco (SQLConnection), hehe
Muito obrigado!
Qualquer coisa, posto aí...
Gostei + 0
20/11/2007
Lucas_spohr
Ae pessoal! Agora, preciso do seguinte:
Para funcionar o terminal de consultas, em uma certa máquina o programinha deverá ficar sempre aberto. Os preços dos produtos, são atualizados pelo ERP. Digamos que, para teste, eu queira atualizar um preço pelo IBExpert. Altero, ENTER, Commit. Produto alterado. Como o programinha do terminal ficará sempre aberto, automaticamente, o preço do produto no projeto do terminal, não se atualizará automaticamente, sem que alguém clique num botão, para Atualizar.
Qual a rotina que eu poderia colocar no botão, para atualizar?
Sendo que no OnCreate do meu DataModule, está os códigos postados acima:
CdsProdutos.Open;
AssignFile(f,ExtractFilePath(ParamStr(0)) + ´pricetab.txt´);//Indica o arquivo que irá ser gravado
Rewrite(f);//Indica que o arquivo será criado ou reescrito (caso já exista)
//Aqui você coloca o seu laço
CdsProdutos.First;
While not CdsProdutos.eof do
Begin
Write(f, CdsProdutos.FieldByName(´Barra´).AsString + ´|´);//Escreve e continua na mesma linha
Write(f, CdsProdutos.FieldByName(´Descricao´).AsString + ´|´);//Escreve e continua na mesma linha
WriteLn(f,CdsProdutos.FieldByName(´Preco´).AsString +´|´);//Escreve e salta para a próxima linha
CdsProdutos.Next;
end;
CloseFile(f);//Esvazia o buffer e joga no arquivo de texto
e no botão atualizar? Seria, no caso... Atualizar o banco, e reescrever no TXT, os produtos novamente...
Obrigado!
Gostei + 0
20/11/2007
Lucas_spohr
Gostei + 0
20/11/2007
Lucas_spohr
Gostei + 0
21/01/2008
Lvenanciol
Aproveitei a orientação do Vítor para apontar o banco informado no arquivo e ini e deu certo. O meu problema agora é que ao executar o banco localmente ele funciona 100¬, quando aponto o config para o meu servidor ele informa a seguinte mensagem:
´Database server error: unsupported on-disk structure for file c:\banco.gdb; found 11, support 10´. Já havia lido que poderia ser algo como versão diferente do banco, mas não é.
Alguma dica ?
Grato,
Leonardo
Vitória/ES
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)