Fórum Inclusão DBGrid #395941
18/02/2011
0
Estou na luta referente ao aprendizado da utilização do DBGrid.
Vamos lá.
Essa deve ser simples, mas não tanto para um aprendiz feito eu.
Componentes:
DBEdit [NOTA]
Button [Incluir]
DBGrid [NOTAS]
Button [Gravar] //Esse pode ser no DBNavigator
2 Tabelas cdsOrigem e cdsDestino
1) Ao informar o número no DBEdit e clicar em Incluir, vai incluir os dados (cdsOrigem) no DBGrid. Deve repetir essa operação acumulando os dados inseridos.
2) Ao clicar em gravar, todos os dados acumulados no DBGrid serão gravados no cdsDestino.
Agradeço antecipadamente a ajuda de todos.
Obrigado!
PS: Eu consegui montar até a inclusão. A partir de fazer a inclusão acumulando e gravar eu já não sei, pois ao incluir um outro ele limpa o DBGrid. :(
Elton Ésqui
Curtir tópico
+ 0Posts
18/02/2011
Rogerio
cdsDestino.fieldByName(seuCampo1).value := cdsOrigem.fieldByName(seuCampo1).value;
cdsDestino.fieldByName(seuCampo1).AsString := cdsOrigem.fieldByName(seuCampo1).AsString;
cdsDestino.fieldByName(seuCampo1).AsInteger := cdsOrigem.fieldByName(seuCampo1).AsInteger;
cdsDestino.fieldByName(seuCampo1).AsDate := cdsOrigem.fieldByName(seuCampo1).AsDate;
cdsDestino.fieldByName(seuCampo1).AsCurrency := cdsOrigem.fieldByName(seuCampo1).AsCurrency;
.....
.....
cdsDestino.Post; Quando você disse em acumular o valor, você esta se referindo tipo um autoincremento?
Gostei + 0
18/02/2011
Elton Ésqui
A princípio, a gravação está ok, mas grava só a primeira linha do DBGrid.
Acumular os seria assim (no DBGrid):
A cada vez que digitar o valor e clicar em incluir ele adicona uma nova linha no DBGrid com os novos dados, mantendo o que já foi incluído.
Obrigado!
Gostei + 0
18/02/2011
Rogerio
Gostei + 0
18/02/2011
Rogerio
Obrigado!
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Insert;
ClientDataSet1.FieldByName('codigo').AsInteger := StrToInt(Edit1.Text);
ClientDataSet1.FieldByName('nome').AsString := Edit2.Text;
ClientDataSet1.Post;
end;Gostei + 0
18/02/2011
Diego Cavalca
cdsGRID.First; //Aqui percorre Linha por Linha do registro (entenda linha do grid), //Como setamos o primeiro registro, ele percorre do inicio ao fim do cds carregado while no cdsGRID.eof do begin cdsTABELA.Append; cdsTABELACAMPO_ALFA.value := cdsGRIDCAMPO_ALFA.value; cdsTABELACAMPO_BETA.value := cdsGRIDCAMPO_BETA.value; cdsTABELA.Post; cdsGRID.Next; end;
A lógica é mais ou menos essa, tente aplicar, use break-point se continuar gravando só a primeira linha...
Gostei + 0
18/02/2011
Elton Ésqui
Fiz assim:
procedure TForm1.btnGravarClick(Sender: TObject);
begin
while not DMForm.cdsNotas.Eof do
begin
DMForm.cdsColeta.Open;
DMForm.cdsColeta.Insert;
DMForm.cdsColeta.Edit;
DMForm.cdsColeta.FieldByName('ORDEM_COLETA').Value := ORDEM_COLETA.Text;
DMForm.cdsColeta.FieldByName('NOTA').Value := dbgNotas.Fields[0].Value;
DMForm.cdsColeta.FieldByName('CLIENTE').Value := dbgNotas.Fields[1].Value;
DMForm.cdsColeta.FieldByName('PEDIDO').Value := dbgNotas.Fields[2].Value;
DMForm.cdsColeta.FieldByName('TIPO_SITU').Value := dbgNotas.Fields[3].Value;
DMForm.cdsColeta.FieldByName('CLASS_NOTA').Value := dbgNotas.Fields[4].Value;
DMForm.cdsColeta.FieldByName('CAIXA').Value := dbgNotas.Fields[5].Value;
DMForm.cdsColeta.FieldByName('DATA_EMI').Value := dbgNotas.Fields[7].Value;
DMForm.cdsColeta.FieldByName('NOTSERIE').Value := dbgNotas.Fields[8].Value;
DMForm.cdsColeta.FieldByName('EMPRESA').Value := DMForm.sqlEmp.FieldByName('CODIGO').Value;
DMForm.cdsColeta.Post;
DMForm.cdsNotas.Next;
end;
end;
Não acontece nada. Dei um breakpoint e ele passa três vezes no while, a mesma quantidade de linhas no DBGrid, mas nao gravou nada.
Gostei + 0
18/02/2011
Elton Ésqui
cdsGRID.First; //Aqui percorre Linha por Linha do registro (entenda linha do grid), //Como setamos o primeiro registro, ele percorre do inicio ao fim do cds carregado while no cdsGRID.eof do begin cdsTABELA.Append; cdsTABELACAMPO_ALFA.value := cdsGRIDCAMPO_ALFA.value; cdsTABELACAMPO_BETA.value := cdsGRIDCAMPO_BETA.value; cdsTABELA.Post; cdsGRID.Next; end;
A lógica é mais ou menos essa, tente aplicar, use break-point se continuar gravando só a primeira linha...
D. Cavalca
Fiz assim:
[code]
procedure TForm1.btnGravarClick(Sender: TObject);
begin
DMForm.cdsNotas.First;
while not DMForm.cdsNotas.Eof do
begin
DMForm.cdsColeta.Open;
DMForm.cdsColeta.Append;
DMForm.cdsColeta.FieldByName('ORDEM_COLETA').Value := ORDEM_COLETA.Text;
DMForm.cdsColeta.FieldByName('NOTA').Value := dbgNotas.Fields[0].Value;
DMForm.cdsColeta.FieldByName('CLIENTE').Value := dbgNotas.Fields[1].Value;
DMForm.cdsColeta.FieldByName('PEDIDO').Value := dbgNotas.Fields[2].Value;
DMForm.cdsColeta.FieldByName('TIPO_SITU').Value := dbgNotas.Fields[3].Value;
DMForm.cdsColeta.FieldByName('CLASS_NOTA').Value := dbgNotas.Fields[4].Value;
DMForm.cdsColeta.FieldByName('CAIXA').Value := dbgNotas.Fields[5].Value;
DMForm.cdsColeta.FieldByName('DATA_EMI').Value := dbgNotas.Fields[7].Value;
DMForm.cdsColeta.FieldByName('NOTSERIE').Value := dbgNotas.Fields[8].Value;
DMForm.cdsColeta.FieldByName('EMPRESA').Value := DMForm.sqlEmp.FieldByName('CODIGO').Value;
DMForm.cdsColeta.Post;
DMForm.cdsNotas.Next;
end;
end;
[code]
Só coloquei o Open que não havia, pois tinha dado um erro.
Ele continua não gravando. Percorre três vezes (a qtde de linhas preenchidas no DBGrid), mas não grava e nem da erro.
Gostei + 0
18/02/2011
Diego Cavalca
Gostei + 0
18/02/2011
Elton Ésqui
TSQLConnection
Gostei + 0
18/02/2011
Diego Cavalca
Foi mal, rsrs, perguntei errado,
costume ruim de programação aki da empresa, vou reformular minha pergunta, qual componente usa para conexão com as TABELAS do banco de dados? uma IBQuery?
Gostei + 0
18/02/2011
Elton Ésqui
Foi mal, rsrs, perguntei errado,
costume ruim de programação aki da empresa, vou reformular minha pergunta, qual componente usa para conexão com as TABELAS do banco de dados? uma IBQuery?
São eles:
TClientDataSet
TDataSetProvider
TSqlDataSet
Gostei + 0
18/02/2011
Marco Salles
Acumular o que de que ( Acumular o Valor das Notas ou a quantidade de Notas ???? ou acumular um Outro campo ??? Somar ?? Contar ???
2) Ao clicar em gravar, todos os dados acumulados no DBGrid serão gravados no cdsDestino. No DbGrid não tem nada acumulado , ele apenas representa de forma visual os dados que são provenientes de algum DataSet Porém para vc passar os Dados do CdOrigem para Outro CdDestino Isto é um exemplo caso classico do CloneCds (lembra CloneCds para os Intimos...), onde vc vai clonar os dados do CdsOrigem Filtrado para o cdsDestino O unico cuidado aqui é os paramentros que devem ser usados noCloneCursor Sem o Intuito de fazer mershandising ontem postei algo a respeito http://marcosalles.wordpress.com/2011/02/17/clonecursor-como-definir-os-parametros-reset-keepsettings/ Ressalto aqui , se é que entendi a sua dúvida . Porque a outra que vc tinha postado anteirormente estou sem entender ate agora ...
Gostei + 0
21/02/2011
Elton Ésqui
Acumular o que de que ( Acumular o Valor das Notas ou a quantidade de Notas ???? ou acumular um Outro campo ??? Somar ?? Contar ???
2) Ao clicar em gravar, todos os dados acumulados no DBGrid serão gravados no cdsDestino. No DbGrid não tem nada acumulado , ele apenas representa de forma visual os dados que são provenientes de algum DataSet Porém para vc passar os Dados do CdOrigem para Outro CdDestino Isto é um exemplo caso classico do CloneCds (lembra CloneCds para os Intimos...), onde vc vai clonar os dados do CdsOrigem Filtrado para o cdsDestino O unico cuidado aqui é os paramentros que devem ser usados noCloneCursor Sem o Intuito de fazer mershandising ontem postei algo a respeito http://marcosalles.wordpress.com/2011/02/17/clonecursor-como-definir-os-parametros-reset-keepsettings/ Ressalto aqui , se é que entendi a sua dúvida . Porque a outra que vc tinha postado anteirormente estou sem entender ate agora ...
A princípio deveria acumular a quantidade de notas.
Ex.: Nota 01, 05, 10, 18, 22 e etc.
Percebi que terei um problema se fizer assim, pois se eu digitar nota 100, por exemplo, ele traz resultados antigos e /ou duplicados, ou seja, notas que foram emitidas com o mesmo número. A não ser que eu fizesse um método para excluir as"indesejadas", mas para o usuário isso seria trabalhoso demais.
A saída foi passar o parâmetro por data, mas desta forma, terei que voltar ao problema do outro tópico :(, ou seja, carregar no DBGrid as notas de dd/mm/yyyy até dd/mm/yyyy e com o MultSelect ativo, selecionar as notas desejadas e grava-las na tabela destino. Still frynig.... :'(
Gostei + 0
21/02/2011
Elton Ésqui
Acumular o que de que ( Acumular o Valor das Notas ou a quantidade de Notas ???? ou acumular um Outro campo ??? Somar ?? Contar ???
2) Ao clicar em gravar, todos os dados acumulados no DBGrid serão gravados no cdsDestino. No DbGrid não tem nada acumulado , ele apenas representa de forma visual os dados que são provenientes de algum DataSet Porém para vc passar os Dados do CdOrigem para Outro CdDestino Isto é um exemplo caso classico do CloneCds (lembra CloneCds para os Intimos...), onde vc vai clonar os dados do CdsOrigem Filtrado para o cdsDestino O unico cuidado aqui é os paramentros que devem ser usados noCloneCursor Sem o Intuito de fazer mershandising ontem postei algo a respeito http://marcosalles.wordpress.com/2011/02/17/clonecursor-como-definir-os-parametros-reset-keepsettings/ Ressalto aqui , se é que entendi a sua dúvida . Porque a outra que vc tinha postado anteirormente estou sem entender ate agora ...
A princípio deveria acumular a quantidade de notas.
Ex.: Nota 01, 05, 10, 18, 22 e etc.
Percebi que terei um problema se fizer assim, pois se eu digitar nota 100, por exemplo, ele traz resultados antigos e /ou duplicados, ou seja, notas que foram emitidas com o mesmo número. A não ser que eu fizesse um método para excluir as"indesejadas", mas para o usuário isso seria trabalhoso demais.
A saída foi passar o parâmetro por data, mas desta forma, terei que voltar ao problema do outro tópico :(, ou seja, carregar no DBGrid as notas de dd/mm/yyyy até dd/mm/yyyy e com o MultSelect ativo, selecionar as notas desejadas e grava-las na tabela destino. Still frying.... :'(
Gostei + 0
21/02/2011
Diego Cavalca
Enfim, qualquer coisa, boa sorte...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)