Codigo para campos Duplicados
O caso é o seguinte:
Tenho um form onde há varios campos duplicados. Gostaria de saber como fazer para:
Através de um edit, eu informar o preço de um produto e onde os campos forem igual a este produto receba este valor. Trabalho com delphi e interbase, IbExpert, e uso simpledataset , da aba dbExpress. Obrigado Vitor 5
Vitor5
Respostas
Nigro
22/10/2006
Vitor5
22/10/2006
Tenho um form onde é digitado várias vezes os mesmos produtos. Ex:
Sala moldura 1
Quarto moldura 1
WC moldura 2
Cozinha moldura 2 e assim por diante. O caso é que o preço do produto não está em uma tabela (os vendedores fazem o preço de venda), então os produtos podem variar de preço. O que eu gostaria é usar um Edit, e digitar o preço referente aquele produto e todos os campos no DBGrid com o mesmo código recebesse esse preço. Poderia usar select com distinct?????Como deve ficar o código????
Raserafim
22/10/2006
digamos que o DBGrid está associada a um ClientDataSet, então o que devemos fazer é varrer este ClientDataSet e alterar os valores dos produtos com o mesmo código.
poderia ser algo mais ou mesnos assim:
ClientDataSet1.First; while ClientDataSet1.Eof = false do begin if ClientDataSet1CODIGO.value = Edit1CODIGO.text then begin ClientDataSet1.Edit; ClientDataSet1VALOR.value = strtoint(Edit1VALOR.text); ClientDataSet1.Post; end; ClientDataSet1.Next; end;
Rinez
22/10/2006
Porque não usas StringGrid. Voce coloca o componete StringGrid em um form e configura todas as colunas que queres e no evento ontopleftchanged do StringGrid voce faz todos os calculos.
Se precisar de ajuda é so avisar.
Zenir Curitiba.
Vitor5
22/10/2006
ClientDataSet1.First; while ClientDataSet1.Eof = false do begin if ClientDataSet1CODIGO.value = Edit1CODIGO.text then begin ClientDataSet1.Edit; ClientDataSet1VALOR.value = strtoint(Edit1VALOR.text); ClientDataSet1.Post; end; ClientDataSet1.Next; end;
Obrigado por responder, parece que o caminho realmente é este que você está me passando, só que: Ele está atualizando todos os campos, incluisive os com códigos diferentes. Estou desenvolvendo em delphi 7 uso Interbase, IbExpert, no meu datamodule uso, simpledataset e datasource.
Os campos de minha tabela itens de pedidos não tenho uma chave primária por gerar conflito no codigo que criei.
O campo cod_prod está como integer, o campo preço está como decimal.
Coloquei um dbedit ligado a tabela itens e um edit onde informo o preço, um dbgrid ligado a tabela, só que quando coloco um preço ele atualiza todos os códigos. Gostaria que ele atualizasse somente aquele referente aquele que estou digitando...O que está de errado???Pderia me ajudar????Obrigado
Vitor5
22/10/2006
ClientDataSet1.First; while ClientDataSet1.Eof = false do begin if ClientDataSet1CODIGO.value = Edit1CODIGO.text then begin ClientDataSet1.Edit; ClientDataSet1VALOR.value = strtoint(Edit1VALOR.text); ClientDataSet1.Post; end; ClientDataSet1.Next; end;
Obrigado por responder, parece que o caminho realmente é este que você está me passando, só que: Ele está atualizando todos os campos, incluisive os com códigos diferentes. Estou desenvolvendo em delphi 7 uso Interbase, IbExpert, no meu datamodule uso, simpledataset e datasource.
Os campos de minha tabela itens de pedidos não tenho uma chave primária por gerar conflito no codigo que criei.
O campo cod_prod está como integer, o campo preço está como decimal.
Coloquei um dbedit ligado a tabela itens e um edit onde informo o preço, um dbgrid ligado a tabela, só que quando coloco um preço ele atualiza todos os códigos. Gostaria que ele atualizasse somente aquele referente aquele que estou digitando...O que está de errado???Pderia me ajudar????Obrigado[/quote:284e7c1ad1]
E aí amigo dá pra dar essa luz inspiradora??/Obrigado Vitor 5
Raserafim
22/10/2006
posta aqui o seu código.
Vitor5
22/10/2006
procedure TformRecebimentos.fldPrecoExit(Sender: TObject);
begin
dm.sdsItensPedido.First;
while dm.sdsItensPedido.Eof = false do
begin
if (Dbedit1.Text) = dm.sdsItensPedidoCOD_PROD.AsString then
begin
dm.sdsItensPedido.Edit;
dm.sdsItensPedidoPreco.AsString :=fldPreco.text;
dm.sdsItensPedido.Post;
end;
dm.sdsItensPedido.ApplyUpdates(-1);
dm.sdsItensPedido.Next;
Esté é o código, só que ele atualiza todos os campos de uma vez só, e não só o codigo que preciso, será que precisa de uma variável????
Marco Salles
22/10/2006
Este codigo de While noe eof , do jeito que fora proposto , tende a ficar lento com o aumento da base de dados.. Além de alteras todos os produtos da tabela com o mesmo codigo , para o novo preço , pois em nenhum momento vi nenhuma restrição com o numero do pedido (Ou numero da venda)....
if ClientDataSet1CODIGO.value = Edit1CODIGO.text then
isto so não é suficiente....É necessário filtrar os registros para que o laço While percorra somente os registros relacionados a uma determinada venda <ou determinado pedido>
Por outro lado a condição do codigo
Pode ocorrer que sera sempre verdadeira...Pois se o DbEdit1.text estiver ligado a um Datasorce que aponte para a mesma tabela que
sdsItensPedido... Logo sdsItensPedido.Next ira deslocar o ponteiro também no Dbedit1.text o que faz com que todos os campos sejam atualizados de uma so vez
Outra coisa que parece estar errado é o amigo dar um ApllyUpdates(-1), dentro do loop...Isto tabém não esta correto
O correto , é usar fazer um Update
Vitor5
22/10/2006
Este codigo de While noe eof , do jeito que fora proposto , tende a ficar lento com o aumento da base de dados.. Além de alteras todos os produtos da tabela com o mesmo codigo , para o novo preço , pois em nenhum momento vi nenhuma restrição com o numero do pedido (Ou numero da venda)....
if ClientDataSet1CODIGO.value = Edit1CODIGO.text then
isto so não é suficiente....É necessário filtrar os registros para que o laço While percorra somente os registros relacionados a uma determinada venda <ou determinado pedido>
Por outro lado a condição do codigo
Pode ocorrer que sera sempre verdadeira...Pois se o DbEdit1.text estiver ligado a um Datasorce que aponte para a mesma tabela que
sdsItensPedido... Logo sdsItensPedido.Next ira deslocar o ponteiro também no Dbedit1.text o que faz com que todos os campos sejam atualizados de uma so vez
Outra coisa que parece estar errado é o amigo dar um ApllyUpdates(-1), dentro do loop...Isto tabém não esta correto
O correto , é usar fazer um Update[/quote:b4402b9230]
Se isto não funciona então tem uma idéia de como fazer isto, se pudesse ser mais detalhado obrigado Vitor5
Raserafim
22/10/2006
if ClientDataSet1CODIGO.value = Edit1CODIGO.text then
suficiente e não achei necessário verificar a venda pois este código estará percorrendo o dataset da venda atual, então supus que os ítens que estão neste dataset são referente a venda atual, que é a que se quer mudar.
e em relação a outra verificação o que Marco Salles falou é verdade, verifique até mesmo se este não foi o caso de o seu código Vitor não ter funcionado. Mas coloquei desta forma pois pelo que entendi é realmente um edit no form que não tem ligação com nenhum dataset.
quanto ao ApllyUpdates(-1) além do que o Marco Salles falou (do problema de estar dentro do loop), acho que vc deveria usar o ApplyUpdates(0), para que não aceite nenhum erro).
Raserafim
22/10/2006
além de mais algumas alterações:
procedure TformRecebimentos.fldPrecoExit(Sender: TObject); begin dm.sdsItensPedido.First; while dm.sdsItensPedido.Eof = false do begin if (Dbedit1.Text) = (dm.sdsItensPedidoCOD_PROD.AsString) then begin dm.sdsItensPedido.Edit; dm.sdsItensPedidoPreco.AsString :=fldPreco.text; dm.sdsItensPedido.Post; end; dm.sdsItensPedido.Next; end; dm.sdsItensPedido.ApplyUpdates(-1); end;
Marco Salles
22/10/2006
Mas qual a restrição que voce esta impondo ,para que o dataset , digamos assim , percorra apenas a venda atual ??? . Eu não consigo ver esta restrição...Sem esta restrição , alem da lentidão, produtos com o mesmo codigo de operações anteriores , terão os seus preços alterados...
Quanto a usar o Update , para fornecer o codigo correto e não deixar erros , vou convencionar que
assim poderia tentar :
Aonde:
[b:6679d56820]Importante>>> colocar a propriedade AllowComandText do DatasetProvider em True[/b:6679d56820]
De quelquer maneira o comando While eof do que o amigo resarafim colocou , funciona , no meu modo de ver desde que se faça uma restrição.. A constribuição dele é importante assim como a sua disponibilidade em contribuir... Não estou aqui desacreditando-o em comparação deste ou daquele método.. estou apenas colocando uma maneira que usando o Update. Particularmente eu prefiro o Update
Vitor5
22/10/2006
Tenho um form de pedidos, ligado a tabela pedidos, e uma tabela itens. Como trabalho com cômodos e produtos, vários cõmodos podem ter o mesmo produto Ex:
Cômodos Cod Prod Descr Produto Qtde Preco Unitário
Sala 003 Moldura de 10 cm 10,00
Quarto 003 Moldurta de 10 cm 20,00
Cozinha 004 Moldura de 20 cm 15,00
Banheiro 005 Moldura de 30 cm 22,50.
Após digitado, e antes de salvar o pedido ele abre um outro form onde recebe o numero de pedido com Valor Total, Desconto.... E neste form queria colocar um campo onde digitasse o valor unitário e todos os pordutos referente a este codigo receberia o valor, só que no meu caso está atualizando todos os códigos. Não precisaria estar digitando o preço de todos e somente referente a código. (Esse preço tem quer ser digitado na hora do fechamento, não pode estar na tabela). Na minha tabela itens não tem chave primaria, pois por repetir varias vezes os mesmos codigos ela gerava erro, por isso resolvi deixar sem chave primária.Como poderia resolver este codigo?????. Obrigado vitor5
Marco Salles
22/10/2006
Segue esta outra linha de raciocineo:
[b:c8ae25a33d]Use um Sql para agrupar por codigo de produto [/b:c8ae25a33d]
Descarregue usando o While not eof em um StringGrid... Pesquise aqui no forum sobre o StringGrid
Nesse StringGrid deixe uma Coluna Chamado Valor_Unitário
Ficara assim apos o Agrupamento
Nesse form Que se abriu , apos carregar os valores respctivamente usando uma StringGrid , coloque o valor do preço unitário Correspondente na coluna
Finalmente , na hora de fechar o Form ou em qualquer botao , Varra o StringGrid editando na base de dados
Tipo isso:
volte para o formulário Principal.....
Tente fazer isso.... Que voce ira conseguir
Vitor5
22/10/2006
Segue esta outra linha de raciocineo:
[b:65cc8937ad]Use um Sql para agrupar por codigo de produto [/b:65cc8937ad]
Descarregue usando o While not eof em um StringGrid... Pesquise aqui no forum sobre o StringGrid
Nesse StringGrid deixe uma Coluna Chamado Valor_Unitário
Ficara assim apos o Agrupamento
Nesse form Que se abriu , apos carregar os valores respctivamente usando uma StringGrid , coloque o valor do preço unitário Correspondente na coluna
Finalmente , na hora de fechar o Form ou em qualquer botao , Varra o StringGrid editando na base de dados
Tipo isso:
volte para o formulário Principal.....
Tente fazer isso.... Que voce ira conseguir[/quote:65cc8937ad]
Amigo desculpe pela minha falta de conhecimento, sou iniciante em Delphi, estou engatinhando ainda, comprei vários livros e nenhum especifica stringgrid. Tem alguma apostila ou artigo de como trabalhar com stringgrid?. Pelo que andei lendo nos foruns, talvez resolva este probreminha onde dei uma encalhada. Obrigado
Vitor5
22/10/2006
Amigo Marcos Sales, essa idéia de usar um stringgrid achei legal, andei pesquisando mais ainda falta eu entender como fazer isto. Acho que ficaria mais fácil. Se eu antes de gravar ele abrir um form onde esteja uma stringgrid, com os campos cod_prod e valor unitário. Depois de fechar ele me vai me trazer na tabela itens os preços referente ao digitado na stringgrid. Isto ficaria muito mais fácil. Como faria o código para o stringgrid receber esse valor? E como fazer o código para retornar ao form de Pedidos?
Eu estava o simpledataset e datasorce da paleta dbExpress, só que mesmo eu usando como Query ele não permitia o uso de funções sql que vc tinha me enviado. Fiz um teste colocando uma query do DBExpress, parece que a coisa está melhor. Em todo meu form estou usando o simpledataset e não datasetprovider.
Marco Salles
22/10/2006
[b:455d3a0f34]Olha , eu fiz aqui , rapidinho , usando o DbExpress + SqlQuery + DataSetProvide + ClientDataSet..[/b:455d3a0f34]
Sugiro que voce [color=darkred:455d3a0f34]acompanhe o Exemplo [/color:455d3a0f34]e estude e certamente voce ira conseguir adapta-lo para o que voce quer....
[b:455d3a0f34]Mas acompanhe mesmo; Leia com atenção[/b:455d3a0f34]
No IbExpert Criei uma Tabela Chamada Moldura com os campos
No Form Principal , coloquei
Finalmente no form1 em algum Botão que chamo o form2 Faço
No Form Principal , coloquei
Finalmente no form1 em algum Botão que chamo o form2 Faço
{O Que esta instrução faz...Ora , ele ira agrupar e somar.. Ate ai tudo bem}
No evento OnShow do Form2 Fiz o seguinte:
{O Que esta instrução faz...Ora , ele ira agrupar e somar.. Ate ai tudo bem}
No evento OnShow do Form2 Fiz o seguinte:
Ainda coloquei este codigo para evitar erros acidentais de edição
Por fim ,,, nesse momento do form2 , esta tudo agrupado , esperando somente o usuário digitar o valor de Preço unitario para cada Moldura
Feito isto em um Botão <pode também ser no fechamento do Form> Digite o seguinte codigo
Ainda coloquei este codigo para evitar erros acidentais de edição
Por fim ,,, nesse momento do form2 , esta tudo agrupado , esperando somente o usuário digitar o valor de Preço unitario para cada Moldura
Feito isto em um Botão <pode também ser no fechamento do Form> Digite o seguinte codigo
Teste este exemplo isolado , estude as etapas , e adpate as suas necessidades...
Boa sorte:
Marco Salles
22/10/2006
Estou aqui postando novamente , para não ficar confuso:[/b:1475c64211]
[b:1475c64211]Olha , eu fiz aqui , rapidinho , usando o DbExpress + SqlQuery + DataSetProvide + ClientDataSet..[/b:1475c64211]
Sugiro que voce [color=darkred:1475c64211]acompanhe o Exemplo [/color:1475c64211]e estude e certamente voce ira conseguir adapta-lo para o que voce quer....
[b:1475c64211]Mas acompanhe mesmo; Leia com atenção[/b:1475c64211]
No IbExpert Criei uma Tabela Chamada Moldura com os campos
No Form Principal , coloquei
Finalmente no form1 em algum Botão que chamo o form2 Faço
No Form Principal , coloquei
Finalmente no form1 em algum Botão que chamo o form2 Faço
{O Que esta instrução faz...Ora , ele ira agrupar e somar.. Ate ai tudo bem}
No evento OnShow do Form2 Fiz o seguinte:
{O Que esta instrução faz...Ora , ele ira agrupar e somar.. Ate ai tudo bem}
No evento OnShow do Form2 Fiz o seguinte:
Ainda coloquei este codigo para evitar erros acidentais de edição
Por fim ,,, nesse momento do form2 , esta tudo agrupado , esperando somente o usuário digitar o valor de Preço unitario para cada Moldura
Feito isto em um Botão <pode também ser no fechamento do Form> Digite o seguinte codigo
Ainda coloquei este codigo para evitar erros acidentais de edição
Por fim ,,, nesse momento do form2 , esta tudo agrupado , esperando somente o usuário digitar o valor de Preço unitario para cada Moldura
Feito isto em um Botão <pode também ser no fechamento do Form> Digite o seguinte codigo
Teste este exemplo isolado , estude as etapas , e adpate as suas necessidades...
Boa sorte:
Marco Salles
22/10/2006
Vitor5
22/10/2006
Teria problema em trabalhar com SimpleDataset e DataSetProvider, digo usar os dois no DataModule?????Obrigado pelo super código
Marco Salles
22/10/2006
Mas para o exemplo funcionar , voce deve fazer algumas alteraçoes:
1)
[b:b65c8ebc49]No Segundo SimpleDataSet escreva na propriedade ComandText [/b:b65c8ebc49]
em seguida Vá na propreidade Params <atenção : Abaixo da propriedade packRecork> e defina o tipo de parametro
[b:b65c8ebc49]No terceiro SimpleDataSet escreva na propriedade ComandText [/b:b65c8ebc49]
em seguida Vá na propreidade Params <atenção : Abaixo da propriedade packRecork> e defina os tipos de parametros
Agora escreva os seguintes Codigos:
procedure TForm1.Button1Click(Sender: TObject);
begin
spdsg.Close;
Spdsg.Params[0].AsInteger:=SpDs.fieldbyName(´ID´).AsInteger;
Spdsg.Open;
form2.ShowModal;
end;
e para carregar os valores
em seguida Vá na propreidade Params <atenção : Abaixo da propriedade packRecork> e defina os tipos de parametros
Agora escreva os seguintes Codigos:
procedure TForm1.Button1Click(Sender: TObject);
begin
spdsg.Close;
Spdsg.Params[0].AsInteger:=SpDs.fieldbyName(´ID´).AsInteger;
Spdsg.Open;
form2.ShowModal;
end;
e para carregar os valores
e para salvar os valores
O segredo é voce adaptar isto á sua necessidade....
Vitor5
22/10/2006
Será que aqui tem um erro???
e para carregar os valores
e para carregar os valores
Citação:
procedure TForm2.FormShow(Sender: TObject);
var
i:integer;
begin
Sgd.Cells[0,0]:=´Codigo_Moldura´;
Sgd.Cells[1,0]:=´Descrição_Moldura´;
Sgd.Cells[2,0]:=´Quantidade´;
Sgd.Cells[3,0]:=´Valor_Unitario´;
sgd.RowCount:=Form1.SpDsG.RecordCount+1;
i:=1;
form1.SpdsG.First;
While not Form1.SpdsG.Eof do
begin
Sgd.Cells[0,i]:=form1.SpdsG.fieldByName(´Codigo_Moldura´).AsString;
Sgd.Cells[1,i]:=form1.SpdsG.fieldByName(´Descricao_Moldura´).AsString;
[b:a620855002]Sgd.Cells[2,i]:uote]Update Moldura set Valor_Unitario =:pNovoValor [/b:a620855002]
Where Codigo_Moldura =:PCodigo
Bem, acho que a coisa é por aí, mas delculpe o tormento. Tenho algumas duvidas com parametros ainda, no meu form ainda não havia mexido com isto. Bom quanto ao SqlConection e com simpledataset, aqui no meu delphi não preciso usar SqlConnection com o simpledataset, o próprio simpledataset faz a conexão com o banco através da propriedade ´Connection´. Tenho no meu banco de dados uma tabela para Controle de Sequencia, que controla todos os numeros de autonumeração da tabela. Nesta tabela tenho um campo Registro onde é a chave primaria desta tabela, e muitos outros como ´ Cod_Fornecedor, Cod_Cliente........Numero_Pedido, RegistroItensPedido.... Teria como criar um um parametro referente a estes campos?????. Dá pra dar uma luizinha????
Vitor5
22/10/2006
procedure TformPedidos.btnadicionarClick(Sender: TObject);
var
intNumeroPedido:integer;
begin
inherited;
if Sender = btnAdicionar then
begin
try
dm.sdsControle.Edit;
dm.sdsControleNUMERO_PEDIDO.AsInteger:=dm.sdsControleNUMERO_PEDIDO.AsInteger +1;
dm.sdsControle.Post;
dm.sdsControle.ApplyUpdates(-1);
intNumeroPedido:=dm.sdsControleNUMERO_PEDIDO.asinteger;
dm.sdsPedidos.Append;
dm.sdsPedidosDATA_PEDIDO.AsDateTime:=date;
dm.sdsPedidosNUMERO_PEDIDO.AsInteger:=intNumeropedido;
grpItensPedido.Enabled:=true;
dbLookupVendedor.Enabled:=true;
dbLookupArquitetos.Enabled:=true;
dbLookupClientes.Enabled:=true;
fldModelos.KeyValue:=´´;
chrModo:=´I´;
except
msgStatus(´´);
Mensagem(´Impossível adicionar novo registro!´);
end;
end
else if Sender = btnEditar then
begin
try
dm.sdsPedidos.Edit;
dm.sdsItensPedido.Edit;
chrModo:=´A´;
except
msgStatus(´´);
Mensagem(´Impossível entrar no modo de edição!´);
end;
end;
grpItensPedido.Enabled:=true;
dbLookupVendedor.Enabled:=true;
dbLookupArquitetos.Enabled:=true;
dbLookupClientes.Enabled:=true;
MoveFoco;
LimpaProdutos;
end;
E tenho também um botão para incluir os Itens
....procedure TformPedidos.btnIncluirClick(Sender: TObject);
var
strComodos,strDim1,strDim2,strProdutos,
strModelo,strMl,strM2,strQtde:string;
strCodProd:integer;
intRegistro:integer;
begin
if Trim(fldComodos.Caption)= ´´ then
Mensagem(´Selecione um cômodo para incluir no pedido!´)
else
begin
if Trim(fldProduto.Caption) =´´ then
Mensagem(´Selecione um produto para incluir no pedido!´)
else
begin
if Trim(fldQtde.Text) =´´ then
Mensagem(´Digite uma quantidade para incluir no pedido!´)
else
Begin
strComodos:=Trim(fldComodos.Caption);
strDim1:=(Trim(fldDim1.Text));
strDim2:=(Trim(fldDim2.Text));
strProdutos:=(trim(fldProduto.Caption));
strCodProd:=dm.sdsDescricaoCODIStatus(´´);
Mensagem(´Impossível entrar no modo de edição!´);
end;
end;
grpItensPedido.Enabled:=true;
dbLookupVendedor.Enabled:=true;
dbLookupArquitetos.Enabled:=true;
dbLookupClientes.Enabled:=true;
MoveFoco;
LimpaProdutos;
end;
E tenho também um botão para incluir os Itens
....procedure TformPedidos.btnIncluirClick(Sender: TObject);
var
strComodos,strDim1,strDim2,strProdutos,
strModelo,strMl,strM2,strQtde:string;
strCodProd:integer;
intRegistro:integer;
begin
if Trim(fldComodos.Caption)= ´´ then
Mensagem(´Selecione um cômodo para incluir no pedido!´)
else
begin
if Trim(fldProduto.Caption) =´´ then
Mensagem(´Selecione um produto para incluir no pedido!´)
else
begin
if Trim(fldQtde.Text) =´´ then
Mensagem(´Digite uma quantidade para incluir no pedido!´)
else
Begin
strComodos:=Trim(fldComodos.Caption);
strDim1:=(Trim(fldDim1.Text));
strDim2:=(Trim(fldDim2.Text));
strProdutos:=(trim(fldProduto.Caption));
strCodProd:=dm.sdsDescricaoCODIGO_DESCRICAO.AsInteger;
strMl:=(trim(fldTotalMl.Caption));
strM2:=(trim(fldTotalM2.Caption));
strModelo:=(Trim(fldModelos.Text));
strQtde:=(trim(fldQtde.Text));
dm.sdsControle.Edit;
dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger:=
dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger +1;
dm.sdsControle.Post;
dm.sdsControle.ApplyUpdates(-1);
intRegistro:=dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger;
dm.sdsItensPedido.Append;
dm.sdsItensPedidoRegistro.asInteger:=intRegistro;
dm.sdsItensPedidoCOMODOS.AsString:=strComodos;
dm.sdsItensPedidoDIM1.AsString:=strDim1;
dm.sdsItensPedidoDIM2.AsString:=strDim2;
dm.sdsItensPedidoNOME_PROD.AsString:=strProdutos;
dm.sdsItensPedidoCOD_PROD.AsInteger:=strCodProd;
dm.sdsItensPedidoML.AsString:=strMl;
dm.sdsItensPedidoM2.AsString:=strM2;
dm.sdsItensPedidoMODELO.AsString:=strModelo;
dm.sdsItensPedidoQTDE.AsString:=strQtde;
LimpaProdutos;
end;
end;
end;
end;
E no botão gravar tenho......
procedure TformPedidos.btnGravarClick(Sender: TObject);
var
strCliente:string;
Formulario: tformRecebimentos;
begGO_DESCRICAO.AsInteger;
strMl:=(trim(fldTotalMl.Caption));
strM2:=(trim(fldTotalM2.Caption));
strModelo:=(Trim(fldModelos.Text));
strQtde:=(trim(fldQtde.Text));
dm.sdsControle.Edit;
dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger:=
dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger +1;
dm.sdsControle.Post;
dm.sdsControle.ApplyUpdates(-1);
intRegistro:=dm.sdsControleREGISTRO_ITEM_PEDIDO.AsInteger;
dm.sdsItensPedido.Append;
dm.sdsItensPedidoRegistro.asInteger:=intRegistro;
dm.sdsItensPedidoCOMODOS.AsString:=strComodos;
dm.sdsItensPedidoDIM1.AsString:=strDim1;
dm.sdsItensPedidoDIM2.AsString:=strDim2;
dm.sdsItensPedidoNOME_PROD.AsString:=strProdutos;
dm.sdsItensPedidoCOD_PROD.AsInteger:=strCodProd;
dm.sdsItensPedidoML.AsString:=strMl;
dm.sdsItensPedidoM2.AsString:=strM2;
dm.sdsItensPedidoMODELO.AsString:=strModelo;
dm.sdsItensPedidoQTDE.AsString:=strQtde;
LimpaProdutos;
end;
end;
end;
end;
E no botão gravar tenho......
procedure TformPedidos.btnGravarClick(Sender: TObject);
var
strCliente:string;
Formulario: tformRecebimentos;
begin
inherited;
strCliente:=dbLookupClientes.Text;
dm.sdsPedidosNOME_CLIENTE.AsString:=strCliente;
dm.sdsPedidos.Post;
dm.sdsPedidos.ApplyUpdates(-1);
dm.sdsItensPedido.Edit;
dm.sdsItensPedidoNUMERO_PEDIDO.AsInteger:=dm.sdsPedidosNUMERO_PEDIDO.AsInteger;
dm.sdsItensPedido.Post;
dm.sdsItensPedido.ApplyUpdates(-1);
grpItensPedido.Enabled:=false;
dbLookupClientes.Enabled:=false;
dbLookupArquitetos.Enabled:=false;
dbLookupVendedor.Enabled:=false;
Vamos supor que: Antes de gravar ele teria que abrir o form que chamo de recebimento( onde seria digitado o preço e ......). E para o evento ondblClick do grid do meu form de pedido tenho o seguinte codigo....
procedure TformPedidos.dbGridItensDblClick(Sender: TObject);
begin
inherited;
btnEditar.Click;
btnIncluir.Enabled:=false;
fldComodos.Caption:=´´;
fldComodos.Caption:=dm.sdsItenspedidoComodos.asString;
fldDim1.Text:=dm.sdsItensPedidoDIM1.AsString;
fldDim2.Text:=dm.sdsItensPedidoDIM2.AsString;
fldProduto.Caption:=dm.sdsItensPedidoNOME_PROD.AsString;
fldModelos.KeyValue:=dm.sdsItensPedidoMODELO.AsString;
fldTotalMl.Caption:=dm.sdsItensPedidoML.AsString;
fldTotalM2.Captin
inherited;
strCliente:=dbLookupClientes.Text;
dm.sdsPedidosNOME_CLIENTE.AsString:=strCliente;
dm.sdsPedidos.Post;
dm.sdsPedidos.ApplyUpdates(-1);
dm.sdsItensPedido.Edit;
dm.sdsItensPedidoNUMERO_PEDIDO.AsInteger:=dm.sdsPedidosNUMERO_PEDIDO.AsInteger;
dm.sdsItensPedido.Post;
dm.sdsItensPedido.ApplyUpdates(-1);
grpItensPedido.Enabled:=false;
dbLookupClientes.Enabled:=false;
dbLookupArquitetos.Enabled:=false;
dbLookupVendedor.Enabled:=false;
Vamos supor que: Antes de gravar ele teria que abrir o form que chamo de recebimento( onde seria digitado o preço e ......). E para o evento ondblClick do grid do meu form de pedido tenho o seguinte codigo....
procedure TformPedidos.dbGridItensDblClick(Sender: TObject);
begin
inherited;
btnEditar.Click;
btnIncluir.Enabled:=false;
fldComodos.Caption:=´´;
fldComodos.Caption:=dm.sdsItenspedidoComodos.asString;
fldDim1.Text:=dm.sdsItensPedidoDIM1.AsString;
fldDim2.Text:=dm.sdsItensPedidoDIM2.AsString;
fldProduto.Caption:=dm.sdsItensPedidoNOME_PROD.AsString;
fldModelos.KeyValue:=dm.sdsItensPedidoMODELO.AsString;
fldTotalMl.Caption:=dm.sdsItensPedidoML.AsString;
fldTotalM2.Caption:=dm.sdsItensPedidoM2.AsString;
fldQtde.Text:=dm.sdsItensPedidoQTDE.AsString;
end;
Este evento me traz os codigos devolta nos edits para serem editados, achei que isto me resolve. O princípio usado é de continuar a usar o simpledataset e o data sorce.Obrigado Vitor5
Vitor5
22/10/2006
Registro.....Integer...NotNull......chavePrimaria
NumeroPedido......Integer....NOtNull
Comodos......VarChar.......
Dim1............VarChar....
Dim2............VarChar.....
Ml.................VarChar.....
M2................VarChar...
Cod_Prod......VarChar....
Nome_Prod...VarChar....
Qtde.............VarChar....(Usei como varchar por usar 10,20....)
Preco............VarChar...
E minha tabela de Pedidos tenho.......
Numero_Pedido....Integer.....NotNull ....chavePrimaria
Data_Pedido........Date
Código_Cliente....integer
Código_Vendedor....Integer
Nome_Cliente.........VarChar
Vendedor...............VarChar
Nome_Usuario........VarChar
ValorTotal..............Decimal
Forma_Pagamento ...VarChar
Desc.........................VarChar
Acrescimo.................VarChar
Valor_Mão_Obra........VarChar
:oops: E aí o que fazer????Sei que há diversas formas de programar, cada um pensa de um jeito, mas dei uma enroscada ´Bonita´ neste form hein.........
Marco Salles
22/10/2006
Com fazer um agrupamento com ClientDatase e posteriormente com SimpleDataSet , Com carrregar no StringGrid com ClientDataSet e posteriormente com SimploDataSet , Como Faer um Updata Com clienteDaTaSet e posteriormente com SimpleDataSet...enfim...
Porém quanto a sua afriamção:
[b:96525d6665]Se voce quiser usar o SimpleDataSet , e escolher um connection.ConnectionName , cada SimpleDataSet Terá sua conexão interna. Voce pode ter uma única aplicação consumindo dezenas de conexões com o servidor SQl , que alem do numero de licenças entre outros , será um grande problema[/b:96525d6665]
Então amigo , o aconselhável é usar no DataModulo um SqlConnection e ligar os SimpleDataSet nele
Boa sorte
Vitor5
22/10/2006
Marco Salles
22/10/2006
é simples...
Quando eu disse DataModulo é na verdade uma especie de um formulário , aonde a gente tem por praxi colocar todos os componentes de conexão ... Para ficar mais agrupado e organizado , facilitando assim a manutenção de nossos aplicativos.. Procure no seu Delphi sobre DataModulo e o adicione ao seu Projeto. Com eu disse anteriormente é como se fosse um formulário
Nesse DataModulo , voce coloca todos os seus TsimpleDataSet e na propriedade SqlConnection do seus SimpleDataSet voce aponte para o componente SqlConnection... Voce deve configurar apenas o SqlConnetion para que este se comuninque com o Banco.. .
Não acho que voce deva interroper este tópico , a não ser que julgue necessário... O que eu lhe disse no meu ultimo post é que voce deveria tentar entender o que lhe passei , mesmo que o banco seje diferentes , mesmo que não seje exatamente o que voce precise de imediato... Mas voce teria a partir disso , algo que lhe daria suporte para que voce estende-sse no proximo passo para a sua real necessidade...
Esperaria que voce fisseze o seguinte:
´Olha Marcos fiz como voce falou , criei o seu banco , inseri os componentes , configure etc.. mas esta dando este erro etc..´
Isto seria mais fácil a nossa comunicação , pois estariamos falando uma mesma linguagem;;
Mas não desita e aproveite o feriado
Boa sorte
Vitor5
22/10/2006
Citação:
procedure TForm2.FormShow(Sender: TObject);
var
i:integer;
begin
Sgd.Cells[0,0]:=´Codigo_Moldura´;
Sgd.Cells[1,0]:=´Descrição_Moldura´;
Sgd.Cells[2,0]:=´Quantidade´;
Sgd.Cells[3,0]:=´Valor_Unitario´;
sgd.RowCount:=Form1.cdsG.RecordCount+1;
i:=1;
form1.cdsG.First;
While not Form1.cdsG.Eof do
begin
Sgd.Cells[0,i]:=form1.cdsG.fieldByName(´Cod Produto´).AsString;
Sgd.Cells[1,i]:=form1.cdsG.fieldByName(´Descr Produto´).AsString;
Sgd.Cells[2,i]:=form1.cdsG.fieldByName(´Total´).AsString;
form1.cdsG.Next;
i:=i+1;
end;
[b:557db7d294]end;[¬ Moldura Where Id =:pId ´+ [/b:557db7d294]
´Group By Cod Produto,Descr Produto´;
cdsg.Params.ParamByName(´pId´).AsInteger:=cds.fieldbyName(´ID´).AsInteger;
cdsg.Execute;
cdsg.Open;
[b:557db7d294]form2.ShowModal; [/b:557db7d294]Neste caso aqui estou usando :
[b:557db7d294] begin
if (Application.FindComponent(´formRecebimentos´)=nil) then
begin
Formulario:=tformRecebimentos.Create(Application);[/b:557db7d294]
Para abrir o formulario. Estou partindo de fazer o teste usando sqlquery, datasetprovider, clientedataset.....Obrigado
Marco Salles
22/10/2006
Tem sim... É que voce deve estar tentando acessar a propriedade Nem
ConnectionName do SimpleDataSet
No objeto Inspector , na Propreidade Connection do SimpleDataSet , aonde vem geralmete inscrito :
[b:bbe14f6263]
Não entendi qual o erro ???
[b:bbe14f6263]Para abrir o formulario. Estou partindo de fazer o teste usando sqlquery, datasetprovider, clientedataset.....Obrigado[/b:bbe14f6263]
partindo :?: :?: ???Não consegui entender o que voce escreveu ??
Vitor5
22/10/2006
procedure TformRecebimentos.FormShow(Sender: TObject);
var
i:integer;
begin
inherited;
sgd.Cells[0,0]:=´Cod_Prod´;
sgd.Cells[1,0]:=´Nome_Prod´;
sgd.Cells[2,0]:=´Qtde´;
sgd.Cells[3,0]:=´Preco´;
sgd.RowCount:=dm.sdsG.RecordCount +1;
i:=1;
dm.sdsG.First;
while not dm.sdsG.Eof do
begin
sgd.Cells[0,i]:=dm.sdsG.fieldByName(´Cód_Prod´).AsString;
sgd.Cells[1,i]:=dm.sdsG.fieldByName(´Nome_Prod´).AsString;
sgd.Cells[3,i]:=Update Itens set Preco =pNovoValor
Where Cod_Prod =pCodigo;
i:=i +1;
O erro que está dando é imcompatible type string and procedure..Sabe me dizer por que, este código copie de seu exemplo usando o simpledataset que está neste forum
Vitor5
22/10/2006
sgd.Cells[3,i]:=Update Itens set Preco =pNovoValor
Where Cod_Prod =pCodigo;[b:c7b1953a01]. Já tentei de várias formas[/b:c7b1953a01]
Marco Salles
22/10/2006
Acontece que no dia que eu postei este tópico o site estava meio doido.. Duplicando várias partes e comendo outra.. No formShow Voce so Carrega o StringGrid
Não tem nesse evento nenhum Update... O update e a proxima eatapa , depois que voce digitar no StringGrid.. [b:6750adf62f]Tente carregar ai[/b:6750adf62f]
Vitor5
22/10/2006
Criei o meu form de Pedidos e Itens Pedido. No form Itens Pedido tenho um botão Incluir os itens. Coloquei um botão para abrir o segundo form onde chamei de formRecebimentos.
Só que quando abro o formRecebimentos ele abre legal e carrega aquilo que nós estávamos estudando(stringGrid), só que os dados da tabela itens desaparecem, mas deve ser alguma coisa fácil de resolver.
Agora quanto ao código para devolver ao formItens, como ficará, sabendo que no site teve aquele erros de duplicação?????Obrigado
Marco Salles
22/10/2006
:
Citação:
[b:390f63703f][color=darkred:390f63703f]*******ATENÇÃO :::: Digamos que este seja o seu DataSet Principal ***
Aonde estão os Dados da Tabela Items[/color:390f63703f][/b:390f63703f]
Citação:
No Segundo SimpleDataSet escreva na propriedade ComandText
No terceiro SimpleDataSet escreva na propriedade ComandText
Então .. O que voce estamos tentando fazer:::
Quanto ao Codigo ele esta bem descriminado no t¬
DataType -->>>String
Name -->>> PId
No terceiro SimpleDataSet escreva na propriedade ComandText
Então .. O que voce estamos tentando fazer:::
Quanto ao Codigo ele esta bem descriminado no tópicos anteriores.. O mais importante é voce entender o raciocineo que lhe passei...
Se mesmo assim voce não conseguir acha-lo , eu posto novamente
[b:390f63703f]Voce esta quase conseguindo...[/b:390f63703f]
Vitor5
22/10/2006
Marcos, o que vc me ensinou está perfeito. Na verdade quando disse para usar o form2.ShowModal, ele dava um erro. Como estou usando formulários do tipo filho(MDIChild) o erro pode ser de meu código, na verdade não auterei em nada meu codigo, somente acrescentei sobre o que me disse.
Quando dou um click no botão para abrir o form2 (eles desaparecem do form Principal), mas carrega os dados (agrupa os itens no segundo form normal). Deve ser algum erro de meu código. Depois de agrupado como trazer e atualizar a tabela????
Vitor5
22/10/2006
procedure TformPedidos.BitBtn1Click(Sender: TObject);
var
Formulario: tformRecebimentos;
begin
inherited;
dm.sdsG.Close;
dm.sdsG.Params[0].AsInteger :=dm.sdsItensPedido.fieldByName(´Numero_Pedido´).AsInteger;
dm.sdsG.Open;
[color=red:b1ae63d540]begin
if (Application.FindComponent(´formRecebimentos´)=nil) then
begin
Formulario:=tformRecebimentos.Create(Application);[/color:b1ae63d540]
Como vc faz para no forum ficar tudo organizado nas citações????Acho Legal o jeito que você faz
Marco Salles
22/10/2006
[color=darkred:c0f588053b][b:c0f588053b]Importante e curioso[/b:c0f588053b][/color:c0f588053b]Se voce estiver
Para chamar o Form faça assim:Coloque ele com FormStyl:=fsNormal e faça ssim:
[color=darkred:c0f588053b][b:c0f588053b]para salver os valores :[/b:c0f588053b][/color:c0f588053b]
Acima da caixa de mensagem <Aonde Voce escreve> Tem ums Botoes
B / U quote Code etc... Marque o texto que voce quer e click nun desse botões
A outra dúvida :::
O que desaparece ???? Os dados ????
Vitor5
22/10/2006
Marco Salles
22/10/2006
Não.. Faça um teste antee e comunique...
Execute o Agrupamento , mas não chame o formulário
e veja se os dados aida continuam lá
Vitor5
22/10/2006
Marco Salles
22/10/2006
agrupe e chame o form .. Mas não carregue o StringGri
Vitor5
22/10/2006
You have received the following message:
Project xxxx raised exception class yyyyy with message ´zzzzzz´.
Process stopped. Use Step or Run to continue.
Mas sou Brasileiro e não devo desistir nunca, sei que vai dar certo
Marco Salles
22/10/2006
Coloque o codigo que voce esta usando <com a sua terminologia> aonde voce faz o Update....
Mas lembre-se de que criamos ou pelo menos voce deveria ter criado parametros no SimpleDataSet.. Alem do mais , esses paramentros devem ter o tipo de dados definidos corretamente <Ver a mensagem aonde foi postado isso>
Lembre-se por fim que no Objeto Inspctor Do TsimpleDataSet tem ´Duas´
propriedade Params a que me refiro é aquela que fica abaixo do PacketRecorts
Também no formulário principal ,< depois de conferido esses parametros bem como o seu tipo >, antes de voce ir para o novo formulário , faça um teste simples com seu Update..
Escreva por exemplo em Um Botão:
procedure TForm2.Button1Click(Sender: TObject);
Boa sorte...
Vitor5
22/10/2006
Quanto ao parametro está na propriedade params abaixo da PacketRecords como me falou, o tipo de parametro aqui colocado foi o ´ftString´. Está correto?
Quanto a erro que vem dando que seria este erro????
Deixo explicar melhor como está meu form, para ver se pode haver algum erro aqui.
O formPrincipal que é ´Pedidos´, ele está abrindo suas tabelas no onSHow, só que seus campos estão bloqueados(não podem ser editados ou acrescentado desde que seja apertado o botão adicionar, editar etc....
Quando dou botão adicionar ele permite que seja editado as tabelas. Neste form tenho a seção itensPedido, que tem um dbGrid ligado a tabela itens e a tabela pedidos.
Tenho um envento no ondlbClick do dbGrid para me devolver aos Edits. Isto que mencionei poderia ter alguma coisa que pudesse estar atrapalhando este código?????
Não entendi muito bem como fazer este teste simples que acabou de me passar!Obrigado
Vitor5
22/10/2006
begin
inherited;
dm.sdsG.Close;
dm.sdsG.Params[0].AsInteger :=dm.sdsItensPedido.fieldByName(´Numero_Pedido´).AsInteger;
dm.sdsG.Open;
try
formRecebimentos:=tformRecebimentos.Create(nil);
formRecebimentos.ShowModal;
finally
FormRecebimentos.Release;
///////////////////////////////////////////
O código do form2 está assim:
procedure TformRecebimentos.FormShow(Sender: TObject);
var
i:integer;
begin
inherited;
dm.sdsG.Open;
sgd.Cells[0,0]:=´Cod_Prod´;
sgd.Cells[1,0]:=´Nome_Prod´;
sgd.Cells[2,0]:=´Qtde´;
sgd.Cells[3,0]:=´Preco´;
sgd.RowCount:=dm.sdsG.RecordCount +1;
i:=1;
dm.sdsG.First;
while not dm.sdsG.Eof do
begin
sgd.Cells[0,i]:=dm.sdsG.fieldByName(´Cod_Prod´).AsString;
sgd.Cells[1,i]:=dm.sdsG.fieldByName(´Nome_Prod´).AsString;
sgd.Cells[2,i]:=dm.sdsG.fieldByName(´Total´).AsString;
dm.sdsG.Next;
i:=i +1;
end;
end;
procedure TformRecebimentos.sgdClick(Sender: TObject);
begin
inherited;
begin
if sgd.Col = 3 Then
sgd.Options:=sgd.Options + [goEditing]
else
sgd.Options:=sgd.Options - [goEditing]
end;
end;
:roll:
procedure TformRecebimentos.Button1Click(Sender: TObject);
var
i:integer;
begin
inherited;
dm.sdsU.Close;
for i:=1 to sgd.RowCount -1 do
begin
dm.sdsU.Params[0].AsString:=sgd.Cells[3,i];
dm.sdsU.Params[1].AsString:=sgd.Cells[0,i];
dm.sdsU.Execute;
dm.sdsU.Close;
end;
dm.sdsItensPedido.DataSet.CommandText:=´´;
dm.sdsItensPedido.Close;
dm.sdsItensPedido.DataSet.CommandText:=´Select * From Itens´;
dm.sdsItensPedido.Open;
end;
Marco Salles
22/10/2006
O seu problema no momento se estou entendendo bem é na hora do Update
Então sugire que voce desse um update simples , no proprio form principal
então no form proncipal voce vai escrever num botão e reportar o resultado:
é so isso... Faça um Update e jeja se o valor que voce colocou foi inserido ou alterado no campo aonde voce informou sua condição
Apos isto report o resultado
Vitor5
22/10/2006
Vitor5
22/10/2006
[b:581b2091df]Apos isto report o resultado
Parece que quando rodo ele no form 2 ele aponta para:
dm.sdsU.Close;
Pode haver um erro com simpledatasetUpdate????Teria que usar o fieldsEditor do simpledataset?????
Marco Salles
22/10/2006
Porém voce disse isto :
Não entendi nada da sua mensagem.. Por favor seje mais objetivo
Vitor5
22/10/2006
Marco Salles
22/10/2006
O que que nos temos..
Um TSimpleDataSet Ligado a Base de dados com um comando Text Definido desta maneira :
nesse Sql temos dois paramentros....
O parametro pNovoValor é o valor que iremos atribuir ao campo Valor do(s) Registro(s) cujo o(s) Codigo(s) seje(am) igual ao codigo Informado
que no caso foi o Pcodigo
Assim se na basse de dados tivermos um Registro que tem o Codigo de moldura igual a ´0001´ e se definirmos como PNovovalor = 100 , quando fizermos o Updade nesta Base de Dados , vamos esperar que todas as molduras cujo código seja miguias a ´0001´ , tenham o valor do seu CampoPreco_unitario , alterado para 100..
e para excecutar este comando fazemos:
Exceute o codigo acima no formulário ante de carregar a StringGrid .. é so isso
Vitor5
22/10/2006
O meu simpledatasetUpdate tem este código:
Update Itens set Preco =: pNovoValor
Where Cod_Prod =:PCodigo(tinha um datasource ligado a ele, mas tirei).
No formPrincipal tenho um botão que chama o form2(Recebimentos) assim:
procedure TformPedidos.btnPrecoClick(Sender: TObject);
begin
inherited;
dm.sdsG.Close;
dm.sdsG.Params[0].AsInteger :=dm.sdsItensPedido.fieldByName(´Numero_Pedido´).AsInteger;
dm.sdsG.Open;
try
formRecebimentos:=tformRecebimentos.Create(nil);
formRecebimentos.ShowModal;
finally
FormRecebimentos.Release;
end;
end;
No onshow do form2(Recebimentos) está assim:
procedure TformRecebimentos.FormShow(Sender: TObject);
var
i:integer;
begin
inherited;
dm.sdsG.Open;
sgd.Cells[0,0]:=´Cod_Prod´;
sgd.Cells[1,0]:=´Nome_Prod´;
sgd.Cells[2,0]:=´Qtde´;
sgd.Cells[3,0]:=´Preco´;
sgd.RowCount:=dm.sdsG.RecordCount +1;
i:=1;
dm.sdsG.First;
while not dm.sdsG.Eof do
begin
sgd.Cells[0,i]:=dm.sdsG.fieldByName(´Cod_Prod´).AsString;
sgd.Cells[1,i]:=dm.sdsG.fieldByName(´Nome_Prod´).AsString;
sgd.Cells[2,i]:=dm.sdsG.fieldByName(´Total´).AsString;
dm.sdsG.Next;
i:=i +1;
end;
end;
E no form2(recebimentos) tenho um botão para voltar que está assim:
procedure TformRecebimentos.Button1Click(Sender: TObject);
var
i:integer;
begin
inherited;
dm.sdsU.Close;
for i:=1 to sgd.RowCount -1 do
begin
dm.sdsU.Params[0].AsString:=sgd.Cells[3,i];
dm.sdsU.Params[1].AsString:=sgd.Cells[0,i];
dm.sdsU.Execute;
dm.sdsU.Close;
end;
dm.sdsItensPedido.DataSet.CommandText:=´´;
dm.sdsItensPedido.Close;
dm.sdsItensPedido.DataSet.CommandText:=´Select * From Itens´;
dm.sdsItensPedido.Open;
Tô meio confuso, mas depois que este código rodar, gostaria de uma super aula sua para entender perfeitamente o funcionamento deste código, mas isto podemos deixar um pouquinho mais adiante. Será que dá pra dar uma olhadinha no código que enviei?0A i:=1;
dm.sdsG.First;
while not dm.sdsG.Eof do
begin
sgd.Cells[0,i]:=dm.sdsG.fieldByName(´Cod_Prod´).AsString;
sgd.Cells[1,i]:=dm.sdsG.fieldByName(´Nome_Prod´).AsString;
sgd.Cells[2,i]:=dm.sdsG.fieldByName(´Total´).AsString;
dm.sdsG.Next;
i:=i +1;
end;
end;
E no form2(recebimentos) tenho um botão para voltar que está assim:
procedure TformRecebimentos.Button1Click(Sender: TObject);
var
i:integer;
begin
inherited;
dm.sdsU.Close;
for i:=1 to sgd.RowCount -1 do
begin
dm.sdsU.Params[0].AsString:=sgd.Cells[3,i];
dm.sdsU.Params[1].AsString:=sgd.Cells[0,i];
dm.sdsU.Execute;
dm.sdsU.Close;
end;
dm.sdsItensPedido.DataSet.CommandText:=´´;
dm.sdsItensPedido.Close;
dm.sdsItensPedido.DataSet.CommandText:=´Select * From Itens´;
dm.sdsItensPedido.Open;
Tô meio confuso, mas depois que este código rodar, gostaria de uma super aula sua para entender perfeitamente o funcionamento deste código, mas isto podemos deixar um pouquinho mais adiante. Será que dá pra dar uma olhadinha no código que enviei??????Muito Obrigado por sua ajuda
Vitor5
22/10/2006
Vitor5
22/10/2006
Vitor5
22/10/2006
Marco Salles
22/10/2006
Esqueça o seu projeto .
Abra um novo projeto e coloque nele
um sqlconection
um simpledataset
um datasource
um grid
escolha uma tabela e um banco de daods qualquer..
Na propriedade cpmandText do SimpleDataSet escreva
Faça as ligaçoes e rode o programa... Beleza. VAmos para a parte dois)
Parte Dois) Update
Coloque um outro SimpleDataSet e ligue-o ao SqlConection
Na sua propriedade Params escreva
Amigo em um Botão escreva
[color=darkred:59bfe434ae][b:59bfe434ae]click no botaão .. feche e abra novamente sua aplicação[/b:59bfe434ae][/color:59bfe434ae] e veja se o campo anterior cujo Id voce definiu no edit2.tex , não esta agora valendo o valor definido por voce no edit1.text
Não é possivel de dar erro... Faço isso toda hora e quantas vezes for preciso.. Capriche ai e leia com atenção e boa sorte
Vitor5
22/10/2006
Abri um novo projeto, colquei um sqlConnection, um simpledataset, um datasource, um dbgrid, um segundo simpledataset(onde dei o nome de spd, como no seu exemplo) e escrevi o código que disse:
update Cargos set Nome_Cargo =:pNome
Where Nome_Cargo =:PId
Não sei se entendi bem mas coloquei dois Edits e um botão no form:
No onshow do form coloquei simpledataset1.open;
E no botão do form coloquei o código assim:
////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
begin
spd.Close;
spd.Params[0].asString:=Edit1.text;
spd.Params[1].asInteger:=strToInt(edit2.text);
spd.Execute;
end;
Não sei sé é isto que me passou ???
Sendo que usei uma tabela que tenho(Cargos) onde:
Codigo_Cargo é integer e uma chave primaria
Descricao_Cargo que está como varchar(Usei esta tabela para tentar fazer o teste)
Tento digitar algo e clicar no botão ele dá o erro ´ No Mapping for error Code Found´. Obrigado
Marco Salles
22/10/2006
se este foi o codigo que voce escreveu no comandText do SimpleDataSet Dps , não esta correto... Pois voce esta alterando o Campo Nome_Cargo e usando como uma clausula o Próprio Campo <Campo_Cargo>
Não faz sentido...
[b:33ee56d199]Use um outro campo na clausu-la where [/b:33ee56d199]e conforme foi postado o codigo , este campo neste exemplo (usando strttoint(edit2.text)) , tem que ser [b:33ee56d199]integer..[/b:33ee56d199]
Atenção.... Não esqueça de criar os parametros no spd
Boa sorte...
Vitor5
22/10/2006
ClientDataSet1.First; while ClientDataSet1.Eof = false do begin if ClientDataSet1CODIGO.value = Edit1CODIGO.text then begin ClientDataSet1.Edit; ClientDataSet1VALOR.value = strtoint(Edit1VALOR.text); ClientDataSet1.Post; end; ClientDataSet1.Next; end; Amigo depois de muitas horas de teste, muitos neuronios queimados, muitas informações ao mesmo tempo, resolvi testar seu código várias vezes e realmente funcionou.... Obrigadão a você e ao Marco Sales, pela paciência que tiveram comigo. O código do Marcos Sales é excelente, mas no meu caso o seu código pra mim funcionou melhor..Por isso estou colocando um[b] FIM[/b]