Erro Unable to find record

08/03/2013

1

Boa tarde pessoal, estou dando continuidade em um fonte aqui no meu emprego mas estou tendo varios problemas, vamos ver, agora quando vou compilar o projeto esta dando o seguinte erro:

Unable to find record. No key specific.
Responder

Posts

Boa tarde pessoal, estou dando continuidade em um fonte aqui no meu emprego mas estou tendo varios problemas, vamos ver, agora quando vou compilar o projeto esta dando o seguinte erro:

Unable to find record. No key specific.


Em qual parte do código está aparecendo esse erro? Se você puder nos fornecer mais informações talvez seja mais fácil encontrar uma solução? Você está debugando o código para ver o que está causando esse erro?

Boa sorte e bons códigos!
Responder

09/03/2013

Andre Ucella

Este é o fonte do cadastro de produtos, no final to citando qual parte esta o erro;

unit uFrmCadProduto;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uFrmCadPadrao, uFrameBotaoVertical, ExtCtrls, ComCtrls,
ActnList, DB, StdCtrls, Mask, DBCtrls, Grids, DBGrids;

type
TFrmCadProduto = class(TFrmCadPadrao)
PageControl1: TPageControl;
Panel1: TPanel;
FrameBotaoVertical1: TFrameBotaoVertical;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
DbID: TDBEdit;
DbDescricao: TDBEdit;
DbUnid: TDBEdit;
DbEan: TDBEdit;
DBEdit6: TDBEdit;
DbPreco: TDBEdit;
DbEstoque: TDBEdit;
DbTributacao: TDBRadioGroup;
DbFracionado: TDBCheckBox;
GroupBox2: TGroupBox;
RadioOpcao: TRadioGroup;
GroupBox3: TGroupBox;
EdtLocalizar: TEdit;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure ActIncluirExecute(Sender: TObject);
procedure ActConfirmarExecute(Sender: TObject);
procedure DbIDKeyPress(Sender: TObject; var Key: Char);
procedure EdtLocalizarExit(Sender: TObject);
procedure ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
private
{ Private declarations }
function VerificaDadosProduto:boolean;
public
{ Public declarations }
end;

var
FrmCadProduto: TFrmCadProduto;

implementation

Uses uLibrary,uDM;

{$R *.dfm}

procedure TFrmCadProduto.FormShow(Sender: TObject);
begin
inherited;
DataWork.DataSet := DM.CdsProdutos;
DM.AbreTabelaProdutos('0',1);
PageControl1.TabIndex := 0;

end;

procedure TFrmCadProduto.ActIncluirExecute(Sender: TObject);
begin
inherited;
DbDescricao.SetFocus;

end;

procedure TFrmCadProduto.ActConfirmarExecute(Sender: TObject);
begin
if not VerificaDadosProduto then
Abort;
inherited;

end;

function TFrmCadProduto.VerificaDadosProduto: boolean;
begin
Result := true;
if (DataWork.DataSet.FieldByName('PRECO').AsFloat < 0) or
(DataWork.DataSet.FieldByName('ESTOQUE').AsFloat < 0) then
begin
MessageDlg('O Preco e o Estoque não podem ser negativos!!!', mtError, [mbOK], 0);
Result := false;
end;

end;

procedure TFrmCadProduto.DbIDKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
TabEnter(Self,Key);

end;

procedure TFrmCadProduto.EdtLocalizarExit(Sender: TObject);
begin
inherited;
if EdtLocalizar.Text <> '' then
begin
DM.AbreTabelaProdutos(EdtLocalizar.Text,RadioOpcao.ItemIndex);
end;
end;

procedure TFrmCadProduto.ActionList1Update(Action: TBasicAction;
var Handled: Boolean);
begin
inherited;
AbilitaFrame(FrameBotaoVertical1,DataWork.DataSet);

end;

end.

------------------------------------------------------

O erro esta aqui, quando mando incluir um produto;

procedure TFrmCadProduto.ActIncluirExecute(Sender: TObject);
begin
inherited;
DbDescricao.SetFocus;

end;
Responder
O erro esta aqui, quando mando incluir um produto;

procedure TFrmCadProduto.ActIncluirExecute(Sender: TObject);
begin
inherited;
DbDescricao.SetFocus;


DBDescrição é um componente DBEdit? A tabela utilizada nessa inclusão usa chave primária, se usar, configure a opção pfInkey = True na propriedade Providerflags do seu Data Set, no DataSetProvider deve mudar a propriedade UpdateMode para upWhereKeyOnly. Veja assim dá certo.

Boa sorte e bons códigos!
Responder

09/03/2013

Andre Ucella

Já habilitei estas opções, mas mesmo assim o erro continua, to tentando achar aqui o por que ..
Responder
Já habilitei estas opções, mas mesmo assim o erro continua, to tentando achar aqui o por que ..


Quais campos são chave primária nessa tabela? O erro acontece quando esse DBEdit recebe o foco?


Boa sorte e bons códigos!
Responder

09/03/2013

Andre Ucella

O campo ID é a unica chave primaria da tabela produtos, o erro ocorre quando clico no botao incluir, antes mesmo do foco ir para o dbedt
Responder
O campo ID é a unica chave primaria da tabela produtos, o erro ocorre quando clico no botao incluir, antes mesmo do foco ir para o dbedt


Você está trabalhando com herança, esse problema só acontece nesse form? Quais componentes de acesso você está utilizando? Tem algum código para DataSet no form original?


Boa sorte e bons códigos!
Responder

09/03/2013

Andre Ucella

nao, acontece em qualquer form que eu tente dar um insert, uso SQLQuery, Datasetprovider e clientdataset.
Responder

09/03/2013

Andre Ucella

Ele esta buscando este codigo;

procedure Grava_Dados(pDataDados: TDataSet);
begin
Randomize;
IniciaTransacao;
if TClientDataSet(pDataDados).Active then
begin
if TClientDataSet(pDataDados).State in [dsInsert,dsEdit] then
TClientDataSet(pDataDados).Post;
if TClientDataSet(pDataDados).ChangeCount > 0 then
TClientDataSet(pDataDados).ApplyUpdates(0); <-------------ERRO ACONTECE AQUI...!!!!!!!!!
end;
ConexaoDados.Commit(Transc);

end;
Responder
nao, acontece em qualquer form que eu tente dar um insert, uso SQLQuery, Datasetprovider e clientdataset.

Como está ocnfigurado o seu DataSetProvider na opção UpdatMode? E o providerFlags do seu DataSet?
No caso do SQLQuery.


Boa sorte e bons códigos!
Responder