Renanbg 1 Denunciar post Postado Julho 17, 2008 Boa tarde Atualmente tenho o codigo abaixo para verificar se um numero ja existe no banco if (frmdm.tbduplicatas.State in[dsInsert]) then begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select Num_doc from tbduplicatas'); Query1.SQL.Add('where Num_doc =:paramItem'); Query1.Params[0].AsString; Query1.ParamByName('paramItem').AsString := frmdm.tbduplicatasNum_doc.AsString; Query1.Open; if Query1.RecordCount <> 0 then begin Mensagem := 'A duplicata de Nº '+ frmdm.tbduplicatasNum_doc.AsString + ' já encontra-se cadastrada,'+#13+'por favor verifique os dados e tente novamente !'; Application.MessageBox(PCHAR(Mensagem), 'Duplicatas', MB_ICONERROR + MB_OK); dbedit4.SetFocus; end; end; Como podem ver é verificado se o campo num_doc ja existe na tabela tbduplicatas Preciso que ele verifique tbm na tbvencidas qual seria a maneira mais correta de montar o codigo? pensei em fazer ele 2 vezes..1 para cada tabela...é o mais correto? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Julho 17, 2008 Pode fazer um UNION, ficando assim tudo no mesmo SQL, algo como: if (frmdm.tbduplicatas.State = dsInsert) then begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select tbduplicatas.Num_doc'); Query1.SQL.Add('from tbduplicatas'); Query1.SQL.Add('where tbduplicatas.Num_doc = ' + frmdm.tbduplicatasNum_doc.AsString); Query1.SQL.Add('union'); Query1.SQL.Add('select tbvencidas.Num_doc'); Query1.SQL.Add('from tbvencidas'); Query1.SQL.Add('where tbvencidas.Num_doc = ' + frmdm.tbduplicatasNum_doc.AsString); Query1.Open; if (not Query1.IsEmpty) then begin Application.MessageBox(PCHAR('A duplicata de Nº '+ frmdm.tbduplicatasNum_doc.AsString + ' já encontra-se cadastrada,'+#13+'por favor verifique os dados e tente novamente !'), 'Duplicatas', MB_ICONERROR + MB_OK); dbedit4.SetFocus; end; end; Alterei um pouco seu fonte :D Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Julho 17, 2008 hum..n conhecia esse codigo marcio... mas da erro de type mismatch in expression se digito um numero q ja existe e se n digito nada ou digito por exemplo 8H da erro de invalid use of keyword Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Julho 17, 2008 Separa o SQL e executa no seu BD para verificar... Qual o tipo de campo para o campo: Num_doc ? Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Julho 17, 2008 Num_doc é do tipo String, pq esse campo pode ser numeros e letras ao mesmo tempo outro detalhe é q esse campo pode ser deixado em banco em alguns casos e ser preenchido posteriormente Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Julho 17, 2008 Tente assim então: if (frmdm.tbduplicatas.State = dsInsert) then begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select tbduplicatas.Num_doc'); Query1.SQL.Add('from tbduplicatas'); Query1.SQL.Add('where tbduplicatas.Num_doc = ''' + frmdm.tbduplicatasNum_doc.AsString + ''''); Query1.SQL.Add('union'); Query1.SQL.Add('select tbvencidas.Num_doc'); Query1.SQL.Add('from tbvencidas'); Query1.SQL.Add('where tbvencidas.Num_doc = ''' + frmdm.tbduplicatasNum_doc.AsString + ''''); Query1.Open; if (not Query1.IsEmpty) then begin Application.MessageBox(PCHAR('A duplicata de Nº '+ frmdm.tbduplicatasNum_doc.AsString + ' já encontra-se cadastrada,'+#13+'por favor verifique os dados e tente novamente !'), 'Duplicatas', MB_ICONERROR + MB_OK); dbedit4.SetFocus; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Julho 17, 2008 marcio http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Td certo, muito obrigado sem querer abusar de sua paciencia, agora para ficar td ok falta só o relatorio que eu tbm devo pesquisar nas 2 tabelas atualmente esta assim BitBtn2.Enabled:=false; BitBtn2.Caption:='Aguarde...'; Inicio := DateToStr(DateTimePicker1.Date); Final := DateToStr(DateTimePicker2.Date); Application.CreateForm(Tfrmrelduplicatas, frmrelduplicatas); frmrelduplicatas.Query1.Close; frmrelduplicatas.Query1.SQL.Clear; frmrelduplicatas.Query1.SQL.Text := 'SELECT * FROM tbduplicatas WHERE Data_doc >=:pInicial and Data_doc<=:pFinal and Status="RECEBIDO"'; frmrelduplicatas.Query1.ParamByName('pInicial').AsDateTime := StrToDate(Inicio); frmrelduplicatas.Query1.ParamByName('pFinal').AsDateTime := StrToDate(Final); frmrelduplicatas.Query1.Prepare; frmrelduplicatas.Query1.Open; if (frmrelduplicatas.query1.RecordCount = 0) then begin Mensagem := 'Não existem dados para o critério selecionado!'; Application.MessageBox(PCHAR(Mensagem), 'Duplicatas', MB_ICONINFORMATION + MB_OK); close; exit; end; frmrelduplicatas.QRLabelini.caption:= DatetoStr(DateTimePicker1.Date); frmrelduplicatas.QRLabelfim.caption:= DatetoStr(DateTimePicker2.Date); frmrelduplicatas.QRLabeltipo.caption:= 'Período de'; frmrelduplicatas.QRLabelcedente.caption:= ComboBox1.Text; frmrelduplicatas.quickrep1.preview; close; alterei a linha do select para frmrelduplicatas.Query1.SQL.Text := 'SELECT * FROM tbduplicatas, tbvencidas WHERE Data_doc >=:pInicial and Data_doc<=:pFinal and Status="RECEBIDO"'; Ele me traz m total de 8 registros porem os dados são todos iguais no relatorio..ou seja cedente, num_doc, valor...td igual. pq será? uso quickreport Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Julho 17, 2008 marcio http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Td certo, muito obrigado sem querer abusar de sua paciencia, agora para ficar td ok falta só o relatorio que eu tbm devo pesquisar nas 2 tabelas atualmente esta assim BitBtn2.Enabled:=false; BitBtn2.Caption:='Aguarde...'; Inicio := DateToStr(DateTimePicker1.Date); Final := DateToStr(DateTimePicker2.Date); Application.CreateForm(Tfrmrelduplicatas, frmrelduplicatas); frmrelduplicatas.Query1.Close; frmrelduplicatas.Query1.SQL.Clear; frmrelduplicatas.Query1.SQL.Text := 'SELECT * FROM tbduplicatas WHERE Data_doc >=:pInicial and Data_doc<=:pFinal and Status="RECEBIDO"'; frmrelduplicatas.Query1.ParamByName('pInicial').AsDateTime := StrToDate(Inicio); frmrelduplicatas.Query1.ParamByName('pFinal').AsDateTime := StrToDate(Final); frmrelduplicatas.Query1.Prepare; frmrelduplicatas.Query1.Open; if (frmrelduplicatas.query1.RecordCount = 0) then begin Mensagem := 'Não existem dados para o critério selecionado!'; Application.MessageBox(PCHAR(Mensagem), 'Duplicatas', MB_ICONINFORMATION + MB_OK); close; exit; end; frmrelduplicatas.QRLabelini.caption:= DatetoStr(DateTimePicker1.Date); frmrelduplicatas.QRLabelfim.caption:= DatetoStr(DateTimePicker2.Date); frmrelduplicatas.QRLabeltipo.caption:= 'Período de'; frmrelduplicatas.QRLabelcedente.caption:= ComboBox1.Text; frmrelduplicatas.quickrep1.preview; close; alterei a linha do select para frmrelduplicatas.Query1.SQL.Text := 'SELECT * FROM tbduplicatas, tbvencidas WHERE Data_doc >=:pInicial and Data_doc<=:pFinal and Status="RECEBIDO"'; Ele me traz m total de 8 registros porem os dados são todos iguais no relatorio..ou seja cedente, num_doc, valor...td igual. pq será? uso quickreport Abre um novo tópico sobre esta dúvida do relatório, para não misturar com a questão anterior... Compartilhar este post Link para o post Compartilhar em outros sites