Gilcimar 0 Denunciar post Postado Maio 30, 2007 Olá pessoal, como posso fazer uma rotina para checar se o registro já existe na minha base de dados ?Hoje a minha tabela grava como chave unica uma sequencia de numeros automaticos....Só que nesta tabela eu tb vou guardar um campo DATA, e justamente eu gostaria que este campo data não se repetisse...Se já existe um registro com a data em questão gravado na tabela, me retorne a mensagem..."não é possivel incluir este registro, pois já existe um registro com esta data"EStou usando o Interbase como banco de dados.Como fazer isto ?Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 30, 2007 Pode fazer um SQL antes de dar o .Post final, fazendo uma validação e testando se já existe um registro na tabela em questão... Compartilhar este post Link para o post Compartilhar em outros sites
Gilcimar 0 Denunciar post Postado Maio 30, 2007 Pode fazer um SQL antes de dar o .Post final, fazendo uma validação e testando se já existe um registro na tabela em questão...Olá Marcio, primeiramente obrigado por responder ao tópico, no meu sql trabalho com parametros, não uso o .post...veja só:if not dm.ibTransa.InTransaction then dm.ibTransa.StartTransaction; dm.Qinserir.Close; dm.Qinserir.SQL.Clear; dm.Qinserir.SQL.Add('Insert into tbAntecipa'); dm.Qinserir.SQL.Add('(codigo, dtAnt, VlrBor, VlrDepos, VlrPag, VlrTotal, VlrFat, VlrTotAnt)'); dm.Qinserir.SQL.Add('values'); dm.Qinserir.SQL.Add('(:pcod, :pDt, :pBor, :pDep, :pPag, :pTotal, :pFat, :pTotAnt)'); dm.Qinserir.ParamByName('pcod').AsInteger := fBuscaCodigo; dm.Qinserir.ParamByName('pDt').AsDate := edmdtant.Date; dm.Qinserir.ParamByName('pBor').AsFloat := StrToFloat(edtbor.Text); dm.Qinserir.ParamByName('pDep').AsFloat := StrToFloat(edtdep.Text); dm.Qinserir.ParamByName('pPag').AsFloat := StrToFloat(edtpag.Text); dm.Qinserir.ParamByName('pTotal').AsFloat := StrToFloat(edttotal.Text); dm.Qinserir.ParamByName('pFat').AsFloat := StrToFloat(edtfaturamento.Text); dm.Qinserir.ParamByName('pTotAnt').AsFloat := StrToFloat(edttot.Text); try dm.Qinserir.ExecSQL; dm.ibTransa.CommitRetaining; pLimpaTela; except dm.ibTransa.Rollback; ShowMessage('Erro ao incluir registro...'); end;Como é que faço esta pesquisa que você falou, podes especificar com um exemplo ??Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 30, 2007 Teria que fazer a consulta antes de executar este sql... Algo do tipo: qryQualquer.Close;qryQualquer.SQL.Clear;qryQualquer.SQL.Add('select tbAntecipa.codigo');qryQualquer.SQL.Add('from tbAntecipa');qryQualquer.SQL.Add('where tbAntecipa.codigo =:Codigo');qryQualquer.SQL.Add('and tbAntecipa.dtAnt =:Data');qryQualquer.ParamByName('Codigo').Value:=fBuscaCodigo;qryQualquer.ParamByName('Data').Value:=StrToDate(DateToStr(edmdtant.Date));qryQualquer.Open;if not qryQualquer.IsEmpty then begin if not dm.ibTransa.InTransaction then dm.ibTransa.StartTransaction; dm.Qinserir.Close; dm.Qinserir.SQL.Clear; dm.Qinserir.SQL.Add('Insert into tbAntecipa'); dm.Qinserir.SQL.Add('(codigo, dtAnt, VlrBor, VlrDepos, VlrPag, VlrTotal, VlrFat, VlrTotAnt)'); dm.Qinserir.SQL.Add('values'); dm.Qinserir.SQL.Add('(:pcod, :pDt, :pBor, :pDep, :pPag, :pTotal, :pFat, :pTotAnt)'); dm.Qinserir.ParamByName('pcod').AsInteger := fBuscaCodigo; dm.Qinserir.ParamByName('pDt').AsDate := edmdtant.Date; dm.Qinserir.ParamByName('pBor').AsFloat := StrToFloat(edtbor.Text); dm.Qinserir.ParamByName('pDep').AsFloat := StrToFloat(edtdep.Text); dm.Qinserir.ParamByName('pPag').AsFloat := StrToFloat(edtpag.Text); dm.Qinserir.ParamByName('pTotal').AsFloat := StrToFloat(edttotal.Text); dm.Qinserir.ParamByName('pFat').AsFloat := StrToFloat(edtfaturamento.Text); dm.Qinserir.ParamByName('pTotAnt').AsFloat := StrToFloat(edttot.Text); try dm.Qinserir.ExecSQL; dm.ibTransa.CommitRetaining; pLimpaTela; except dm.ibTransa.Rollback; ShowMessage('Erro ao incluir registro...'); end; end; Idéia seria esta, precisa arrumar conforme sua necessidade... Compartilhar este post Link para o post Compartilhar em outros sites
Gilcimar 0 Denunciar post Postado Maio 31, 2007 Teria que fazer a consulta antes de executar este sql...Algo do tipo: qryQualquer.Close;qryQualquer.SQL.Clear;qryQualquer.SQL.Add('select tbAntecipa.codigo');qryQualquer.SQL.Add('from tbAntecipa');qryQualquer.SQL.Add('where tbAntecipa.codigo =:Codigo');qryQualquer.SQL.Add('and tbAntecipa.dtAnt =:Data');qryQualquer.ParamByName('Codigo').Value:=fBuscaCodigo;qryQualquer.ParamByName('Data').Value:=StrToDate(DateToStr(edmdtant.Date));qryQualquer.Open;if not qryQualquer.IsEmpty then begin if not dm.ibTransa.InTransaction then dm.ibTransa.StartTransaction; dm.Qinserir.Close; dm.Qinserir.SQL.Clear; dm.Qinserir.SQL.Add('Insert into tbAntecipa'); dm.Qinserir.SQL.Add('(codigo, dtAnt, VlrBor, VlrDepos, VlrPag, VlrTotal, VlrFat, VlrTotAnt)'); dm.Qinserir.SQL.Add('values'); dm.Qinserir.SQL.Add('(:pcod, :pDt, :pBor, :pDep, :pPag, :pTotal, :pFat, :pTotAnt)'); dm.Qinserir.ParamByName('pcod').AsInteger := fBuscaCodigo; dm.Qinserir.ParamByName('pDt').AsDate := edmdtant.Date; dm.Qinserir.ParamByName('pBor').AsFloat := StrToFloat(edtbor.Text); dm.Qinserir.ParamByName('pDep').AsFloat := StrToFloat(edtdep.Text); dm.Qinserir.ParamByName('pPag').AsFloat := StrToFloat(edtpag.Text); dm.Qinserir.ParamByName('pTotal').AsFloat := StrToFloat(edttotal.Text); dm.Qinserir.ParamByName('pFat').AsFloat := StrToFloat(edtfaturamento.Text); dm.Qinserir.ParamByName('pTotAnt').AsFloat := StrToFloat(edttot.Text); try dm.Qinserir.ExecSQL; dm.ibTransa.CommitRetaining; pLimpaTela; except dm.ibTransa.Rollback; ShowMessage('Erro ao incluir registro...'); end; end;Idéia seria esta, precisa arrumar conforme sua necessidade...Olá Marcio...tudo bem ?Infelizmente a rotina não funcionou...deu erro de exceção...Alguma outra idéia ?Gilcimar Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Maio 31, 2007 Que erro ?Não garanto que vai funcionar no seu código, montei ela com base no que tinha, pode ser que precise alterar... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Junho 1, 2007 Não seria mais fácil trabalhar com indices únicos na própria base de dados? Compartilhar este post Link para o post Compartilhar em outros sites