hend.maia 0 Denunciar post Postado Dezembro 19, 2013 Bom dia pessoal, sou novo no fórum e novo na programação também hehe, Estou fazendo um cadastro de fornecedor e usei a seguinte condição: procedure TF_CadBase1.Edit1Change(Sender: TObject); begin inherited; if RB_codigo.Checked then begin DM.ds_fornecedor.DataSet.Locate('fornec_codigo',Edit1.Text,[loCaseInsensitive,loPartialKey]); end; if RB_nome.Checked then begin DM.IBDSFornecedor.Close; DM.IBDSFornecedor.ParamByName('nome').AsString:=('%'+Edit1.Text+'%'); DM.IBDSFornecedor.Open; end; end; O problema é que quando abro esse formulário ele não abre com todos os dados do DBgrid carregados, o DBgrid abre sem nada, ai quando faço a primeira pesquisa ai sim aparece todos os fornecedores cadastrados. Quero abrir esse form com a DBgrid com todos os fornecedores. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Dezembro 19, 2013 Você deve programar o evento de carga no evento OnShow do seu Form para isso... o evento em que codificou sua regra de consulta só é ativado quando há alterações no seu TEdit, por isso não funciona quando entra na tela. Compartilhar este post Link para o post Compartilhar em outros sites
hend.maia 0 Denunciar post Postado Dezembro 19, 2013 Eu tentei abrir meu dataset pelo onshow mas num deu certo não... continua a mesma coisa, abre o dbgrid sem os dados, ai faço a consulta aparece tudo.... :upset: Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Dezembro 19, 2013 Como está o código do seu onShow? É o mesmo que está no edit? Se é o mesmo, provavelmente não trará nenhum retorno mesmo, visto que no evento do TEdit está uma regra que usa o valor do mesmo como parâmetro no filtro do sql.... pra funcionar no onShow, o select não pode fazer filtros where baseados em componentes da tela não preenchidos.... Outra coisa: já debugou o código do onshow e verificou se o sql que está sendo executado está correto? Compartilhar este post Link para o post Compartilhar em outros sites
hend.maia 0 Denunciar post Postado Dezembro 19, 2013 Eu sou novo em programação.. :unsure: Meu código ta assim: procedure TF_CadBase1.Edit1Change(Sender: TObject); begin inherited; if RB_codigo.Checked then begin DM.ds_fornecedor.DataSet.Locate('fornec_codigo',Edit1.Text,[loCaseInsensitive,loPartialKey]); end; if RB_nome.Checked then begin DM.IBDSFornecedor.Close; DM.IBDSFornecedor.ParamByName('nome').AsString:=('%'+Edit1.Text+'%'); DM.IBDSFornecedor.Open; end; end; procedure TF_CadBase1.FormCreate(Sender: TObject); begin inherited; DS_Principal2.DataSet.Open; DM.IBDSFornecedor.Open; end; procedure TF_CadBase1.FormShow(Sender: TObject); begin inherited; DS_Principal2.DataSet.Open; DM.IBDSFornecedor.Open; end; procedure TF_CadBase1.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; DS_Principal2.DataSet.Close; DM.IBDSFornecedor.Open; end; O que q eu tenho q muda ????? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Dezembro 19, 2013 O IBDSFornecedor é um TIBDataSet? Se for, como está o SQL no SelectSQL? Está usando filtros? O Sql que está codificado no componente funciona se executado no BD (trás algum retorno)? Outra coisa: não é preciso abrir no create e no show do form o mesmo componente, deixe apenas no OnShow estes comandos. O seu DBGrid está associado a qual dataset? Verificou se ao abrir o mesmo no form o mesmo tem associado a ele alguma informação para ser exibida no DBGrid? Compartilhar este post Link para o post Compartilhar em outros sites
hend.maia 0 Denunciar post Postado Dezembro 19, 2013 IBDSFornecedor é um dataset sim, a select dele é: select * from FORNECEDOR where fornec_nome like :nome e ela está funcionando corretamente sim; Meu DBgrid ta associado a um datasource/dataset/IBDSFornecedor Como verifico se ao abrir o mesmo no form o mesmo tem associado a ele alguma informação para ser exibida no DBGrid? Conseguiiii :natalbiggrin: Um cara de outro forum falou pra mim o seguinte: Cole o seguinte código no onshow: DM.IBDSFornecedor.Close; DM.IBDSFornecedor.ParamByName('nome').AsString := '%'; DM.IBDSFornecedor.Open; e foi batataaa hehe... só nao entendi muito bem a lógica.. mas ta funcionando certinho agora. Obrigado por ter se colocado desposto a me ajudar :natalhappy: Compartilhar este post Link para o post Compartilhar em outros sites