Fórum Parametros SQLDataSet em tempo de execução #343453

19/07/2007

0

Caros amigos, sou novo por aqui e tenho um pequeno problema e acredito que algum filho de Deus nesse forum possa me ajudar.
O problema é o seguinte: Estou utilizando o componente TSQLDataSet da paleta DBExpress (claro) para fazer um consulta em um BD Firebird, quando preencho a propriedade COMMANDTEXT com uma expressão parecida com essa (Select * From Grupos Where ID_Grupo = :ID_Grupo) em design time o próprio componente já reconhece que ID_Grupo é um parâmetro, mas o mesmo não ocorre em Run Time, e o que eu preciso é criar o Select dinamicamente com parâmetro, só que quando vou atribuir um valor para o parâmetro recebo a menssagem de erro ´List index out bound (0)´. Por algum motivo em Run Time o delphi não recohece que exista parâmetros passados no CommandText....
A pergunta é: tem como fazer com que esse parâmetro seja reconhecido atravéz de algum comando? existe algum macete para isso?


Brener Leão

Brener Leão

Responder

Posts

19/07/2007

Emerson Nascimento

vc está usando clientdataset?


Responder

Gostei + 0

20/07/2007

Brener Leão

Bem, estou utilizando Firebird + Delphi 2006 e o componente em questão é um SQLDataSet conforme mencionado anteriormente, que em run time não consigo fazer com que ele reconheça os parâmetros mencionados em sua propriedade CommandText, como ocorre em Design Time.


Responder

Gostei + 0

20/07/2007

Emerson Nascimento

eu trabalho com sqldatasets e nunca me deparei com tal problema.
faço assim:

with sqldataset1 do
begin
  close;
  commandtext := ´select * from cliente where cnpj = :cnpj´;
  parambyname(´cnpj´).asstring := strCNPJ;
  open;
end;



Responder

Gostei + 0

20/07/2007

Brener Leão

É... seria o ideal, mas como esse código tem que ser dinâmico eu não sei quem será o parametro, entâo ficaria mais ou menos assim:



cLinhaCMD:= ´Select * From ´ + cNomeTabela + ´ where ´ +  cCampo + ´ = :´ + cCampo;
With SQLDataSet1 do
begin
  commandText:= cLinhaCMD;
  Params[0].AsInteger:= cVariavelQualquer
end


Params[0].AsInteger:= cVariavelQualquer --> essa linha é que da o erro ´list index out bounds(0)´

Então é isso, eu não sei qual será a tabela e nem o nome do parâmetro, por esse motivo achei mais fácil referencia-lo pelo índice.
Sei que eu poderia referencia-lo pelo ´parambyname´ usando uma variávell, mas de teimoso que sou, gostaria de descobrir uma maneira de fazer o SQLDataSet ´enxergar´ em ´run time´ que existe um parâmetro no índice (0).


Responder

Gostei + 0

20/07/2007

Emerson Nascimento

cLinhaCMD:= ´Select * From ´ + cNomeTabela + ´ where ´ +  cCampo + ´ = :´ + cCampo;
With SQLDataSet1 do
begin
  close;
  commandText := cLinhaCMD;
  parambyname(cCampo).value := cVariavelQualquer;
  open;
end


isso deveria funcionar...


Responder

Gostei + 0

20/07/2007

Martins

cLinhaCMD:= ´Select * From ´ + cNomeTabela + ´ where ´ +  cCampo + ´ = :´ + cCampo;
With SQLDataSet1 do
begin
  close;
  commandText := cLinhaCMD;
  parambyname(cCampo).value := cVariavelQualquer;
  open;
end
isso deveria funcionar...


Também penso q agora deve funcionar, infelizmente não posso testar, mas acredito q agora vai dar certo.


Responder

Gostei + 0

20/07/2007

Brener Leão

Caros amigos, muito obrigado pela ajuda, graças a colaboração de vocês, o caso foi encerrado com sucesso.
Baseado nas dicas que me forneceram descobri que eu estava me esquecendo de ligar o SQLDataSet a um SQLConnection. Parece estranho se esquecer de algo assim, mas acontece que eu estou desenvolvendo um componente de busca auxiliar, e portanto não rola nada visual, somente texto, então acabei me esquecendo de criar uma propriedade SQLConnection para o componente que é derivado de um TEdit e serve para fazer buscas auxiliares a um banco de dados via DBXpress.
Caso tenham interesse neste componente, posso fornecer o código fonte a vocês para que possam analiza-lo, e também estarei receptivo a críticas e sugestões que colaborem com o enriquecimento do código.

Mais uma vez, muito obrigado a voces. Vlw!


Responder

Gostei + 0

21/07/2007

Martins

[quote:88c344bb0c=´Brener Bento Leão´]Caros amigos, muito obrigado pela ajuda, graças a colaboração de vocês, o caso foi encerrado com sucesso.
Baseado nas dicas que me forneceram descobri que eu estava me esquecendo de ligar o SQLDataSet a um SQLConnection. Parece estranho se esquecer de algo assim, mas acontece que eu estou desenvolvendo um componente de busca auxiliar, e portanto não rola nada visual, somente texto, então acabei me esquecendo de criar uma propriedade SQLConnection para o componente que é derivado de um TEdit e serve para fazer buscas auxiliares a um banco de dados via DBXpress.
Caso tenham interesse neste componente, posso fornecer o código fonte a vocês para que possam analiza-lo, e também estarei receptivo a críticas e sugestões que colaborem com o enriquecimento do código.

Mais uma vez, muito obrigado a voces. Vlw![/quote:88c344bb0c]

Ok! Um boa iniciativa, e disponha para trocarmos idéias aqui no fórum mesmo ou MP.

bons códigos
martinsbios@gmail.com


Responder

Gostei + 0

22/07/2007

Adriano Santos

[quote:b2f33437fe=´Brener Bento Leão´]Caros amigos, muito obrigado pela ajuda, graças a colaboração de vocês, o caso foi encerrado com sucesso.
Baseado nas dicas que me forneceram descobri que eu estava me esquecendo de ligar o SQLDataSet a um SQLConnection. Parece estranho se esquecer de algo assim, mas acontece que eu estou desenvolvendo um componente de busca auxiliar, e portanto não rola nada visual, somente texto, então acabei me esquecendo de criar uma propriedade SQLConnection para o componente que é derivado de um TEdit e serve para fazer buscas auxiliares a um banco de dados via DBXpress.
Caso tenham interesse neste componente, posso fornecer o códigos fonte a vocês para que possam analiza-lo, e também estarei receptivo a críticas e sugestões que colaborem com o enriquecimento do código.

Mais uma vez, muito obrigado a voces. Vlw![/quote:b2f33437fe]
Brener, muito boa iniciativa mesmo. Se precisar de um servidor para hospedar o componente pode me dar um toque. Criei um blog pra exportar esse tipo de iniciativa e divulgar todo e qualquer tipo de conteúdo pra comunidade. Se quiser eu coloco no ar, com os devidos créditos claro.

Abs


Responder

Gostei + 0

24/07/2007

Brener Leão

Muito obrigado, e parabéns pro ter criado esse Blog, acredito que será de grande utilidade para nossa comunidade. A respeito do componente que estou desenvolvendo, e gostaria sim de estar disponibilizando a quem se interessar por ele. Estou em finalizando algumas imlpementações nele e crei que em breve já poderei disponibiliza-lo.
Um pouco sobre meu componete:
Trata-se de um edit que faz consultas SQL a bancos conectados via DBXPress. Caso o código digitado pelo usuário seja encontrado no banco de dados ele preenche um Edit normal, indicado anteriormente nas propriedades de nosso componente, com o detalhe do registro. Por exemplo, em um cadastro de Cidades, o usuário digita ´4´ e tecla enter, caso seja encontrada alguma ocorrência, o componente preenche um outro edit com o nome da cidade. Caso não seja encontrado nenhum registro ele retorna ´código não encontrado´ e ainda, caso o usuário tecle enter sem preencher o campo, é aberto um form para que seja feita uma busca atravéz de um outro campo como o nome da cidade ou CEP.


Responder

Gostei + 0

24/07/2007

Adriano Santos

[quote:f587623a70=´Brener Bento Leão´]Muito obrigado, e parabéns pro ter criado esse Blog, acredito que será de grande utilidade para nossa comunidade. A respeito do componente que estou desenvolvendo, e gostaria sim de estar disponibilizando a quem se interessar por ele. Estou em finalizando algumas imlpementações nele e crei que em breve já poderei disponibiliza-lo.
Um pouco sobre meu componete:
Trata-se de um edit que faz consultas SQL a bancos conectados via DBXPress. Caso o código digitado pelo usuário seja encontrado no banco de dados ele preenche um Edit normal, indicado anteriormente nas propriedades de nosso componente, com o detalhe do registro. Por exemplo, em um cadastro de Cidades, o usuário digita ´4´ e tecla enter, caso seja encontrada alguma ocorrência, o componente preenche um outro edit com o nome da cidade. Caso não seja encontrado nenhum registro ele retorna ´código não encontrado´ e ainda, caso o usuário tecle enter sem preencher o campo, é aberto um form para que seja feita uma busca atravéz de um outro campo como o nome da cidade ou CEP.[/quote:f587623a70]
Parabén velho, muito bom. A hora que quiser me contacte em particular ou meu email que disponibilizo pra galera o arquivo do componente.
Abs


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar