josuel 0 Denunciar post Postado Maio 18, 2010 Olá pessoal do forum! Sou iniciante em delphi e estou sem saber efutuar um consulta na minha tabela de clientes, a principio estou utilizando os componentes das abas Interbase e DataAccess são eles: IBQuery e DataSource. Gostaria que o usuario escolhece em um form por qual campo pesquisar, dentre as opções existentes que são: Codigo do cliente, nome do cliente e data de cadastro. O formulario já criei mas não consigo desevolver o código da pesquisa para retorna os dados. Desde já agradeço a possivel ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
lucascolferai 0 Denunciar post Postado Maio 20, 2010 josuel, É simples. Fica algo assim: IBQuery1.SQL.Text := 'SELECT CODIGO'; IfThen(EditNome.Text <> '', IBQuery1.SQL.Text+', NOME '); IfThen(EditDataCadastro.Text <> '', IBQuery1.SQL.Text+', DATACADASTRO '); IBQuery1.SQL.Text := IBQuery1.SQL.Text + 'FROM CLIENTES WHERE ALGUMA_COISA '; Coloquei o campo CODIGO fixo na sql porquê normalmente você sempre precisa do código do registro. Também ajuda a simplificar o código, pois assim não vai ter problema com a vírgula. Só, por favor, não use o nome da query de "IBQuery1". Isso é coisa de amador preguiçoso. :) Use sempre uma padronização para os componentes. Sugiro assim: ibqSql. Espero que tenha ajudado. Flw Compartilhar este post Link para o post Compartilhar em outros sites
josuel 0 Denunciar post Postado Maio 20, 2010 Pessoal se alguem poder me indicar um tutorial, onde ensine fazer pesquisas detalhandas com o delphi no banco firebird. Ficarei muito grato!! Lucascolferai Vou testa aqui e ver se consigo emplementa corretamente o código. Obs.: desculpa pela postagem anterior não tinha visto a sua resposta. Lucascolferai Acho que me expressei mal na criação do topico, o que eu estou precisando é mais ou menos o código que está abaixo. Ou seja quando o usuario quiser pesquisar pelo código é digitar o código do cliente o sql fique assim: SELECT * FROM TBL_Cliente WHERE CODIGO = 'o codigo digitado'; Só não estou consegindo colocar o que foi digitado após o sinal de igualdade da clausa Where (= ALGUMA_COISA) sqlConCliente.Close; sqlConCliente.SQL.Text := 'SELECT * FROM TBL_Cliente WHERE '; IfThen(EditCodigo.Text <> '', sqlConCliente.SQL.Text+', CODIGO '); IfThen(EditNome.Text <> '', sqlConCliente.SQL.Text+', NOME '); IfThen(EditDataCadastro.Text <> '', sqlConCliente.SQL.Text+', DATACADASTRO '); sqlConCliente.SQL.Text := sqlConCliente.SQL.Text + '= ALGUMA_COISA '; Compartilhar este post Link para o post Compartilhar em outros sites
lucascolferai 0 Denunciar post Postado Maio 20, 2010 Josuel, Entendi. O esquema é o mesmo, veja abaixo: sqlConCliente.SQL.Text := 'SELECT * FROM TBL_Cliente '; IfThen(EditCodigo.Text <> '', sqlConCliente.SQL.Text+' WHERE (CODIGO = '+EditCodigo.Text+') '); IfThen(EditNome.Text <> '', sqlConCliente.SQL.Text+' WHERE (NOME LIKE '+EditNome.Text+') '); IfThen(EditDataCadastro.Text <> '', sqlConCliente.SQL.Text+' WHERE (DATACADASTRO = '+EditDataCadastro.Text+') '); Claro, vão aparecer uns ajustes a fazer (no caso da comparação com o nome do cliente e com a data), mas a idéia é a mesma. Flw Compartilhar este post Link para o post Compartilhar em outros sites
josuel 0 Denunciar post Postado Maio 20, 2010 Lucascolferai, O comando sqlConCliente.SQL.Text não está sendo reconhecido dentro da função IfThen, no delphi está funcionando normal, mais na hora de pesquisar vem o erro dizendo que o sql está errado. Estava prestando atenção no código e percebi que ele só está reconhecendo está parte do mesmo sqlConCheque.SQL.Text := 'SELECT * FROM TBL_Clientes WHERE '; A outra parte complementar que ta na função ele não reconhece. Exemplo IfThen(Codigo.Text <> '', sqlConClientes.SQL.Text+'(CODIGO = '+Codigo.Text+') '); Eu não estou conseguindo entender o por que está acontecendo isso! Compartilhar este post Link para o post Compartilhar em outros sites
lucascolferai 0 Denunciar post Postado Maio 21, 2010 josuel, Veja se não é algum problema com o IfThen. A unit do form tem que usar a biblioteca "MathStrUtilsor". Flw Compartilhar este post Link para o post Compartilhar em outros sites
josuel 0 Denunciar post Postado Maio 21, 2010 josuel, Veja se não é algum problema com o IfThen. A unit do form tem que usar a biblioteca "MathStrUtilsor". Flw Lucascolferai, Mais a biblioteca do delphi 7 não tem essa classe "MathStrUtilsor" ele só passa com a classe StrUtils para retornar string. Será que tenho que instalar a classe "MathStrUtilsor". Usuando "StrUtils" ele só funcionou declarando uma variavel do tipo string para receber o retorno da função IfThen() tipo: sqlComp :=IfThen(EditNome.Text <> '', '(Nome LIKE "'+EditNome.Text+'%")');Só não sei se essa é a melhor solução por que assim teria que delcarar uma variavel para cada teste IfThen(). E depois eu não saberia juntar uma varial dessa de cada vez para fazer sa pesquisa.Ou se a melhor solução é instalar a classe "MathStrUtilsor". Se for onde encontro ela para instalar. Obs.: Realmente estou tendo problema com o uso do Like, executando a pesquisa ela só retorna os campos da tabela vazio. O que poderia está acontecendo? Compartilhar este post Link para o post Compartilhar em outros sites
Geovane Velmer 0 Denunciar post Postado Maio 22, 2010 Olá pessoal do forum! Sou iniciante em delphi e estou sem saber efutuar um consulta na minha tabela de clientes, a principio estou utilizando os componentes das abas Interbase e DataAccess são eles: IBQuery e DataSource. Gostaria que o usuario escolhece em um form por qual campo pesquisar, dentre as opções existentes que são: Codigo do cliente, nome do cliente e data de cadastro. O formulario já criei mas não consigo desevolver o código da pesquisa para retorna os dados. Desde já agradeço a possivel ajuda! Bom, vou explicar.. Coloque no seu projeto 1 RadioGroup 1 Edit da paleta Standard e 1 um BitBtn da paleta additional e tbm um DBGrid da Data Controls e os componentes de base de dados IBQuery da paleta Interbase e DataSource da paleta Data Access. Ligue os componentes de Base de dados, Query com DataSource e DataSource com DBGrid Na propriedade Itens do RadioGroup você adiciona os tipos de buscas Ex: Código Data de Cadastro Nome Um em cada linha, como no exemplo acima Renomeie o BitBtn1 para btBuscar e o Edit1 para dtBusca no Evento onKeyPress do dtBusca coloque o seguinte código procedure TForm1.dtBuscaKeyPress(Sender: TObject; var Key: Char); begin Case RadioGroup1.ItemIndex of 0 : begin //-- Define o tamanho maxímo de caracteres para 9 dtBusca.MaxLength:= 9; //-- Permite e digitação de apenas números if (key<>#13) and (key<>#27) and (key<>#8) then begin if (key in [#48..#57]) then else key:=#07; end; end; 1 : begin //-- Define o tamanho para data dtBusca.MaxLength:= 10; end; 2 : begin //-- Define o tamanho para nome dtBusca.MaxLength:= 50; end; end; end; no evente OnClick do RadioGroup1 coloque procedure TForm1.RadioGroup1Click(Sender: TObject); begin dtBusca.Clear; dtBusca.SetFocus; end; e no evento OnClick do btBuscar procedure TForm1.btBuscarClick(Sender: TObject); begin if Trim(dtBusca.Text) = '' then begin ShowMessage('Preencha o campo busca!'); dtBusca.SetFocus; Exit; end; //--- Inicia a busca IBQuery1.Close; IBQuery1.SQL.Clear; IBQuery1.SQL.Add('SELECT I_CODIGO,D_DATA,A_NOME'); IBQuery1.SQL.Add('FROM CLIENTE'); IBQuery1.SQL.Add('WHERE'); //--- Verifica o tipo de busca selecionado Case RadioGroup1.ItemIndex of 0 : IBQuery1.SQL.Add('I_CODIGO='+dtBusca.Text); 1 : IBQuery1.SQL.Add('D_DATA="'+dtBusca.Text+'"'); 2 : IBQuery1.SQL.Add('A_NOME LIKE "'+dtBusca.Text+'%"'); end; IBQuery1.Open; if not IBQuery1.IsEmpty then DBGrid1.SetFocus else begin ShowMessage('Sua busca não retornou resultados!'); dtBusca.SetFocus; Exit; end; end; Bom acredito que é só.. caso falte alguma coisa acho que será capaz de completar.. não testei o código, qualquer erro com relação a algo que escrevi é só postar que eu irei ajudar. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
josuel 0 Denunciar post Postado Maio 22, 2010 Geovane Velmer, O codigo está quase funcionando no delphi ele passou beleza, mais na hora de realizar a pesquisa por nome do cliente ele mostra um erro com a mensagem abaixo: 'Dynamic SQL error SQL error code = -206 Column unknown JOSUEL%' Acredito que o erro esteja nessa linha, mais ainda não conseguir resolver. 2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+texto+'%"') Será que está linha tem algun erro? Compartilhar este post Link para o post Compartilhar em outros sites
Geovane Velmer 0 Denunciar post Postado Maio 22, 2010 Geovane Velmer, O codigo está quase funcionando no delphi ele passou beleza, mais na hora de realizar a pesquisa por nome do cliente ele mostra um erro com a mensagem abaixo: 'Dynamic SQL error SQL error code = -206 Column unknown JOSUEL%' Acredito que o erro esteja nessa linha, mais ainda não conseguir resolver. 2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+texto+'%"') Tenta trocar essa linha por isso 2 : sqlConCheque.SQL.Add('NomeCliente LIKE "'+QuotedStr(texto)+'%"'); Não esqueça de finalizar com ponto e virgula as linhas de comando. Tente ai, qualquer coisa poste denovo, terei prazer em ajudar! Abraços Compartilhar este post Link para o post Compartilhar em outros sites
josuel 0 Denunciar post Postado Maio 26, 2010 Pessoal Conseguir fazer a busca corretamente. Obrigado a todos!!!!! Compartilhar este post Link para o post Compartilhar em outros sites