Fórum Pesquisa #1406

15/12/2008

0

Bom tenho 3 probleminhas eu acho que é simples porem to meio perdido, primeiro eu preciso fazer uma pesquisa de produtos e retornar os valores num dbedit de outra tela de cadastro de itens bom eu fiz assim       procedure Tpesquisaprodutos.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
if key = #13 then
begin
idescricao:=deasy.CdsProdutos.FieldByName(nome).asstring;
icodigo:=deasy.CdsProdutos.FieldByName(barras).asstring;
cadastronotas.dbedit12.text:= idescricao;
cadastronotas.dbedit22.text:= icodigo; close; end;
end;     criei duas variaveis globais pra armazenar o valor do campo quando eu teclo enter ela deveria armazenar o valor do campo, mais nao armazena fika em branco, quando teclo o enter fika em branco na outra tela se eu deixar ativado r o clientdataset ela so me traz o primeiro registro pelo menos foi o que pareceu, nao ta me trazendo o registro q eu to selecionado no dbgrid   duvida 2 como eu faço pra calcular um valor x na tela de cadastro de um pedido pro exemplo, eu digito  a quantidade  depois coloco o valor unitario no campo valor total ele me retornar o valor total da quantidade * valor unitario, pra eu gravar esse valor total no banco de dados.     duvida 3 preciso criar um campo na minha tabela que conte os itens tipo eu insiro um iten ele me mostra iten 1 eu insiro outro iten ele me mostra 2 e que tb eu possa gravar esses valores desses itens no banco de dados.
Paulo Silva

Paulo Silva

Responder

Posts

15/12/2008

Wesley Yamazack

Paulo,

Boa tarde

Vamos lá :

Pergunta 1===============================================================

Pelo que entendi, você esta dizendo que o valor volta em branco, uma duvida, estas variáveis globais estão em que formulário ?   1 - Se estiverem no Form onde você seleciona o item e da o enter, acho que não iria funcionar, elas deveriam estar no formulário que você chama esta telinha de seleção.   2 – Se estiver no Form que você chama a tela de seleção, observe se em algum lugar você não esta limpando estas variáveis. Para fazer a prova dos 9, faça o seguinte.   procedure Tpesquisaprodutos.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
if key = #13 then
begin
idescricao:=deasy.CdsProdutos.FieldByName(nome).asstring;
icodigo:=deasy.CdsProdutos.FieldByName(barras).asstring;
cadastronotas.dbedit12.text:= idescricao;
cadastronotas.dbedit22.text:= icodigo; showmessage(‘Descricao : ’ + idescricao + ‘  Codigo : ’ + icodigo); //obs se estas variáveis forem inteiras tem de converter para + inttostr(Idescricao) e o mesmo //para icodigo; close; end;
end;
Pergunta 2===============================================================
Você pode fazer de várias maneiras,duas delas : 1 – Criar 3 variaveis [ qnt : Integer; PrecoUnit, PrecoTotal : Real ]      PrecoTotal := qnt * PrecoUnit;      Na hora de inserir os dados na tabela, você faz assim:       deasy.CdsProdutos.FieldByName(precototal).asstring := FloatToStr(PrecoTotal);   2 – Você não precisaria gravar o Total da venda, basta gravar a quantidade e o PrecoUnitario. E a qualquer momento que você queira saber qual é o total daquela venda, faça o seguinte:     PrecoTotal:=StrtoFloat(CdsProdutos.FieldByName(quantidade).asstring) * StrtoFloat(CdsProdutos.FieldByName(PretoUnit).asstring);
Pergunta3 ===============================================================
Aqui você pode criar o campo como ‘AutoIncremento’, ele será incrementado toda vez que você executar um deasy.CdsProdutos.Insert, ele irá automaticamente incluir um valor para este campo, seguindo uma ordem, onde este numero nunca se repete, e caso você apague algum item, já mais outro item terá aquele código apagado.
Att,
Wesley Yamazack


Responder

Gostei + 0

15/12/2008

Paulo Silva

pois e nao deu certo continua sem armazenar so armazena quando eu vou no cdsprodutos e ativo ele pra true sendo q so me retorna o primeiro registro independente de qual eu esteja selecionado, outra coisa conferi eu declarei a variavel global na nota var
  cadastronotas: Tcadastronotas;
  iunidade, icodigo, idescricao: string; implementation
uses upesprodutos;
{$R *.dfm}     procedure Tcadastronotas.btnpesqClick(Sender: TObject);
begin
  inherited;
  try
  pesquisaprodutos:=Tpesquisaprodutos.Create(self);
  pesquisaprodutos.ShowModal;
  finally
  pesquisaprodutos.Free;
  end;
end;     eu preciso gravar o numero do iten que é a minha terceira duvida sendo que quando eu cadastro uma nova nota esse numero começa a recontar de novo sabe tipo item 1,2,3 etc cada nota tem seus itens todos se iniciando do valor 1 eu preciso que esses itens estajam no banco de dados estou usando firebird 2.1 mais nao consegui imaginar uma maneira de mandar esses numeros sem ter q eu prencher tipo campo numero do item eu fika prenchendo la 1 depois no proximo lançamento eu coloco 2 sabe pra evitar esse desgaste aehuhueheuae.
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Bom vamos lá,
Ao inves de pegar o FieldByName do clientdataset, tenta pegar assim :  DataSource1.DataSet.FieldByName(‘Campo’).AsString;   O que eu tinha colocado anteriormente não adiantou não ? Se possível explicar um pouco mais a duvida. Pergunta3 ===============================================================Aqui você pode criar o campo como ‘AutoIncremento’, ele será incrementado toda vez que você executar um deasy.CdsProdutos.Insert, ele irá automaticamente incluir um valor para este campo, seguindo uma ordem, onde este numero nunca se repete, e caso você apague algum item, já mais outro item terá aquele código apagado.
Responder

Gostei + 0

16/12/2008

Paulo Silva

bom dia wesley agora pegou o valor sim, o campo que eu preciso que tenha o numero do item ele e uma coluna no banco de dados q identificam a ordem do registro esse campo pode se repetir tipo se eu cadastro uma nota onde ela tem o 3 itens  iten 1,2,3 quando cadastro uma outra nota ele reconta do 1 denovo talvez eu tenha entendido errado tb a sua resposta O.o
 
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Paulo,

  Vamos lá, alguns problemas foram resolvidos, agora o seu problema é com relação a nota.

  Pelo que entendi, você tem uma nota fiscal onde ela tem um código único.
  A nota ela pode ter vários itens[1,2,3,4] - Cadastrados em uma tabela produtos por exemplo.
  Na tabela dos itens da nota, você irá precisar ter o código dos produtos, e o código da nota que aqueles produtos pertencem.
  Não sei se seria isso o que você esta querendo. Se tiver como você esmiuçar mais o seu problema.

Att,

Wesley Yamazack
Responder

Gostei + 0

16/12/2008

Paulo Silva

bom dia wesley consegui resolver o problema do campo da seguinte maneira agora so pra complementar qual é a maneira mais eficaz de se adicionar um registro num dataset usando objeto do tipo edit ou maskedit?     procedure TDEASY.CDSITENDETALHENewRecord(DataSet: TDataSet);
begin
cdsitendetalheNUMEROITEN.AsInteger :=
cdsitendetalhe.RecordCount+1;
end;
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Paulo,

 Use o Edit.

 Coloque o seguinte código no evento onkeypress do seu edit:

procedure TFrmPadrao.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (key in [ 0..9, #8, #13]) then
 Key := #0;
end;

Para que ele so consiga digitar numeros no edit. Restringindo a digitação e assim evitando que ele digite letras ou caracteres especiais.

Att,

Wesley Yamazack
Responder

Gostei + 0

16/12/2008

Paulo Silva

qual a maneira correta de inserir esses dados dos edit na tabela ?  
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Coloque um botão e no evento onclick do mesmo.


Var
  vUltimoCodigo : Integer;

begin
  //teu CDS ordene ele por código
  cds.last; //vai para o ultimo registro.
  vUltimoCodigo := cds.FieldByName(Codigo).asinteger + 1;
  cds.insert;
    // passe os dados do clientdataset(descricao, qnt, etc)
    cds.FieldByName(Codigo).asinteger := vUltimoCodigo ;
  cds.post;

end;

Responder

Gostei + 0

16/12/2008

Paulo Silva

Wesley bom ja consegui fazer quase tudo que eu queria so que agora quando eu busco os registro de descricao dos produtos e codigo eles aparecem la nos dbedit certim so que se eu for prencher qualquer outro campo na tabela eles somem O.o e se eu clicar neles tb, nesse caso eu teria q colocar um edit normal? e inserir os dados na tabela? ou qual procedimento devo eu tomar?
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Isso é normal mesmo acontecer.

  Usa edit para ficar mais fácil, sacou ? Fica mais facil de controlar. Dá mais trabalho porém é mais confiável.
  Só não esquece depois de der um post no clientdataset :
  edt1.clear;
  edt2.clear;

  Garantindo assim que ele nunca irá pegar lixo de registros anteriores. sacou ?

Att,

Wesley Yamazack
Responder

Gostei + 0

16/12/2008

Paulo Silva

boa noite wesley o problema é o seguinte eu tenho um botao btninserir que executa ds.dataset.insert e tenho tb um botao pra dar salvar que executa ds.dataset.applyupdates[0];  bom quando eu coloco o codigo que vc me disse ele faz assim     ds.dataset.insert; DS.DataSet.FieldByName(SITUACAO).AsString:=ComboBox2.TEXT;
DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT; ds.dataset.post;     dessa forma o registro e gravado mais é gravado com o texto que estiver quando eu dou o insert e vou pra alterar colocar outro valor o registro vai pro banco de dados com o valor q estiver atualmente tipo se eu deixar combobox2.text vai esse valor pro bd automaticamente apos o insert se eu inserir no botao gravar esse valor, ele cria uma outra linha no bd bom como soluciono isso e depois como eu faço pra exibir esses registros ja gravado no form denovo tipo consulto ele no form mais ele nao me retorna o valor do combobox O.o fika vazio.       sei que  ja estou enchendo o sako mais tenho essa duvida ae O.o
Responder

Gostei + 0

16/12/2008

Wesley Yamazack

Boa noite,


Vamos lá. você pode fazer o seguinte.

if ((combobox1.ItemIndex > -1) and (Combobox2.ItemIndex > -1)) then
begin
   ds.dataset.insert;    DS.DataSet.FieldByName(SITUACAO).AsString:=ComboBox2.TEXT;
   DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT;    ds.dataset.post;
   combobox1.ItemIndex := -1;
   combobox2.ItemIndex := -1;
   cds.active := false;
   cds.active := True;
end
else
begin
  showmessage(Dados nao informados);
  combobox1.setfocus;
end;


E com relação a esta pertubando, nao esquenta com isso não, estou aqui para te ajudar em tudo que precisar, fica tranquilo com relação a isso.

Abraço..

Wesley
Responder

Gostei + 0

16/12/2008

Paulo Silva

suponhamos que eu tenha um form de cadastro de cliente e que nele tenha os campos nome, endereço, cidade e que eu tenha 3 dbedit que armazena os mesmos se eu usar 2combobox normal no momento que eu clico no meu botaozinho insert os dados do combobox vao pra tabela e meus dbedit entra em insert mode certo pois é eu tb tenho um outro botao que executa o ds.dataset.applyupdate que tem o nome de salvar o problema e que quando eu consulto esses mesmos dados num dbgrid ele me mostra os dados inseridos quando eu uso um botao vizualizar q vai pra tabela onde mostra os dados os dados do combobox estao vazios nao estao os dados que eu gravei na mesma tabela tentei fazer assim funciona desse jeito mais quando eu entro na tabela ela fika em insert mode eternamente O.o so sai quando eu clico no botao cancelar(ds.dataset.cancel)     procedure Tcadastronotas.ds2DataChange(Sender: TObject; Field: TField);
begin
  inherited;   ComboBox2.TEXT:= DS.DataSet.FieldByName(SITUACAO).asstring;
ComboBox1.TEXT:=DS.DataSet.FieldByName(EMISSORDOCUMENTO).asstring;   end;       no evento procedure Tcadastronotas.ds2UpdateData(Sender: TObject);
begin
  inherited;      DS.DataSet.FieldByName(SITUACAO).AsString:=ComboBox2.TEXT;
DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT;
end;   entao ele da o update certinho das informaçoes que estao na tabela quando eu clico no botao salvar mais quando eu vizualizo os dados nao vem igual em um dbedit sabe?
Responder

Gostei + 0

17/12/2008

Wesley Yamazack

Paulo, ficou meio complexo, de entender.      Uma coisa, você esta manipulando as tabelas com os mesmos componentes ? Ex. você tem 2 CDS, um esta apontado para a grid e o outro esta controlando os combobox ? Se tiver usando isso, na hora que for gravar, os dados você precisa dar um refresh no outro cds para que ele possa ser atualizado.     Se não for isso, tem como me mandar teu fonte para eu analisar melhor ?     Att,   Wesley Yamazack
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar