<Unable to find record. No key specified> SOCORROOOO....
procedure TF_ModeloEntrada.SpeedButton1Click(Sender: TObject);
begin
if MessageDlg(''''Deseja mesmo excluir este registro?'''',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage(''''Exclusão realizada com Exito'''');
end;
end;
begin
if MessageDlg(''''Deseja mesmo excluir este registro?'''',mtInformation, [mbYes, mbNo],0) = mrYes then
begin
if not DtsConsulta.DataSet.IsEmpty then //Verifica se nao esta vazio
begin
DtsConsulta.DataSet.Delete;
if dtsConsulta.DataSet is TClientDataSet then //compara se dtsconsulta e da classe Tclientdataset
TClientDataSet (dtsconsulta.DataSet).ApplyUpdates(0);// se for da o applyupdt
ShowMessage(''''Exclusão realizada com Exito'''');
end;
end;
Fabio
Curtidas 0
Respostas
Cauê Nishijima
27/04/2014
Fábio como é a consulta SQL que você faz pra pegar os dados pra esse ClientDataSet? Nas colunas que vc fez consulta esta presente algum campo de chave primária?
GOSTEI 0
Fabio
27/04/2014
no cds_pesqEntrada = Select e.*,p.produto from Entrada e, produto p where e.id_produto=p.id_produto and data_entrada between :data1 and :data2 order by data_entrada
no cds_pesqSaida = Select * from Saida where data_Saida between :data1 and :data2 order by data_Saida
e no sds_CadEntrada = Insert into ENTRADA (DATA_ENTRADA, ID_PRODUTO, MOTIVO_ENTRADA, QTDADE_ENTRADA)
values(:DATA_ENTRADA, :ID_PRODUTO, :MOTIVO_ENTRADA, :QTDADE_ENTRADA)
no cds_cadSaida Insert into SAIDA (DATA_SAIDA, ID_PRODUTO, MOTIVO_SAIDA, QTDADE_SAIDA)
values(:DATA_SAIDA, :ID_PRODUTO, :MOTIVO_SAIDA, :QTDADE_SAIDA)
Lembrando que a exclusao de saidas funciona e a de entrada vem esse erro e ja mexi nos provider flags e tudo
flw
no cds_pesqSaida = Select * from Saida where data_Saida between :data1 and :data2 order by data_Saida
e no sds_CadEntrada = Insert into ENTRADA (DATA_ENTRADA, ID_PRODUTO, MOTIVO_ENTRADA, QTDADE_ENTRADA)
values(:DATA_ENTRADA, :ID_PRODUTO, :MOTIVO_ENTRADA, :QTDADE_ENTRADA)
no cds_cadSaida Insert into SAIDA (DATA_SAIDA, ID_PRODUTO, MOTIVO_SAIDA, QTDADE_SAIDA)
values(:DATA_SAIDA, :ID_PRODUTO, :MOTIVO_SAIDA, :QTDADE_SAIDA)
Lembrando que a exclusao de saidas funciona e a de entrada vem esse erro e ja mexi nos provider flags e tudo
flw
GOSTEI 0
Cauê Nishijima
27/04/2014
Fabio vc tem que desmarcar as flags pfInUpdate e pfInWhere da coluna p.produto...Tanto no TClientDataSet quanto da TSQLQuery...
GOSTEI 0
Fabio
27/04/2014
Entao cara eu nao tem componente Query somente Sds cds e Dsp entao sera que eu tiriar esse p.produto e fazer esse lokup adicionando os campos la pelo new field sera que deve funcionar ?
lembrando que uso dois cds
cds_cadEntrada e outro
cds_pesqentrada
lembrando que uso dois cds
cds_cadEntrada e outro
cds_pesqentrada
GOSTEI 0
Cauê Nishijima
27/04/2014
Vou fazer um teste com SimpleDataSet e te retorno!
GOSTEI 0
Cauê Nishijima
27/04/2014
Cara aparentemente é igual, no SimpleDataSet, vc da um duplo clique depois um 'Add all Fields' e no campo produto vc desmarca as flags que disse, depois faz o mesmo procedimento no ClientDataSet.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
GOSTEI 0
Cauê Nishijima
27/04/2014
Cara aparentemente é igual, no SimpleDataSet, vc da um duplo clique depois um 'Add all Fields' e no campo produto vc desmarca as flags que disse, depois faz o mesmo procedimento no ClientDataSet.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
GOSTEI 0
Fabio
27/04/2014
valeu cara vou testar quando sair do serviço e chegar em casa e te retorno
flw
abraço
flw
abraço
GOSTEI 0
Fabio
27/04/2014
Cara aparentemente é igual, no SimpleDataSet, vc da um duplo clique depois um 'Add all Fields' e no campo produto vc desmarca as flags que disse, depois faz o mesmo procedimento no ClientDataSet.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
Mas provavelmente fazendo um Lookup como você disse também resolva o problema.
Cara Fiz usando newfield com lokup e funcionou agora aparentamente ta funcionando certinho excluindo do banco e do grid
muito obrigado
queria saber se vc pode me ajudar com um combobox que preciso renomea os itens inclusive ja abri topico aqui meu problema e esse:
fiz uma pesquisa baseado nos atributos das minhas tabelas de modo que meu combobox fique assim por exemmplo se a tabela for a de cliente
os itens do combobox vao ficar assim
ID_CLIENTE
NOME
ENDERECO
CIDADE
de acordo com os atributos que tem na minha tabela porem eu quero renomea-los para que fique mais bonito e elegante desse jeito
Cód. Cliente
Nome
Endereço
Cidade
a funcao para levar os atributos ao combobox foram essas
no evento formshow: (lembrando que esse é meu form modelo pois fiz os outros com herança dele)
procedure TF_Modelo.FormShow(Sender: TObject);
var I: integer;
begin
for I := 0 to DtsConsulta.DataSet.FieldCount - 1 do
begin
if DtsConsulta.DataSet.Fields[I].DataType in [ftString, ftWideString, ftInteger, ftFixedChar] then
cbCampo.Items.Add(DtsConsulta.DataSet.Fields[I].FieldName);
e no onclick do botao foi essa (lembrando que esse é meu form modelo pois fiz os outros com herança dele)
if rbcontem.Checked then
_pesquisa := cbCampo.Text + ' Like ' + QuotedStr('%' + edtPesquisar.Text + '%' )
else if rbComeca.Checked then
_pesquisa := cbCampo.Text + ' Like ' + QuotedStr( edtPesquisar.Text + '%' );
with TClientDataSet (dtsconsulta.DataSet) do
begin
close;
CommandText:= _txt + _pesquisa;
open;
end;
GOSTEI 0
Cauê Nishijima
27/04/2014
Fábio usa a propriedade DiplayLabel dos Fields, põe o nome que você quer que apareça na propriedade DisplayLabel de cada Field.
Ai no OnShow você faz
e no OnClick do Button vc faz:
Ai no OnShow você faz
procedure TF_Modelo.FormShow(Sender: TObject);
var
I: integer;
sb: TStringBuilder;
begin
for I := 0 to DtsConsulta.DataSet.FieldCount - 1 do
begin
if DtsConsulta.DataSet.Fields[I].DataType in [ftString, ftWideString, ftInteger, ftFixedChar] then
begin
sb := TStringBuilder.Create(DtsConsulta.DataSet.Fields[I].FieldName);
cbCampo.Items.AddObject(DtsConsulta.DataSet.Fields[I].DisplayLabel, sb);
end;
e no OnClick do Button vc faz:
if rbcontem.Checked then
_pesquisa := TStringBuilder(cbb1.Items.Objects[cbb1.ItemIndex]).ToString + ' Like ' + QuotedStr('%' + edtPesquisar.Text + '%' )
else if rbComeca.Checked then
_pesquisa :=TStringBuilder(cbb1.Items.Objects[cbb1.ItemIndex]).ToString + ' Like ' + QuotedStr( edtPesquisar.Text + '%' );
with TClientDataSet (dtsconsulta.DataSet) do
begin
close;
CommandText:= _txt + _pesquisa;
open;
end;
GOSTEI 0
Fabio
27/04/2014
Mais uma vez obrigado pela atenção caue, esse metodo que voce me passou pode ser usado no formularioModelo para que os outros herdem ou preciso colocar esse código em um por um nos form de herenca (ex:formProduto, Cliente)
assim que chegar em casa vou testar
assim que chegar em casa vou testar
GOSTEI 0
Fabio
27/04/2014
Fábio usa a propriedade DiplayLabel dos Fields, põe o nome que você quer que apareça na propriedade DisplayLabel de cada Field.
Ai no OnShow você faz
e no OnClick do Button vc faz:
Ai no OnShow você faz
procedure TF_Modelo.FormShow(Sender: TObject);
var
I: integer;
sb: TStringBuilder;
begin
for I := 0 to DtsConsulta.DataSet.FieldCount - 1 do
begin
if DtsConsulta.DataSet.Fields[I].DataType in [ftString, ftWideString, ftInteger, ftFixedChar] then
begin
sb := TStringBuilder.Create(DtsConsulta.DataSet.Fields[I].FieldName);
cbCampo.Items.AddObject(DtsConsulta.DataSet.Fields[I].DisplayLabel, sb);
end;
e no OnClick do Button vc faz:
if rbcontem.Checked then
_pesquisa := TStringBuilder(cbb1.Items.Objects[cbb1.ItemIndex]).ToString + ' Like ' + QuotedStr('%' + edtPesquisar.Text + '%' )
else if rbComeca.Checked then
_pesquisa :=TStringBuilder(cbb1.Items.Objects[cbb1.ItemIndex]).ToString + ' Like ' + QuotedStr( edtPesquisar.Text + '%' );
with TClientDataSet (dtsconsulta.DataSet) do
begin
close;
CommandText:= _txt + _pesquisa;
open;
end;
Caue ele nao pego a variavel sb retorna o seguinte errro
[DCC Error] U_Modelo.pas(311): E2034 Too many actual parameters
[DCC Fatal Error] ControleEstoque.dpr(33): F2063 Could not compile used unit 'U_Modelo.pas'
experimentei tirar pra ver compila porem quando vou fazer uma busca ele retorna
acess violation in data module
quanto aos itens listo certinho só deu esses probleminhas mesmo
se souber a solucao me comunique
flw
GOSTEI 0
Cauê Nishijima
27/04/2014
Se tiver como postar o codigo completo do onshow e do onclick eu dou uma olhada
GOSTEI 0
Cauê Nishijima
27/04/2014
Se tiver como postar o codigo completo do onshow e do onclick eu dou uma olhada
GOSTEI 0
Fabio
27/04/2014
cara o erro era burrice minha mesmo só burrice de programador novato como eu eu esqueci de muda o .Add para .AddObeject
dae funcionou perfeito foi GENIAL sua dica e o codigo que vc me passo me resolveu o problema
outra coisa as vezes quando eu abro meu projeto as vezes aparece uma mensagem de erro SQLconection porem nao é toda vez as vezes acontece
outro erro que acontece erro insufficient memory for this operation alias quando estou compilando dae fecho o delphi e reincio o pc e funciona por um certo tempo
em fim se vc souber
flw
dae funcionou perfeito foi GENIAL sua dica e o codigo que vc me passo me resolveu o problema
outra coisa as vezes quando eu abro meu projeto as vezes aparece uma mensagem de erro SQLconection porem nao é toda vez as vezes acontece
outro erro que acontece erro insufficient memory for this operation alias quando estou compilando dae fecho o delphi e reincio o pc e funciona por um certo tempo
em fim se vc souber
flw
GOSTEI 0