GARANTIR DESCONTO

Fórum Editando um registro na stringgrid #325682

20/07/2006

0

olá pessoal,
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

Marquinhospe

Responder

Posts

20/07/2006

Cabelo

Bom... um StringGrid, nada mais é que um array de string... portanto não tem ligação nenhuma com o BD... quando vc for editar... vc deve ponteirar seu dataset no registro que vc quer editar..

pode usar o método locate no dataset... antes de abrir o registro para edição...


Responder

Gostei + 0

28/07/2006

Marquinhospe

estou usanda a seguinte rotina e mesmo assim continua exibindo apenas o 1º usuário do stringgrid. e apresentando a seguinte mensagem de erro: DBText1: Field ´8´ not found
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;


Responder

Gostei + 0

31/07/2006

Cabelo

Bom... vamos lá....

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...


Responder

Gostei + 0

02/08/2006

Marquinhospe

Junior eu fiz da maneira q mandaste mas ele continua sempre exibindo o 1º registro da string. E quando eu altero uma informção ele exibe a seguinte mensagem de erro: Dbeditcodent: Field ´Nome´ not found., e altera a informção tipo valor. sinceramente eu ñ sei mas como fazer.
Estou trabalhando desta maneira pq é a q eu sei, se vc tem outra forma de editar mas facil agradeço.


Responder

Gostei + 0

02/08/2006

Cabelo

Estou um pouco confuso... vc está tentando fazer o q???

´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..


Responder

Gostei + 0

18/08/2006

Marquinhospe

ao tentar editar um registro no string ele da a seguinte mensagem:
dbeditcodent: Field ´3´ not found. como solucionar este erros


Responder

Gostei + 0

04/02/2007

Carcleo

Eu tenho o FormCotacoes(Pedidos).
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.


Responder

Gostei + 0

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

Aceitar