nsouza Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 Senhores,eu estou criando um form para importar os dados para uma tabela. para isso exibi os dados em um DBGrid onde o usuario irá selecionar e aoclicar no botão confirmar os dados serão inseridos na tabela.Gostaria de usar o DbGrid como se usa no excel. Ao clicar na linha ele selecionaa linha toda mas com a opção de se o usuário quiser selecionar varios registrosele pressiona a tecla shift e vai marcando qtos registros quiser e depois é so clicar nobotão confirmar e os dados serão importado.Tem jeito? Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 Nas options do DBGrid, coloque o dgMultiSelect para True, dai já da pra selecionar varios.... o resto eu num vo poder te ajudar... mals Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Daniel Sanches Postado Agosto 3, 2009 Denunciar Share Postado Agosto 3, 2009 para selecionar a linha toda, mude a em Options do DbGrid a opção dbRowSelect = True...abraços !!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 4, 2009 Autor Denunciar Share Postado Agosto 4, 2009 para selecionar a linha toda, mude a em Options do DbGrid a opção dbRowSelect = True...abraços !!!Obrigado!você conhece algum procedimento para importar os dados do DBGrid apos seleciona-los? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Daniel Sanches Postado Agosto 6, 2009 Denunciar Share Postado Agosto 6, 2009 Obrigado!você conhece algum procedimento para importar os dados do DBGrid apos seleciona-los?não entendi bem a pergunta, mas seria você conseguir ler os dados selecionados ??? se for isso, você utiliza os dados selecionadosna tabela que está linkada com o DbGrid ... tipo: Tabela1.FieldByName('CAMPO').AsString, assim, você acessa o campo CAMPO selecionado na DBGrid ...se não for bem isso, post aki especificando melhor a dúvida ...abraços !!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RafaelemeNt Postado Agosto 6, 2009 Denunciar Share Postado Agosto 6, 2009 Olá Daniel, Tenho uma dúvida parecida. Vou tentar explicar de maneira clara: Eu faço uma pesquisa e os resultados são exibidos no DBGrid. Já alterei todas as propriedades do DBGrid, por exemplo: "rowSelect := True", "editing := false", "readonly := true".Agora, gostaria que, quando o usuário selecionasse uma linha e clicasse em um botão, ocorresse uma alteração naquele registro. Exemplo:DBGrid exibindo o resultado da Consulta:| Codigo | Nome | Idade | Selecionado || 1 | Du |21 | False || 2 | Kadu |22 | False || 3 | Rafa |20 | False |Eu seleciono a Linha 3:| 3 | Rafa |20 | False |E clico no botão em meu form que fará uma ação, por exemplo mudar o valor do campo "Selecionado" para True. E o resultado seria:| 3 | Rafa |20 | True |A minha dúvida é: como fazer pra indicar a linha selecionada? Ou melhor, qual seria o comando SQL para o meu componente TDataSet fazer a alteração apenas na linha que o usuário selecionar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 7, 2009 Autor Denunciar Share Postado Agosto 7, 2009 Olá Daniel, Tenho uma dúvida parecida. Vou tentar explicar de maneira clara: Eu faço uma pesquisa e os resultados são exibidos no DBGrid. Já alterei todas as propriedades do DBGrid, por exemplo: "rowSelect := True", "editing := false", "readonly := true".Agora, gostaria que, quando o usuário selecionasse uma linha e clicasse em um botão, ocorresse uma alteração naquele registro. Exemplo:DBGrid exibindo o resultado da Consulta:| Codigo | Nome | Idade | Selecionado || 1 | Du |21 | False || 2 | Kadu |22 | False || 3 | Rafa |20 | False |Eu seleciono a Linha 3:| 3 | Rafa |20 | False |E clico no botão em meu form que fará uma ação, por exemplo mudar o valor do campo "Selecionado" para True. E o resultado seria:| 3 | Rafa |20 | True |A minha dúvida é: como fazer pra indicar a linha selecionada? Ou melhor, qual seria o comando SQL para o meu componente TDataSet fazer a alteração apenas na linha que o usuário selecionar?É por ai mesmo no meu caso seria:Nome | prifissão | salarioCarlos | Pedreiro | 600,00Jose | pintor | 500,00Maria | faxineira | 450,00Suponho que no dbgrid eu seleciono as linhas Jose e maria, depois eu clico no botão confirmar no formulárioe ele exporta os dados para uma tabela qualquer. Ou seja, no preciso saber o código de botão confirmar para realizar esta atividade uma vez que o dbgrid terá duas ou mais linha, tantas qtas forem necessario selecionar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thalles63 Postado Agosto 7, 2009 Denunciar Share Postado Agosto 7, 2009 (editado) É por ai mesmo no meu caso seria:Nome | prifissão | salarioCarlos | Pedreiro | 600,00Jose | pintor | 500,00Maria | faxineira | 450,00Suponho que no dbgrid eu seleciono as linhas Jose e maria, depois eu clico no botão confirmar no formulárioe ele exporta os dados para uma tabela qualquer. Ou seja, no preciso saber o código de botão confirmar para realizar esta atividade uma vez que o dbgrid terá duas ou mais linha, tantas qtas forem necessario selecionar.bom.. eu fiz algo dessse tipo aquiesses diasprocedure TForm.SpeedButton1Click(Sender: TObject); var idx :integer begin fdados.tabelareceptora.append; with DBGrid1.DataSource do if DBGrid1.SelectedRows.Count > 0 then for Idx :=0 to DBGrid1.SelectedRows.Count-1 do begin fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); fdados.tabelareceptora.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptora.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptora.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; Fdados.tabelareceptora.Append; end; Fdados.tabelareceptora.ApplyUpdates(0); end;não esqueça que a tabela que receberá os dados deve conter campos com a mesma estrutura da que esta enviando os dadose não esqueça de habilitar as opçoes no dgbrid : dgMultiSelect, dgRowSelectnão pude testar se esta funcionandomas o meu aqui trabalha de forma semelhante e funciona Editado Agosto 7, 2009 por Thalles63 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 9, 2009 Autor Denunciar Share Postado Agosto 9, 2009 (editado) É por ai mesmo no meu caso seria:Nome | prifissão | salarioCarlos | Pedreiro | 600,00Jose | pintor | 500,00Maria | faxineira | 450,00Suponho que no dbgrid eu seleciono as linhas Jose e maria, depois eu clico no botão confirmar no formulárioe ele exporta os dados para uma tabela qualquer. Ou seja, no preciso saber o código de botão confirmar para realizar esta atividade uma vez que o dbgrid terá duas ou mais linha, tantas qtas forem necessario selecionar.bom.. eu fiz algo dessse tipo aquiesses diasprocedure TForm.SpeedButton1Click(Sender: TObject); var idx :integer begin fdados.tabelareceptora.append; with DBGrid1.DataSource do if DBGrid1.SelectedRows.Count > 0 then for Idx :=0 to DBGrid1.SelectedRows.Count-1 do begin fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); fdados.tabelareceptora.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptora.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptora.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; Fdados.tabelareceptora.Append; end; Fdados.tabelareceptora.ApplyUpdates(0); end;não esqueça que a tabela que receberá os dados deve conter campos com a mesma estrutura da que esta enviando os dadose não esqueça de habilitar as opçoes no dgbrid : dgMultiSelect, dgRowSelectnão pude testar se esta funcionandomas o meu aqui trabalha de forma semelhante e funcionaMuito obrigado, era exatamente o que eu queria!Gostaria de saber se é possivel apos salvar os dados na tabela exibir uma mensagem de qtos registros foram arquivados ex.:showmassage: 'Foram arquivados (5) registros'. Editado Agosto 9, 2009 por nsouza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RafaelemeNt Postado Agosto 9, 2009 Denunciar Share Postado Agosto 9, 2009 Muito obrigado, era exatamente o que eu queria!Gostaria de saber se é possivel apos salvar os dados na tabela exibir uma mensagem de qtos registros foram arquivados ex.:showmassage: 'Foram arquivados (5) registros'.Acho que nisso eu posso ajudar. Que tal você colocar uma variável do tipo inteiro dentro da estrutura de loop, iniciando ela com 0 e incrementando +1 a cada loop. Depois, no showmessa você concatena a string da mensagem com o o número contido na variável. Nisso, você estará exibindo o número de registros transferidos.Testa aí e depois nos fale =]abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 10, 2009 Autor Denunciar Share Postado Agosto 10, 2009 Muito obrigado, era exatamente o que eu queria!Gostaria de saber se é possivel apos salvar os dados na tabela exibir uma mensagem de qtos registros foram arquivados ex.:showmassage: 'Foram arquivados (5) registros'.Acho que nisso eu posso ajudar. Que tal você colocar uma variável do tipo inteiro dentro da estrutura de loop, iniciando ela com 0 e incrementando +1 a cada loop. Depois, no showmessa você concatena a string da mensagem com o o número contido na variável. Nisso, você estará exibindo o número de registros transferidos.Testa aí e depois nos fale =]abraçosvocê poderia dar um exemplo de como fazer esse loop, sou iniciante no delphi. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thalles63 Postado Agosto 10, 2009 Denunciar Share Postado Agosto 10, 2009 (editado) você poderia dar um exemplo de como fazer esse loop, sou iniciante no delphi.procedure TForm.SpeedButton1Click(Sender: TObject); var idx, //contador :integer begin fdados.tabelareceptora.append; //contador := 0; with DBGrid1.DataSource do if DBGrid1.SelectedRows.Count > 0 then for Idx :=0 to DBGrid1.SelectedRows.Count-1 do begin fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); fdados.tabelareceptora.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptora.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptora.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; //contador := contador+1; Fdados.tabelareceptora.Append; end; //onde_quer_o_texto.text := 'Foram arquivados ' + contador + ' registros.'; Fdados.tabelareceptora.ApplyUpdates(0); end; só adicionar as linhas que eu coloquei // na frente obviamente retirando as barras ou simplesmente fdados.tabelareceptora.first; while not fdados.tabelareceptora.eof do begin contador := contador +1; fdados.tabelareceptora.next; end; onde_quer_o_texto.text := 'Foram arquivados ' + contador + ' registros.'; Editado Agosto 10, 2009 por Thalles63 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 10, 2009 Autor Denunciar Share Postado Agosto 10, 2009 (editado) você poderia dar um exemplo de como fazer esse loop, sou iniciante no delphi.procedure TForm.SpeedButton1Click(Sender: TObject); var idx, //contador :integer begin fdados.tabelareceptora.append; //contador := 0; with DBGrid1.DataSource do if DBGrid1.SelectedRows.Count > 0 then for Idx :=0 to DBGrid1.SelectedRows.Count-1 do begin fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); fdados.tabelareceptora.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptora.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptora.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; //contador := contador+1; Fdados.tabelareceptora.Append; end; //onde_quer_o_texto.text := 'Foram arquivados ' + contador + ' registros.'; Fdados.tabelareceptora.ApplyUpdates(0); end; só adicionar as linhas que eu coloquei // na frente obviamente retirando as barras ou simplesmente fdados.tabelareceptora.first; while not fdados.tabelareceptora.eof do begin contador := contador +1; fdados.tabelareceptora.next; end; onde_quer_o_texto.text := 'Foram arquivados ' + contador + ' registros.';Muito obrigado, ficou muito bom!O problema é que quando tenho somente um registro na Grid, ele mostra a mensagem 0 morador foi arquivado, deveria mostrar 1 morador foi arquivado. O que houve? Editado Agosto 10, 2009 por nsouza Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RafaelemeNt Postado Agosto 10, 2009 Denunciar Share Postado Agosto 10, 2009 Muito obrigado, ficou muito bom!O problema é que quando tenho somente um registro na Grid, ele mostra a mensagem 0 morador foi arquivado, deveria mostrar 1 morador foi arquivado. O que houve?Primeiramente, quando existe mais de 1 registro ele dá certo? Ou ele sempre vai mostrar com um resultado a menos?Lembre-se que a mensagem " X moradores foram arquivados com sucesso" deve estar logo após o término do LOOP Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 15, 2009 Autor Denunciar Share Postado Agosto 15, 2009 Muito obrigado, ficou muito bom!O problema é que quando tenho somente um registro na Grid, ele mostra a mensagem 0 morador foi arquivado, deveria mostrar 1 morador foi arquivado. O que houve?Primeiramente, quando existe mais de 1 registro ele dá certo? Ou ele sempre vai mostrar com um resultado a menos?Lembre-se que a mensagem " X moradores foram arquivados com sucesso" deve estar logo após o término do LOOPObrigado, ficou perfeito!(Resolvido) Selecionar linha do DBGrid; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nsouza Postado Agosto 19, 2009 Autor Denunciar Share Postado Agosto 19, 2009 Muito obrigado, ficou muito bom!O problema é que quando tenho somente um registro na Grid, ele mostra a mensagem 0 morador foi arquivado, deveria mostrar 1 morador foi arquivado. O que houve?Primeiramente, quando existe mais de 1 registro ele dá certo? Ou ele sempre vai mostrar com um resultado a menos?Lembre-se que a mensagem " X moradores foram arquivados com sucesso" deve estar logo após o término do LOOPObrigado, ficou perfeito!(Resolvido) Selecionar linha do DBGrid;Colegas,desculpe por reativar este post. O fato é o seguinte. Tudo explicado ate agora funcionou, eu seleciono várias linha do DBGrid e ele adiciona na tabela,Mas gostaria que as linhas que não fossem selecionadas tb fossem inseridas em uma tabela Ex.:Linhas selecionadas -> A clicar no botão confirmar fossem para Tabela "A"Linhas não seleciondas -> Ao mesmo tempo que o botão Confirmar fosse clicado essas dados tb seriam exportado porém para a tabela "B"Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RafaelemeNt Postado Agosto 19, 2009 Denunciar Share Postado Agosto 19, 2009 Muito bem. Vou tentar explicar um parte da lógica pra ver se ajuda.O código:for Idx :=0 to DBGrid1.SelectedRows.Count-1 do Faz percorrer todas as linhas selecionadas do DBGrid. O código: fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx])); Coloca um ponteiro para mostrar que a LINHA selecionada será utilizada (no momento do loop) Portanto, você poderia tentar algo do tipo: Faça um condicional. Se a linha "NÃO FOR SELECIONADA", então jogue os dados para tabela B. Caso contrário, jogue para a tabela A. Eu não testei, mas acredito que seja algo do tipo: procedure TForm.SpeedButton1Click(Sender: TObject); var idx, //contador :integer begin fdados.tabelareceptora.append; //contador := 0; with DBGrid1.DataSource do if DBGrid1.SelectedRows.Count > 0 then for Idx :=0 to DBGrid1.SelectedRows.Count-1 do begin if not (fdados.tabelaexportadora.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[Idx]))) then begin fdados.tabelareceptoraB.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptoraB.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptoraB.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; else fdados.tabelareceptoraA.FieldByName('NOME').Value := fdados.tabelaexportadora.FieldByName('NOME').Value; fdados.tabelareceptoraA.FieldByName('PROFISSAO').Value := fdados.tabelaexportadora.FieldByName('PROFISSAO').Value; fdados.tabelareceptoraA.FieldByName('SALARIO').Value := fdados.tabelaexportadora.FieldByName('SALARIO').Value; //contador := contador+1; Fdados.tabelareceptora.Append; end; end; //onde_quer_o_texto.text := 'Foram arquivados ' + contador + ' registros.'; Fdados.tabelareceptora.ApplyUpdates(0); end;Percebe o que eu tentei te explicar? Verifique com o condicional. Caso esteja selecionado, envia para a tabelareceptoraA. Senão, envie para a tabelareceptoraB.Espero ter ajudado. Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nsouza
Senhores,
eu estou criando um form para importar os dados para uma tabela.
para isso exibi os dados em um DBGrid onde o usuario irá selecionar e ao
clicar no botão confirmar os dados serão inseridos na tabela.
Gostaria de usar o DbGrid como se usa no excel. Ao clicar na linha ele seleciona
a linha toda mas com a opção de se o usuário quiser selecionar varios registros
ele pressiona a tecla shift e vai marcando qtos registros quiser e depois é so clicar no
botão confirmar e os dados serão importado.
Tem jeito? Obrigado!
Link para o comentário
Compartilhar em outros sites
16 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.