Fórum Editando um registro na stringgrid #325682
20/07/2006
0
bem estou aki precisando d uma grande ajuda de vcs. O problema é o seguinte: tenho um cadastro de fornecedores e eles estão sendo exibidos por uma stringgrid e ao tentar editar um registro desta string ele sempre retorna os dados do 1º registro da mesma, ou seja se eu selecionar o 5º registro e clicar no botão editar ele abre sempre o 1º registro mesmo sem estar selecionado. como faço p/ poder editar os registro dentro de uma stringgrid? aguardo respostas. obrigado
Marquinhospe
Curtir tópico
+ 0Posts
20/07/2006
Cabelo
pode usar o método locate no dataset... antes de abrir o registro para edição...
Gostei + 0
28/07/2006
Marquinhospe
DtmIbjn.Dtbibjn.StartTransaction; //inicia transação de dados
DtmIbjn.Tblentradas.Edit; // põe tbl em modo de edição
Application.CreateForm(TFrmCadentradas,FrmCadentradas);//Cria FrmCadastro
FrmCadentradas.ShowModal;// exibe
FrmCadentradas.DBText1.DataField :=StringGrid1.Rows[StringGrid1.Row][0];
FrmCadentradas.DBEditdata.DataField :=StringGrid1.Rows[StringGrid1.Row][1];
FrmCadentradas.rdgtipoent.DataField :=StringGrid1.Rows[StringGrid1.Row][2];
FrmCadentradas.DBEdit2.DataField :=StringGrid1.Rows[StringGrid1.Row][3];
FrmCadentradas.DBEdit1.DataField :=StringGrid1.Rows[StringGrid1.Row][4];
FrmCadentradas.DBEditvalor.DataField :=StringGrid1.Rows[StringGrid1.Row][5];
FrmCadentradas.DBComboBox1.DataField :=StringGrid1.Rows[StringGrid1.Row][6];
FrmCadentradas.DBEditesp.DataField :=StringGrid1.Rows[StringGrid1.Row][7];
FrmCadentradas.Destroy;
Gostei + 0
31/07/2006
Cabelo
Para executar a edição... vc pode utilizar direto no StringGrid, mas se prefere utilizar dos DBEdits vamos lá..
assim pode funcionar..
DtmIbjn.Dtbibjn.StartTransaction; //inicia transação de dados DtmIbjn.Tblentradas.Edit; // põe tbl em modo de edição Application.CreateForm(TFrmCadentradas,FrmCadentradas);//Cria FrmCadastro FrmCadentradas.ShowModal;// exibe FrmCadentradas.DBText1.DataField :=StringGrid1.Cells[StringGrid1.Row, 0]; FrmCadentradas.DBEditdata.DataField :=StringGrid1.Cells[StringGrid1.Row, 1]; FrmCadentradas.rdgtipoent.DataField :=StringGrid1.Cells[StringGrid1.Row, 2]; FrmCadentradas.DBEdit2.DataField :=StringGrid1.Cells[StringGrid1.Row, 3]; FrmCadentradas.DBEdit1.DataField :=StringGrid1.Cells[StringGrid1.Row, 4]; FrmCadentradas.DBEditvalor.DataField :=StringGrid1.Cells[StringGrid1.Row, 5]; FrmCadentradas.DBComboBox1.DataField :=StringGrid1.Cells[StringGrid1.Row, 6]; FrmCadentradas.DBEditesp.DataField :=StringGrid1.Cells[StringGrid1.Row, 7]; FrmCadentradas.Destroy;
Deve funcionar assim... mas pq vc passa o DataField em RUN - Time... vc trabalha com diversas tabelas diferentes no mesmo StringGrid...
pois se vc quer o valor do Cells do StringGrid no DBText... vcv deve passar assim :
. . . DtmIbjn.Tblentradas.Edit; Tblentradas.FieldByName(´Nome do campos na tabela´).AsString := StringGrid1.Cells[StringGrid1.Row, coluna do campo correspondente]; . . . . Tbllentradas.Post; Tblentradas.Refresh;
Espero uqe assim possa resolver seu problema...
Gostei + 0
02/08/2006
Marquinhospe
Estou trabalhando desta maneira pq é a q eu sei, se vc tem outra forma de editar mas facil agradeço.
Gostei + 0
02/08/2006
Cabelo
´Jogar´ os dados de um stringGrid nos edits para depois editá-los???
se for isso não há necessidade, vc pode utilizar a edição direto no stringgrid...
ou então está tenatndo editar um clientdataset ligado aos edits e depois jogá-los num string grid... se for isso vc deve sempre incrementar um contador que pode ser feito a partir de um for para o número da linha..
assim por exemplo :
Lembre-se que o clientdataset já deve estar aberto..
stringgrid.colcount := clientdataset.fieldcount - 1;
stringgrid.rowcount := clientdataset.recordcount - 1;
clientdataset.first;
for v_i := 0 to clientdataset.fieldcount - 1 do
begin
for v_j := 0 to clientadataset.recordcount - 1 do
begin
stringgrid.cells[v_j, v_i] := clientdataset.fieldbyname(clientdataset.fields[v_i].name).asstring;
clientdataset.next;
end;
end;
depois que vc editar eles diretamente no stringgrid, ao clicar no botão salvar, vc dá o mesmo for mas muda os dados pro client.
clientdataset.first;
for v_i := 0 to stringgrid.colcount - 1 do
begin
for v_j := 0 to stringgrid.rowcount - 1 do
begin
clientdataset.edit;
clientdataset.fieldbyname(clientdataset.fields[v_i].name).asstring :=
stringgrid.cells[v_j, v_i];
clientdataset.post;
clientdataset.next;
end;
end;
clientdataset.applayupdates;
espero ter ajudado..
Gostei + 0
18/08/2006
Marquinhospe
dbeditcodent: Field ´3´ not found. como solucionar este erros
Gostei + 0
04/02/2007
Carcleo
Nele pus 2 componentes ZTables: ZTablesClientes e ZTablesCotacoes.
Puxei pro form os campos do ZTablesCotacoes.
O Primeiro campo do ZTablesCotacoes é ID (ID de cada pedido)
O Segundo campo do ZTablesCotacoes é NomeCli(Nome do Cli a ser pesquizado na tabela Clientes)
O Primeiro campo do ZTablesCotacoes é CPF(CPF do Cli a ser pesquizado na tabela Clientes)
...
Para o campo NomeCli do ZTablesCotacoes eu tirei o DBEditCli e puz uma comboboxCli no lugar.
Eu quero que ao começar a digitar um nome de cliente, seja feita uma pesquiza e que o nome do cliente seja autocompletado como por exemplo, digita Carl e autocompleta Carlos Rocha.
Daí, pus um componente ZQuery com name de ZqryClientes com SQL=´Select * from clientes order by Nome´ e um Parameter ´Nome´ e entrei o evento OnChange da ComboboxCli e pus o codigo abaixo;
procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject); begin if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção begin ZqryClientes.Close; ZqryClientes.ParamByName(´Nome´).Value:=ZTableCotacoesNomeCli.Value; ZqryClientes.Open; ZqryClientes.First; //Verifica se encontrou while not ZqryClientes.EOF do begin ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value)); ZqryClientes.Next; end; end;
Daí ta autocompletando ok.
Quando eu abro a combobox, la estao os omes dos clientes.
Agora eu quero fazer o seguinte:
Ao trocar o nome do cliente na combobox, o DBEditCPF troque tb do CPF do 1º para o CPF do 2° escolhido. É isso que quero.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)